我试图与Bamboo建立持续集成。我想配置一个ssh进入我们的舞台服务器的任务,cd进入正确的目录并执行git pull。
我已经能够设置ssh任务了,但是执行git pull很困难。
我采取的步骤:
将ssh任务配置为cd进入项目目录并运行以下脚本:
#!/bin/bash
echo "pulling from master"
git pull origin master
脚本运行,但日志在尝试拉出后显示Permission denied (publickey).
错误。
我将我的remote-url从HTTPS切换到ssh并创建了一个公钥。现在,当我尝试手动拉动时,它会询问密钥的密码。
使用ssh-agent
缓存会话的密码。
意识到此缓存仅在我关闭会话之前一直存在,因此我按照本文中的步骤(https://confluence.atlassian.com/display/BITBUCKET/Set+up+SSH+for+Git)在每个新会话中启动ssh-agent。即我将此脚本添加到.bashrc
:
SSH_ENV=$HOME/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
并将其添加到.ssh / config文件中:
Host myStashInstance.org
IdentityFile ~/.ssh/id_rsa
我想知道在开始新会话时让ssh-agent启动的后续步骤是什么,这样我就可以继续搞清楚如何完成配置这项工作。 (如果我完全走错了路,也可以采取其他途径的建议。)
答案 0 :(得分:1)
总结一下,您遇到了以下问题:
git pull
。ssh-agent
)。有几种方法可以解决这个问题:
要简化此环境,请在Staging Server上安装Bamboo Agent。在Bamboo构建计划中输入Git URL和凭据,让Bamboo负责工作。
Bamboo将拉出Git仓库,然后您可以运行您想要的任何步骤并部署到您的登台服务器进程。
不要在登台服务器上执行Git操作,而是在服务器A上执行。在Bamboo构建计划中输入Git URL和凭据,让Bamboo负责工作。
在服务器A上签出项目后,运行您想要在那里执行的任何构建步骤,然后打包(zip / tar / jar / ...)构建结果并将它们复制到Staging Server。也许你根本不需要在Staging Server上使用Git。
这是最不安全的选项。将远程URL切换回HTTPS,然后在登台服务器上创建~/.netrc
文件,并在其中为您的Git服务器添加条目,提供用户名和密码,如下所述:https://confluence.atlassian.com/display/STASH/Permanently+authenticating+with+Git+repositories#PermanentlyauthenticatingwithGitrepositories-Usingthe.netrcfile
示例:
machine mygitserver
login mario
password SECRET
注意,这要求您以明文形式在.netrc
文件中存储密码。如果您能承受这种风险,请仅使用此方法。如果此帐户使用的密码更改,您还必须在此文件中更改密码。您可能希望使用技术/服务帐户,而不是真实的用户帐户。尽可能锁定此帐户。
这三个选项中的一个应该可以帮助您解决问题。