Jenkins:生成失败后通过SSH发布

Jenkins:生成失败后通过SSH发布,ssh,jenkins,Ssh,Jenkins,我正在尝试使用插件将多种构建工件发布到外部服务器。构建构件的示例包括编译构建、测试的XML输出和linting的JSON输出 如果测试或linting导致错误,构建将失败或标记为不稳定。在生成失败的情况下,通过SSH发布插件不会复制生成工件,并写入控制台: SSH: Current build result is [FAILURE], not going to run. 如果存在此信息,我看不出有任何理由不想发布它,并且我希望继续将错误报告为构建失败。那么,有没有办法强迫Jenkins发布构建

我正在尝试使用插件将多种构建工件发布到外部服务器。构建构件的示例包括编译构建、测试的XML输出和linting的JSON输出

如果测试或linting导致错误,构建将失败或标记为不稳定。在生成失败的情况下,通过SSH发布插件不会复制生成工件,并写入控制台:

SSH: Current build result is [FAILURE], not going to run.
如果存在此信息,我看不出有任何理由不想发布它,并且我希望继续将错误报告为构建失败。那么,有没有办法强迫Jenkins发布构建工件,即使作业被标记为失败

我想我可以使用来强制实现这一点,方法是将SSH上的发布包装为“始终”状态,但这会在构建失败时提供与之前相同的输出

我可以想出一些解决办法:

a) 将构建状态存储在环境变量中;强迫地位走向成功;执行发布步骤;使用
java jenkins-cli.jar set build status$STORED\u status从环境变量恢复生成状态

b) 编写一个bash脚本,使用SSH手动执行发布步骤,完全删除通过SSH发布插件

在我推进这两种解决方案(我都不喜欢)之前,我是否缺少任何配置

引用《老旷课》关于:

即使已标记生成,如何强制通过SSH发布 失败


配置部分“构建环境”

作业配置/构建环境/在构建运行后通过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}

我使用上面提到的第二个选项解决了这个问题。我的Jenkins作业中的Post Script任务中的一个简单的
rsync
命令。如果没有人能为这个插件提供修复建议,我会在几天后添加这个作为答案。哈哈,我在jenkinsci用户邮件列表上问了这个问题。我打算在这里加上老胡同提供的答案,供其他任何可能寻找相同答案的人参考。我最终没有使用这个解决方案,因为Jenkins Job Builder(AFAICT)不支持它,所以它不适合我的目的。