我正在尝试使用 Publish Over SSH用于将多种构建工件发布到外部服务器的插件。构建工件的示例包括已编译的构建、来自测试的 XML 输出和来自 linting 的 JSON 输出。
如果测试或 linting 导致错误,构建将失败或被标记为不稳定。在构建失败的情况下,Publish Over SSH 插件不会复制构建工件,写入控制台:
SSH: Current build result is [FAILURE], not going to run.
如果存在此信息,我看不出有什么理由不想发布,并且我想继续将错误报告为构建失败。那么,有什么方法可以强制 Jenkins 发布构建工件,即使该作业被标记为失败也是如此?
我以为我可以使用 Flexible Publish通过将 Publish Over SSH 包装在“始终”条件下来强制执行此操作,但这会在构建失败时提供与之前相同的输出。
我可以想到几个解决方法:
a) 将构建状态存储在环境变量中;强制状态为 SUCCESS;执行发布步骤;使用 java jenkins-cli.jar set-build-status $STORED_STATUS
或
b) 编写 bash 脚本以使用 SSH 手动执行发布步骤,完全删除 Publish Over SSH 插件
在我推进这两种解决方案(我都不喜欢)之前,是否缺少任何配置?
最佳答案
我最终使用的解决方案是使用 rsync/ssh 使用后期构建脚本手动复制文件。我在 Jenkins Job Builder YAML 中这样配置它:
- publisher:
name: publish-to-archive
publishers:
- post-tasks:
- matches:
- log-text: ".*"
script: |
ssh -i ${{HOME}}/.ssh/id_rsa jenkins@archiver "mkdir -p {archive_path}"
rsync -Pravdtze "ssh -i ${{HOME}}/.ssh/id_rsa" {source_path} jenkins@archiver:{archive_path}
关于ssh - Jenkins:构建失败后通过 SSH 发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31386012/