在轮询 SCM 时将 ssh-agent 与 jenkins 一起使用
Posted
技术标签:
【中文标题】在轮询 SCM 时将 ssh-agent 与 jenkins 一起使用【英文标题】:Using ssh-agent with jenkins while polling SCM 【发布时间】:2013-10-10 20:37:06 【问题描述】:我正在使用 Jenkins ssh-agent 插件来为我的构建提供 ssh 凭据,这可以完美运行,但是我将其设置为轮询 scm(在本例中为 bitbucket git)以检查更改。
当然,要访问 repo 以轮询更改,它还需要那些 ssh 凭据,我似乎无法在 wiki 中找到与此相关的任何内容,但必须有办法这样做。
他们没有实现它似乎是一件很愚蠢的事情,毕竟如果您需要 ssh 凭据来克隆和构建,您还需要他们进行轮询对吗?
【问题讨论】:
【参考方案1】:从 SSH 密钥中删除密码是不可接受的步骤。
jenkins ssh-agent plugin 有望解决这个问题,但据我所知,它目前在轮询方面已被破坏:
https://issues.jenkins-ci.org/browse/JENKINS-21226
从 Jenkins 1.545 开始,我还没有找到一种可行、安全的方法来实现基于 ssh 的服务器通信,该通信还包括轮询。
【讨论】:
答案过时了?【参考方案2】:假设您的作业在 Jenkins master 上运行。 为了能够对需要 SSL 连接的 Git 存储库进行轮询:
-
备份您的私钥。
使用以下一种解决方案从您的私钥中删除密码:How do I remove the passphrase for the SSH key without having to create a new key?
将您的 Jenkins 服务器上的无密码私钥添加到 Jenkins 的主目录 + .ssh 子文件夹 f.e.对于 CEntOS,它位于 /var/lib/jenkins/.ssh。确保只有 jenkins 用户可以访问该密钥(使用 chmod 600 和 chown jenkins:jenkins)。
在 Jenkins 的凭据管理器中添加新的 SSH 密钥和用户名,并为刚刚配置的私钥 f.e. 指定完整位置。 /var/lib/jenkins/.ssh/id_rsa
设置您的作业并为 Git 存储库设置和 SSH 代理插件指定这些凭据。
在这些步骤之后,您可以在必要时进行轮询以触发 Job,以及从 Job 本身克隆和获取。
【讨论】:
【参考方案3】:编辑:虽然以下解决方案显然适用于该 JIRA 问题的评论者,但它不适用于我。您的里程可能会有所不同。
在您工作的配置页面的其他行为下,添加“使用工作区强制轮询”
似乎从 2014 年 9 月开始提供。
通过https://issues.jenkins-ci.org/browse/JENKINS-21226?focusedCommentId=210643&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-210643
【讨论】:
【参考方案4】:在 git 插件信息本身中有很多关于 SSH 密钥的信息:
https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin
基本上,您需要在运行 jenkins 的 CI 用户上安装密钥。 (未集成 SSH 凭据插件。)
【讨论】:
以上是关于在轮询 SCM 时将 ssh-agent 与 jenkins 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
YouTube HTML5 API - 在轮询播放器当前时间时是不是可以获得更好的时间分辨率?
如何使用信号调用同一进程中的另一个线程在轮询函数上休眠的进程而不杀死它?
Jenkins 教程:使用 Ngrok 配置(SCM)Github 触发器和 Git 轮询