【问题标题】:Build Go project in Jenkins with dependencies in private BitBucket repository using SSH keys使用 SSH 密钥在 Jenkins 中使用私有 BitBucket 存储库中的依赖项构建 Go 项目
【发布时间】:2021-07-06 03:08:40
【问题描述】:

我正在尝试为 Go 项目设置自动构建。我们有一些内部依赖项,但在我们的私有 BitBucket 上可用。但是需要凭证才能访问这些。我可以使用选项 Git 和 SSH 读取主存储库,但我可以从 BitBucket 下载依赖项。

我已经尝试过:

git config --global url."git@bitbucket.org:".insteadOf "https://bitbucket.org/"
export 'GOPRIVATE=bitbucket.org/*'

但这似乎不起作用,因为输出:

+ go version
22:33:27 go version go1.16.4 darwin/arm64

+ go test
22:33:29 go: missing Mercurial command. See https://golang.org/s/gogetcmd
22:33:30 go: bitbucket.org/repositorie_url: reading https://api.bitbucket.org/2.0/repositorie_url/dependency_repo 403 Forbidden
22:33:30    server response: Access denied. You must have write or admin access.

我如何确保 go get 或 go install 以安全的方式访问我们的私有存储库?

注意:去测试 sems 以忽略 git 配置,它正在尝试从 https 获取依赖项,此外我还有一些 Mercurial 错误。

【问题讨论】:

    标签: go jenkins ssh bitbucket jenkins-plugins


    【解决方案1】:

    Go 私有依赖项的解决有点复杂。在执行 go test 或其他任何操作之前尝试下载依赖项。我可以提出 2 种解决方案,请尝试告诉我哪一种对您有效:

    1.使用 ssh 密钥
    当你有一个可以访问私有仓库的 ssh 密钥时,试试这个 (假设 ssh 作为环境变量存储和检索,名称为 BITBUCKET_SSH_KEY):

    mkdir -p ~/.ssh
    echo "$BITBUCKET_SSH_KEY" > ~/.ssh/id_rsa
    chmod 600 ~/.ssh/id_rsa
    ssh-keygen -F bitbucket.org || ssh-keyscan bitbucket.org >>~/.ssh/known_hosts
    git config --global url."git@bitbucket.org:".insteadOf "https://bitbucket.org/"
    go env -w GOPRIVATE=bitbucket.org
    go mod download
    

    2。使用 .netrc
    您可以从 bitbucket 生成登录令牌。使用此令牌,拥有两个环境变量 BITBUCKET_LOGINBITBUCKET_TOKEN,然后尝试以下操作:

    go env -w GOPRIVATE=bitbucket.org
    echo "machine bitbucket.org login ${BITBUCKET_LOGIN} password ${BITBUCKET_TOKEN}" > ~/.netrc
    go mod download
    

    【讨论】:

      【解决方案2】:

      您好,我终于找到了错误,问题是: 环境的 $PATH ! 接缝表明计算机具有与jenkins默认路径不同的路径。 如果你想使用本地计算机的某个环境,你应该在环境中添加一个新变量 $PATH,在本地 cmd 中打印 $PATH 并比较 jenkinsfile 上的 $PATH

      jenkinsfile 中的解决方案:

      pipeline {
          agent {
              label 'macmini'
          }
          environment {
              PATH = "$HOME/go/bin:" +
                          "/usr/local/bin:/Library/Apple/usr/bin" +
                          "$PATH"...
          }
      }
      

      控制台:

      echo $PATH
      
      # overrite $PATH enviroment
      $PATH = "$HOME/go/bin:" +
                          "$HOME/go/bin:" +
                          "/usr/local/bin:/Library/Apple/usr/bin" +
                          "$PATH"...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-18
        • 1970-01-01
        • 1970-01-01
        • 2017-02-19
        • 2018-04-09
        • 2022-11-24
        • 2020-08-20
        相关资源
        最近更新 更多