在Jenkins中使用SSH密钥在私有BitBucket存储库中构建Go项目,并具有依赖关系



我正在尝试为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私有依赖关系的解决有点复杂。在执行go test或其他操作之前,请尝试下载依赖项。我可以提出两种解决方案,试着让我知道哪一种对你有效:

1.使用ssh密钥
当您有一个可以访问私有repo的ssh密钥时,请尝试(假设ssh被存储并检索为名为BITBUCKET_SSH_KEY的env-var(:

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
您可以从比特桶生成登录令牌。使用此令牌,拥有两个env变量BITBUCKET_LOGINBITBUCKET_TOKEN,然后尝试以下操作:

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

你好,我终于发现了错误,问题是:环境的$PATH!Seams表示,计算机的默认路径与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"...

最新更新