【问题标题】:Edit or replace app.config file in Jenkins build在 Jenkins 构建中编辑或替换 app.config 文件
【发布时间】:2024-04-29 10:35:02
【问题描述】:

我想通过 Jenkins 使用 Specflow 运行自动化测试。 我创建了一个连接到 TFVC 的构建,并且能够使用 MSBuild 步骤构建 Visual Studio 项目。 我已经使测试可配置,所以有一个 App.config 文件和 Default.srprofile 文件。 我希望能够使用 Jenkins 构建来编辑/替换这些文件。 到目前为止,我已经尝试了带有构建步骤的“配置文件提供程序插件”和“文本文件操作”插件。 每次构建尝试编辑/替换这些文件时,我都会收到以下错误:

Creating/updating file at 'C:\Program Files (x86)\Jenkins\workspace\NAMEOFBUILD/AutomationFolder/App.config'
File already exists at 'C:\Program Files (x86)\Jenkins\workspace\NAMEOFBUILD/AutomationFolder/App.config', selected write option is 'overWrite'
Failed to create/update file. C:\Program Files (x86)\Jenkins\workspace\NAMEOFBUILD\AutomationFolder\App.config
java.nio.file.AccessDeniedException: C:\Program Files (x86)\Jenkins\workspace\NAMEOFBUILD\AutomationFolder\App.config
    at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(Unknown Source)
    at java.nio.file.spi.FileSystemProvider.newOutputStream(Unknown Source)
    at java.nio.file.Files.newOutputStream(Unknown Source)
    at hudson.FilePath$37.invoke(FilePath.java:1922)
    at hudson.FilePath$37.invoke(FilePath.java:1918)
    at hudson.FilePath.act(FilePath.java:998)
    at hudson.FilePath.act(FilePath.java:976)
    at hudson.FilePath.write(FilePath.java:1918)
    at com.etas.jenkins.plugins.CreateTextFile.CreateFileTask.call(CreateFileTask.java:105)
    at com.etas.jenkins.plugins.CreateTextFile.CreateFileTask.call(CreateFileTask.java:39)
    at hudson.remoting.LocalChannel.call(LocalChannel.java:45)
    at com.etas.jenkins.plugins.CreateTextFile.CreateFileBuilder.perform(CreateFileBuilder.java:95)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:735)
    at hudson.model.Build$BuildExecution.build(Build.java:206)
    at hudson.model.Build$BuildExecution.doRun(Build.java:163)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:490)
    at hudson.model.Run.execute(Run.java:1735)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:405)
Build step 'Create/Update Text File' marked build as failure

如果我编辑/替换项目中不存在的文件,它似乎可以工作。是什么阻止它更新 App.config 文件?

【问题讨论】:

  • 这是一个成功的输出,我只是将文件名从 App.config 更改为 Appconfig: Creating/updating file at 'C:\Program Files (x86)\Jenkins\workspace\NAMEOFBUILD/AutomationFolder/ Appconfig' 文件已存在于 'C:\Program Files (x86)\Jenkins\workspace\NAMEOFBUILD/AutomationFolder/Appconfig',选择的写入选项是 'overWrite' 在 C:\Program Files (x86)\Jenkins 成功创建/更新文件\workspace\NAMEOFBUILD/AutomationFolder/Appconfig 完成:成功

标签: visual-studio jenkins msbuild


【解决方案1】:

所以 D'oh! 时刻。 Jenkins 将工作空间文件夹下的所有文件设置为只读。

我之前刚刚添加了一个“Windows 批处理命令”步骤:

attrib -r AutomationFolder\App.config

使文件可读写,然后下一步成功通过。

【讨论】: