使用 SSH 密钥在私有 BitBucket 存储库中使用依赖项在 Jenkins 中构建 Go 项目
Build Go project in Jenkins with dependencies in private BitBucket repository using SSH keys
我正在尝试为 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 private 依赖项解决起来有点复杂。在执行 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_LOGIN
和 BITBUCKET_TOKEN
然后尝试以下操作:
go env -w GOPRIVATE=bitbucket.org
echo "machine bitbucket.org login ${BITBUCKET_LOGIN} password ${BITBUCKET_TOKEN}" > ~/.netrc
go mod download
您好,我终于找到了错误,问题是:
环境的 $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"...
我正在尝试为 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 private 依赖项解决起来有点复杂。在执行 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_LOGIN
和 BITBUCKET_TOKEN
然后尝试以下操作:
go env -w GOPRIVATE=bitbucket.org
echo "machine bitbucket.org login ${BITBUCKET_LOGIN} password ${BITBUCKET_TOKEN}" > ~/.netrc
go mod download
您好,我终于找到了错误,问题是: 环境的 $PATH! 接缝的是电脑的路径和jenkins的默认路径不一样。 如果你想使用本地计算机的某个环境,你应该在环境中添加一个新变量 $PATH,在本地 cmd 中打印 $PATH 并比较 jenkinsfile
上的 $PATHjenkinsfile中的解决方案:
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"...