Оформить заказ Jenkins Pipeline Git SCM с учетными данными?

104

Я следил за этим руководством :

node {
  git url: 'https://github.com/joe_user/simple-maven-project-with-tests.git'
  ...
}

Однако он не сообщает, как добавить учетные данные. У Jenkins есть специальный раздел «Учетные данные», в котором вы определяете пользователя и пароль, а затем получаете идентификатор для использования в заданиях, но как мне использовать его в инструкциях по конвейеру?

Я пробовал:

git([url: 'git@bitbucket.org:company/repo.git', branch: 'master', credentialsId: '12345-1234-4696-af25-123455'])

не повезло:

stderr: Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Есть ли способ настроить кредиты в конвейере, или мне нужно поместить SSH-ключи в файл .ssh / authorized_keys пользователя Jenkin Linux?

В идеальном мире я хотел бы иметь репозиторий для конвейерных заданий и ключей репо, затем запустить Docker Jenkins и динамически добавлять туда эти задания и ключи без необходимости настраивать что-либо в консоли Jenkins.

Визуализировать
источник

Ответы:

162

В конвейере можно использовать следующее:

git branch: 'master',
    credentialsId: '12345-1234-4696-af25-123455',
    url: 'ssh://git@bitbucket.org:company/repo.git'

Если вы используете URL-адрес ssh, ваши учетные данные должны быть именем пользователя + закрытым ключом. Если вы используете URL-адрес клона https вместо ssh, ваши учетные данные должны быть именем пользователя + паролем.

Сербан Константин
источник
1
Это исправило, спасибо. Я не знал, что для работы SSH-url и HTTPS-url требуются разные учетные данные!
Render
3
это было полезно, но credentialsIdисходит от id, так /var/lib/jenkins/credentials.xmlкак мне пришлось изо всех сил понять это.
прайагупд 01
17
@prayagupd, вы сможете получить идентификатор учетных данных со страницы учетных данных ( http://yourjenkinsinstall/credentials). Нет необходимости копаться в файлах конфигурации.
Serban Constantin
4
Для тех, кто спрашивает «Как сгенерировать credentialsId». Вот как это найти. [1. Щелкните «Учетные данные» на домашней странице Jenkins, 2. Вы увидите таблицу со всеми учетными данными, которые вы создали. 3. ID в этой таблице]
vincedjango,
1
Для меня он не мог разрешить URL-адрес, когда я установил его для начала ssh://. Сняв, починил.
Moshisho
30

Чтобы явно оформить заказ с использованием определенных учетных данных

    stage('Checkout external proj') {
        steps {
            git branch: 'my_specific_branch',
                credentialsId: 'my_cred_id',
                url: 'ssh://git@test.com/proj/test_proj.git'

            sh "ls -lat"
        }
    }

Для оформления заказа на основе настроенных учетных данных в текущем задании Jenkins

    stage('Checkout code') {
        steps {
            checkout scm
        }
    }

Вы можете использовать оба этапа в одном файле Jenkins.

Upul Doluweera
источник
2
как сгенерировать этот credentialsId?
undefined
посмотрите - support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera 07
где мне хранить файл учетных данных. jenkins sais: Предупреждение: CredentialId "jenkins_key" не может быть найден.
Dinu Nicolae
Учетные данные @Dinu создаются в Jenkins, вы должны увидеть их в главном меню, если плагин установлен. support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera
1
Спасибо! кто-то, кто разместил всю вещь, а не просто немного здесь и немного здесь, и надеется, что люди волшебным образом знают, что добавить для остальной части.
25

Если вы хотите использовать учетные данные ssh,

  git(
       url: 'git@github.com<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )

если вы хотите использовать учетные данные имени пользователя и пароля, вам необходимо использовать http clone, как упоминалось в @Serban.

    git(
       url: 'https://github.com/<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )
f-общество
источник
10
как сгенерировать этот credentialsId?
undefined
Я сгенерировал учетные данные следующим образом: help.github.com/en/articles/… , я добавил открытый ключ в свой git, но где мне хранить этот файл. Дженкинс говорит: Предупреждение: CredentialId "jenkins_key" не может быть найден.
Dinu Nicolae
@DinuNicolae, пожалуйста, перейдите Adding new global credentials -> 7.по следующей ссылке. jenkins.io/doc/book/using/using-credentials
f-
14

Добавим вам быстрый пример с использованием git-плагина GitSCM :

    checkout([
        $class: 'GitSCM', 
        branches: [[name: '*/master']], 
        doGenerateSubmoduleConfigurations: false, 
        extensions: [[$class: 'CleanCheckout']], 
        submoduleCfg: [], 
        userRemoteConfigs: [[credentialsId: '<gitCredentials>', url: '<gitRepoURL>']]
    ])

в вашем трубопроводе

stage('checkout'){
    steps{
        script{
            checkout
        }
    }
}
Avivamg
источник
вы знаете, как использовать глобальные учетные данные для всей команды? Или есть способ, чтобы независимо от того, какой разработчик нажимает на github, он может предоставить свои учетные данные, не открывая их в Jenkinsfile
henhen
Вы можете управлять своим механизмом, связанным с вашей собственной логикой в ​​вашей команде разработчиков, и использовать разные ключи учетных данных для каждой группы. Например: если пользователь Github находится в списке «backend_developers», используйте <gitCredentialsGroupA>, если пользователь Github в списке «frontend_developers» использует <gitCredentialsGroupB>, спроектируйте свой механизм, связанный с вашим собственным вариантом использования.
avivamg
где бы вы хранили эти учетные данные? Это с плагином Jenkins Credentials?
henhen,
Используйте документацию по учетным
данным
1
Я искал повсюду простой checkoutпример, подобный этому, спасибо.
301_Moved_Permanently
1

Для того, что стоит добавить к обсуждению ... то, что я сделал, в конечном итоге помогло мне ... Поскольку конвейер запускается в рабочей области в образе докера, который очищается каждый раз при запуске. Я взял учетные данные, необходимые для выполнения необходимых операций с репо в моем конвейере, и сохранил их в файле .netrc. это позволило мне успешно авторизовать операции репозитория git.

withCredentials([usernamePassword(credentialsId: '<credentials-id>', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
    sh '''
        printf "machine github.com\nlogin $GIT_USERNAME\n password $GIT_PASSWORD" >> ~/.netrc
        // continue script as necessary working with git repo...
    '''
}
Madeyejm
источник
1

Это решило для меня использование

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Саранг
источник