如何为Gitlab runner启用SSH克隆?

如何为Gitlab runner启用SSH克隆?,git,ssh,gitlab,gitlab-ci,gitlab-ci-runner,Git,Ssh,Gitlab,Gitlab Ci,Gitlab Ci Runner,我在Windows Gitlab runner上通过HTTP克隆大型存储库时遇到一些问题。我尝试了几种方法来执行浅克隆或禁用克隆压缩。还是不走运 通过SSH克隆同一存储库作为临时解决方案非常有效,我希望在我们的Gitlab CI过程中实现这一点 现在的问题是,我不知道如何使用SSH作为gitlab multi runner的克隆方法。它似乎只是使用HTTP作为默认设置,关于克隆,我唯一的选择是它将执行完整克隆还是提取 有人能解释一下我如何让克隆/获取在SSH而不是HTTP上运行吗 Gitlab

我在Windows Gitlab runner上通过HTTP克隆大型存储库时遇到一些问题。我尝试了几种方法来执行浅克隆或禁用克隆压缩。还是不走运

通过SSH克隆同一存储库作为临时解决方案非常有效,我希望在我们的Gitlab CI过程中实现这一点

现在的问题是,我不知道如何使用SSH作为gitlab multi runner的克隆方法。它似乎只是使用HTTP作为默认设置,关于克隆,我唯一的选择是它将执行完整克隆还是提取

有人能解释一下我如何让克隆/获取在SSH而不是HTTP上运行吗

Gitlab版本:Gitlab社区版8.10.7

谢谢

根据:

