# #go #jenkins #ssh #bitbucket #jenkins-plugins
Вопрос:
Я пытаюсь настроить автоматическую сборку для проектов 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 получает доступ к нашему личному хранилищу безопасным способом?
ПРИМЕЧАНИЕ: перейдите к тестовым системам, чтобы игнорировать конфигурацию git, и он пытается достичь зависимостей от https, кроме того, у меня есть некоторые ошибки Mercurial.
Ответ №1:
Частные зависимости Go немного сложнее разрешить. Попробуйте загрузить зависимости, прежде чем делать go test
что-либо еще. Есть 2 решения, которые я могу представить, попробуйте и дайте мне знать, какое из них сработало для вас:
1. Использование ssh-ключа
Если у вас есть ssh-ключ, который имеет доступ к закрытым репозиториям, попробуйте сделать это (при условии, что ssh хранится и повторно используется как env var с именем 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. С помощью этого токена создайте два параметра env BITBUCKET_LOGIN
BITBUCKET_TOKEN
, а затем попробуйте выполнить следующие действия:
go env -w GOPRIVATE=bitbucket.org
echo "machine bitbucket.org login ${BITBUCKET_LOGIN} password ${BITBUCKET_TOKEN}" > ~/.netrc
go mod download
Ответ №2:
Здравствуйте, я, наконец, нашел ошибку, и проблема заключалась в следующем: $ПУТЬ к среде! Указывает, что у компьютера другой путь, отличный от пути Дженкинса по умолчанию. Если вы хотите использовать определенную среду вашего локального компьютера, вам следует добавить новую переменную $PATH в среду, распечатать $PATH в локальном cmd и сравнить $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"...