Jenkins scripted pipeline предоставляет учетные данные ssh github для этапа сборки sh

У меня есть шаг sh в скриптовом конвейере Jenkins, который, в свою очередь, просит git клонировать частный репозиторий GitHub через SSH (это система управления зависимостями, которая обрабатывает зависимости, размещенные на GitHub). Сам конвейер выполняется через подключаемый модуль GitHub Organization. Он включает команду checkout scm, которая также обращается к частному репозиторию, из журнала я вижу, что она использует переменную среды GIT_SSH для передачи информации для входа на этот шаг (это отлично работает). Есть ли способ передать ту же информацию на другой шаг, то есть на мой шаг sh "install_dependencies.sh"? Обратите внимание, что withCredentials предоставит мне доступ к учетным данным через переменные среды, но как передать их в git? GIT_SSH - это путь к сценарию оболочки ssh, который я не знаю, как сгенерировать с помощью withCredentials. Есть ли другой способ передать учетные данные в git через переменные среды?

Минимальный Jenkinsfile выглядел бы следующим образом:

node {
    checkout scm  // successfully accesses github credentials
    withCredentials([
        // what to put here?
    ]) {
        // install python dependencies
        sh 'pip install -r requirements.txt'
    }
    sh 'pytest'
}

В файле requirements.txt перечислены зависимости, в нем есть строка вида -e git+ssh://git@github.com/some_private/repo@dev#egg=egg_name который дает команду pip получить требование через git.

Вероятно, можно вручную проверить код, используя другой шаг Jenkins checkout scm, а затем установить его из Jenkinsfile. Однако это противоречило бы цели использования requirements.txt в качестве единственного источника истины для требований.

Вы говорите, что у вашего requirements.txt есть зависимости, которые втягивает git? Я не знал, что pip может это сделать.

Matt Schuchard 31.10.2018 13:57

Это делает: pip.pypa.io/en/stable/reference/pip_install/#git.

burnpanck 31.10.2018 16:33
1
2
1 622
1

Ответы 1

Я только что нашел вопрос, и что сработало для меня в соответствии с документами, было

        withCredentials([sshUserPrivateKey(credentialsId: 'Credential-id', keyFileVariable: 'CERT')]) {
      sh 'cp -prf $CERT ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa'
}

это копирует сертификат из того места, где он находится, в локальное хранилище сертификатов докеров. что позволяет мне клонировать при извлечении зависимости

Другие вопросы по теме