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

标签 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通过将 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/

相关文章:

git远程推送无效

java - JSchException : UnknownHostKey

jenkins - 在命令行中将 Jenkins Slave 安装为 Windows 服务

git - 将更改推送到 Github 时无法让 Jenkins 触发构建

jenkins - Jenkins声明式管道中的条件环境变量

Github webhook URL 配置问题?如何修复它?

ssh - 使用 key 通过 ssh 进行 Rsync 获取错误 EC2

ssh - 如何配置 Ansible 来跳过两台堡垒机?

php - 根据错误的凭证处理 'ssh2_auth_password()'错误

jenkins - CasperJs + jenkins : when a test fails, 如何检索有关此测试的所有信息