0

我正在尝试与 Bamboo 建立持续集成。我想配置一个任务,将 ssh 放入我们的舞台服务器,将 cd 放入正确的目录并执行 git pull。

我已经能够设置 ssh 任务,但是执行 git pull 很困难。

我采取的步骤:

  • 配置 ssh 任务以 cd 进入项目目录并运行以下脚本:

    #!/bin/bash
    echo "pulling from master"
    git pull origin master
    
  • Permission denied (publickey).脚本运行,但在尝试拉取后日志显示错误。

  • 我将远程 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 的下一步是什么,以便我可以继续弄清楚如何完成配置此作业。(如果我完全走错了路,也愿意接受其他途径的建议。)

4

1 回答 1

1

总而言之,您遇到了以下问题:

  • Bamboo 代理在服务器 A 上运行
  • 服务器 B 是您的登台服务器
  • 作为在服务器 A 上运行的构建的一部分,您希望通过 SSH 连接到 B 并在git pull那里执行操作。
  • 对 Git 存储库的身份验证要求您输入密码或密码(即使使用ssh-agent)。

有几种方法可以解决这个问题:

选项 1:在临时服务器上运行 Bamboo 代理

要简化此环境,请在您的登台服务器上安装 Bamboo 代理。在 Bamboo 构建计划中输入 Git URL 和凭据,让 Bamboo 负责这项工作。

Bamboo 将提取 Git 存储库,然后您可以运行您想要的任何步骤并部署到您的登台服务器进程。

选项 2:部署到登台服务器

不要在登台服务器上执行 Git 操作,而是在服务器 A 上执行。在 Bamboo 构建计划中输入 Git URL 和凭据,让 Bamboo 负责这项工作。

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

选项 3:使用 .netrc 文件进行 Git 身份验证

这是最不安全的选项。将您的远程 URL 切换回 HTTPS,然后~/.netrc在暂存服务器上创建一个文件并在其中为您的 Git 服务器添加一个条目,提供用户名和密码,如下所述:https ://confluence.atlassian.com/display/STASH/永久+身份验证+with+Git+repositories#PermanentlyauthenticatingwithGitrepositories-Usingthe.netrcfile

例子:

machine mygitserver
login mario
password SECRET

注意,这要求您将密码以纯文本形式存储在.netrc文件中。仅当您可以承受这种风险时才使用此方法。如果用于此帐户的密码更改,您也必须在此文件中更改它。您可能希望为此使用技术/服务帐户,而不是真正的用户帐户。尽可能锁定此帐户。

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

于 2015-07-10T06:59:02.337 回答