Jenkins:构建失败后通过 SSH 发布
Jenkins: Publish over SSH after failed build
我正在尝试使用 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 包装在 "always" 条件中,但这在构建失败时给出了与之前相同的输出。
我可以想到几个解决方法:
a) 将构建状态存储在环境变量中;强制状态为 SUCCESS;执行发布步骤;使用 java jenkins-cli.jar set-build-status $STORED_STATUS
从环境变量恢复构建状态
或
b) 编写一个 bash 脚本以使用 SSH 手动执行发布步骤,完全删除 Publish Over SSH 插件
在我推进这两种解决方案(我都不喜欢)之前,是否缺少任何配置?
Quoting old hooky on jenkinsci-users:
How can I force Publish Over SSH to work even if the build has been marked
a failure?
在
中使用"Send files or execute commands over SSH after the build runs"
配置部分 "Build environment"
作业配置/构建环境/构建运行后通过 SSH 发送文件或执行命令
而不是使用 post-build 或 build-step。
我最终使用的解决方案是使用 rsync/ssh 使用 post 构建脚本手动复制文件。我在 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}
我正在尝试使用 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 包装在 "always" 条件中,但这在构建失败时给出了与之前相同的输出。
我可以想到几个解决方法:
a) 将构建状态存储在环境变量中;强制状态为 SUCCESS;执行发布步骤;使用 java jenkins-cli.jar set-build-status $STORED_STATUS
或
b) 编写一个 bash 脚本以使用 SSH 手动执行发布步骤,完全删除 Publish Over SSH 插件
在我推进这两种解决方案(我都不喜欢)之前,是否缺少任何配置?
Quoting old hooky on jenkinsci-users:
How can I force Publish Over SSH to work even if the build has been marked a failure?
在
中使用"Send files or execute commands over SSH after the build runs" 配置部分 "Build environment"
作业配置/构建环境/构建运行后通过 SSH 发送文件或执行命令
而不是使用 post-build 或 build-step。
我最终使用的解决方案是使用 rsync/ssh 使用 post 构建脚本手动复制文件。我在 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}