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}