Оформить заказ 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.


2
как сгенерировать этот credentialsId?
undefined


где мне хранить файл учетных данных. 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}"
    )

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
        }
    }
}

вы знаете, как использовать глобальные учетные данные для всей команды? Или есть способ, чтобы независимо от того, какой разработчик нажимает на 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...
    '''
}

1

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

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.