1

我最近一直在使用 Docker 和 Jenkins 设置我自己的小型 CI/CD 设置。我已经为 Jenkins 安装了新的 Blue Ocean 插件并设置了一个管道:从 Git 拉取 -> 运行测试 -> 构建。效果很好。

但是,我无法找到如何在管道中创建适当的部署/发布步骤。构建后,我希望 Jenkins 容器通过 SSH 连接到运行所有 Docker 容器的 VPS,拉取然后重新构建该特定容器(使用 Docker Compose)。

我注意到在 Blue Ocean 中可以选择输入一个在测试/构建后运行的 bash 脚本——这是我应该使用的吗?

我一直在考虑为 Jenkins 使用 Publish over SSH 插件,但我无法找到该插件是否适用于 Blue Ocean,也无法找到如何为要使用的 Jenkins 容器创建 ssh 密钥。

对于我应该如何发布/构建更新的容器的任何见解/建议,我将不胜感激。

4

2 回答 2

2

终于让它工作了!是的,解决方案是使用 Jenkins 的“ssh-agent”插件(适用于 Jenkins Docker 容器!)。

我做了以下事情:

  1. 只是在我的本地机器上创建了一个 ssh 密钥对(ssh-keygen)
  2. 将 id_rsa 复制粘贴到 ssh-agent 插件
  3. 将 id_rsa.pub 复制到我想在其上运行构建/发布脚本的机器上

我的错误是直接使用 BlueOcean 而没有真正了解构建在 Jenkins 中的工作方式。BlueOcean 不允许与 ssh-agent 集成。您必须添加:

sshagent (credentials: ['deploy-dev']) {
    sh 'ssh -o StrictHostKeyChecking=no -l cloudbees 192.168.1.106 uname -a'
}

到您的构建正在使用的 Jenkinsfile。

我希望这对遇到同样问题的其他人有所帮助。

于 2017-05-04T12:07:34.320 回答
1

一个简单的sh 'ssh...'步骤就足以在您的 VPS 上调用一个脚本,该脚本将(该脚本)处理所有 docker 操作。

如果您的私有 ssh 密钥受密码保护,您可能希望使用管道步骤 "ssh-agent"将该调用包装在代理中:

node {
  sshagent (credentials: ['deploy-dev']) {
    sh 'ssh -o StrictHostKeyChecking=no -l cloudbees 192.168.1.106 uname -a'
  }
}

正如pmr评论的那样,JENKINS SSH Credentials Plugin可用于存储 ssh 私钥。
您还可以阅读最近的文章“使用 Jenkins 进行 SSH 凭证管理”。

于 2017-05-04T04:44:13.620 回答