2015-07-10 44 views
0

我试图建立与竹的持续集成。我想配置一个ssh进入我们舞台服务器的任务,cd进入正确的目录并执行git pull。通过ssh和旁路密码要求执行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。

我想知道下一步是什么时候开始一个新的会话让ssh-agent启动,这样我就可以继续搞清楚如何完成配置这个工作了。 (也欢迎其他途径的建议去追求,如果我完全是在错误的道路上。)

+0

您需要将该代码放入您的'〜/ .bash_profile'中,以便它在登录shell中启动。 –

+0

这仍然不起作用,但它绝对应该。在原始脚本中,我有可能从chrome中复制/粘贴问题。 – BarFooBar

回答

1

总之,你正在运行到了以下问题:

  • 竹代理程序运行在服务器A上
  • 服务器B是您的登台服务器
  • 作为在服务器A上运行的构建的一部分,您希望SSH进入B并在那里执行git pull
  • 验证Git回购需要您输入密码或密码(即使使用ssh-agent)。

有几个方面,这可以解决:

选项1:临时服务器

上运行竹代理为了简化这种环境下,您的临时服务器上安装代理竹。在Bamboo构建计划中输入Git URL和凭据,让Bamboo负责这项工作。

Bamboo将拉动Git回购,然后您可以运行您想要的任何步骤并将其部署到临时服务器进程。

选项2:部署到临时服务器

而不是做你的临时服务器上Git的工作,做服务器A上的竹构建计划中输入URL的Git和凭据,让竹照顾工作。

一旦您的项目在服务器A上签出,运行您想要在那里执行的任何构建步骤,然后打包(zip/tar/jar/...)构建结果并将它们复制到登台服务器。也许你根本不需要在Staging Server上使用Git。

选项3:使用.netrc文件的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文件中存储密码。如果您能承受这种风险,请仅使用此方法。如果用于此帐户的密码发生更改,则您必须在此文件中更改密码。您可能想为此使用技术/服务帐户,而不是真正的用户帐户。尽可能锁定此帐户。

这三个选项之一应该可以帮助你解决你的问题。

相关问题