Jenkins:在构建失败后通过SSH发布

时间:2015-07-13 14:24:56

标签: ssh jenkins

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

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

SSH: Current build result is [FAILURE], not going to run.

我认为没有理由为什么我不想发布此信息(如果存在),并且我希望继续报告错误作为构建失败。那么,即使作业被标记为失败,有没有办法强制Jenkins发布构建工件?

我以为我可以使用Flexible Publish强制执行此操作,方法是将“发布通过SSH”包装在“始终”状态,但这会在构建失败时提供与之前相同的输出。

我可以想到几个解决方法:

a)将构建状态存储在环境变量中;迫使状态成为SUCCESS;执行发布步骤;使用java jenkins-cli.jar set-build-status $STORED_STATUS

从环境变量中恢复构建状态

OR

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

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

2 个答案:

答案 0 :(得分:3)

  

jenkinsci-users上引用旧的勾引

     
    

即使已标记构建,如何强制通过SSH发布也能正常工作     失败?

  
     

使用“在构建运行后通过SSH发送文件或执行命令”   配置部分“构建环境”

作业配置/构建环境/在构建运行后通过SSH发送文件或执行命令

而不是使用后期构建或构建步骤。

答案 1 :(得分:2)

我最终使用的解决方案是使用rsync / ssh使用post build脚本手动复制文件。我在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}