Создайте проект Go в Jenkins с зависимостями в частном репозитории BitBucket с использованием ключей SSH

# #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"...