您需要:

  • 使用SSH keygen创建新的SSH密钥对
  • 将私钥作为秘密变量添加到项目中
  • 在作业期间运行ssh代理以加载私钥
  • gitlab_ci.yml示例:

    before_script:
      # Install ssh-agent if not already installed, it is required by Docker.
      # (change apt-get to yum if you use a CentOS-based image)
      - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    
      # Run ssh-agent (inside the build environment)
      - eval $(ssh-agent -s)
    
      # Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
      - ssh-add <(echo "$SSH_PRIVATE_KEY")
    
      # For Docker builds disable host key checking. Be aware that by adding that
      # you are suspectible to man-in-the-middle attacks.
      # WARNING: Use this only with the Docker executor, if you use it with shell
      # you will overwrite your user's SSH config.
      - mkdir -p ~/.ssh
      - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
      # In order to properly check the server's host key, assuming you created the
      # SSH_SERVER_HOSTKEYS variable previously, uncomment the following two lines
      # instead.
      # - mkdir -p ~/.ssh
      # - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts'
    
    在脚本之前:
    #安装ssh代理如果尚未安装,Docker需要它。
    #(如果使用基于CentOS的映像,请更改为转到yum)
    -'哪个ssh代理| |(apt get update-y&&apt get install openssh client-y)'
    #运行ssh代理(在生成环境中)
    -eval$(ssh代理-s)
    #将SSH_PRIVATE_key变量中存储的SSH密钥添加到代理存储
    -ssh add~/.ssh/config'
    #为了正确检查服务器的主机密钥,假设您创建了
    #SSH_SERVER_HOSTKEYS变量之前,取消注释以下两行
    #相反。
    #-mkdir-p~/.ssh
    #-“[-f/.dockerenv]]和&echo“$SSH\u SERVER\u HOSTKEYS”>~/.SSH/known\u hosts”
    
    根据:

    您需要:

  • 使用SSH keygen创建新的SSH密钥对
  • 将私钥作为秘密变量添加到项目中
  • 在作业期间运行ssh代理以加载私钥
  • gitlab_ci.yml示例:

    before_script:
      # Install ssh-agent if not already installed, it is required by Docker.
      # (change apt-get to yum if you use a CentOS-based image)
      - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    
      # Run ssh-agent (inside the build environment)
      - eval $(ssh-agent -s)
    
      # Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
      - ssh-add <(echo "$SSH_PRIVATE_KEY")
    
      # For Docker builds disable host key checking. Be aware that by adding that
      # you are suspectible to man-in-the-middle attacks.
      # WARNING: Use this only with the Docker executor, if you use it with shell
      # you will overwrite your user's SSH config.
      - mkdir -p ~/.ssh
      - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
      # In order to properly check the server's host key, assuming you created the
      # SSH_SERVER_HOSTKEYS variable previously, uncomment the following two lines
      # instead.
      # - mkdir -p ~/.ssh
      # - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts'
    
    在脚本之前:
    #安装ssh代理如果尚未安装,Docker需要它。
    #(如果使用基于CentOS的映像,请更改为转到yum)
    -'哪个ssh代理| |(apt get update-y&&apt get install openssh client-y)'
    #运行ssh代理(在生成环境中)
    -eval$(ssh代理-s)
    #将SSH_PRIVATE_key变量中存储的SSH密钥添加到代理存储
    -ssh add~/.ssh/config'
    #为了正确检查服务器的主机密钥,假设您创建了
    #SSH_SERVER_HOSTKEYS变量之前,取消注释以下两行
    #相反。
    #-mkdir-p~/.ssh
    #-“[-f/.dockerenv]]和&echo“$SSH\u SERVER\u HOSTKEYS”>~/.SSH/known\u hosts”
    
    作为gitlab的新手,我已经设法找到了解决这个问题的方法,因为我还没有找到改变默认克隆过程的内置方法(尽管如此)

    通过,只需在
    之前的脚本中编写自己的克隆过程,就可以有效地完全覆盖其行为。仅出于示例的目的,下面展示了如何在HTTP克隆中实现这一点,但可以适用于
    ssh
    cloning():

  • 创建一个名为“gitlab runner”的新用户,并生成他们的用户身份验证令牌供以后使用(或者在您的情况下,您将生成ssh密钥)

  • 通过在项目或组设置中添加以下变量来禁用runner的克隆过程:
    ../settings/ci\u cd

    关键:GIT_战略

    价值:无

  • 在脚本之前的
    中克隆您的回购,例如:

  • 在脚本之前: ##清理工作目录 -BUILD\u DIR=/home/gitlab runner/builds/$runner\u令牌/0 -CLONE_DIR=“$BUILD_DIR/$CI_PROJECT_PATH” -cd$BUILD_DIR -rm-rf$克隆目录 -mkdir-p$CLONE\u DIR 每一次克隆项目(效率低下,考虑如果已经存在,则执行取回) -git克隆http://gitlab-runner:$GITLABRUNNER\u USER\u AUTH_TOKEN@server:8888/${CI_PROJECT_PATH}.git$CLONE_DIR -cd$CLONE\u目录 注意:以下是我在步骤2中配置的相关变量,而不是在脚本中硬编码:

    • RUNNER\u TOKEN
      :“RUNNER TOKEN”值列在管理员“Runners”菜单中,用于您尝试运行的特定跑步者
    • GITLABRUNNER\u USER\u AUTH\u TOKEN
      :这是您在步骤1中生成的AUTH TOKEN
    进一步阅读:

    你可以通过发行替代品来避免上述假账方法。或者,如果对任何项目的访问的安全影响是一个问题,则可以选择更安全的控制。作为比较:

    部署密钥可在不相关或甚至不属于同一组的项目之间共享。部署令牌属于项目或组

    部署密钥是您需要在计算机上生成的SSH密钥。部署令牌由您的GitLab实例生成,只提供给用户一次(在创建时)

    只要已注册并启用部署密钥,它就是有效的。部署令牌可能是时间敏感的,因为您可以通过设置过期日期来控制它们的有效性

    您不能使用部署项登录到注册表,也不能对其执行读/写操作,但这可以通过部署令牌实现。 您需要SSH密钥对来使用部署密钥,但不需要部署令牌


    作为gitlab的新手,我已经设法解决了这个问题,因为我还没有找到改变默认克隆过程的内置方法(尽管如此)

    通过,只需在
    之前的脚本中编写自己的克隆过程,就可以有效地完全覆盖其行为。仅出于示例的目的,下面展示了如何在HTTP克隆中实现这一点,但可以适用于
    ssh
    cloning():

  • 创建一个名为“gitlab runner”的新用户,并生成他们的用户身份验证令牌供以后使用(或者在您的情况下,您可以
    Host gitlab.example.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/deploy-key
    
    script:
      - git remote set-url --push origin git@$CI_SERVER_HOST:$CI_PROJECT_PATH.git