以下代码是Jenkins中的“Execute Shell”构建步骤。该作业来自包含文件ranger-policies/policies.json
的仓库。我想要做的是更新该文件(在这种情况下使用curl命令),然后将更改提交到源代码控制并更新远程仓库。通过SSH使用SSH密钥,作业配置页面的“源代码管理”部分中的远程仓库成功提取作业。但是,当作业到达“执行Shell”步骤中的“git push origin master”行时,我收到Permission denied (publickey)
错误,就好像那些允许我成功提取回购的SSH密钥不可用在我想要推送的“执行外壳”步骤中。
curl -X GET --header "text/json" -H "Content-Type: text/json" -u user:pass "http://my-url.com/exportJson" > ranger-policies/policies.json
git add ranger-policies/policies.json
git commit -m "udpate policies.json with latest ranger policies `echo "$(date +'%Y-%m-%d')"`"
git push origin master
答案 0 :(得分:7)
我最终搞清楚如何让它发挥作用。解决方案涉及使用SSH代理插件。这是一个逐步描述我是如何做到的,希望它可以帮助其他人:
然后,正如詹金斯文档中的this帖子中所暗示的那样,转到新管道作业的主屏幕,然后单击“管道语法”。选择“git:Git”作为“Sample Step”,然后在“Repository URL”字段中输入要推送到的git repo。然后从“Credentials”下拉列表中为该repo选择相应的有效SSH密钥。一切都应该看起来像这样: 抓取“credentialsId”的值,在上面的屏幕截图中以红色突出显示。你以后需要它。
安装“工作空间清理插件”(https://wiki.jenkins.io/display/JENKINS/Workspace+Cleanup+Plugin,可选)和“SSH代理插件”(https://jenkins.io/doc/pipeline/steps/ssh-agent/,而非此选项所需的可选工具)。
相关文件:
答案 1 :(得分:1)
根据此gist,您需要按照以下方式设置远程源URL:
git remote set-url origin git@github.com:username/your-repository.git