Оформити замовлення Jenkins Pipeline Git SCM з обліковими даними?


104

Я дотримувався цього підручника :

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

Однак це не розповідає, як додати облікові дані. У Дженкінса є конкретний розділ "Повноваження", де ви визначаєте користувача і передаєте його, а потім отримуєте ідентифікатор для цього для використання в робочих місцях, але як мені це використовувати в інструкціях конвеєра?

Я намагався:

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 / санкціоновані_ключі користувача Дженкіна?

В ідеальному світі я хотів би мати сховище для конвеєрних завдань і репо-ключів, а потім запустити Docker Jenkins і динамічно додавати ці завдання та ключі туди без необхідності конфігурувати щось у консолі Jenkins.

Відповіді:


161

У конвеєрі можна використовувати наступне:

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 вимагають різних облікових даних для роботи!
Візуалізація

3
це було корисно, але credentialsIdпоходить від id, /var/lib/jenkins/credentials.xmlоскільки мені довелося боротися, щоб це зрозуміти.
prayagupd

17
@prayagupd, ви зможете отримати ідентифікатор облікових даних зі сторінки облікових даних ( http://yourjenkinsinstall/credentials). Не потрібно обробляти конфігураційні файли.
Сербан Константин

4
Для тих, хто запитує "Як створити ідентифікаційний номер". Ось як його знайти. [1. Клацніть на Повноваження на домашній сторінці Дженкінса, 2. Ви побачите таблицю з усіма створеними вами обліковими даними. 3. Ідентифікатор є в цій таблиці]
vincedjango 07

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

Оформити замовлення на основі налаштованих облікових даних у поточній роботі Дженкінса

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

Ви можете використовувати обидва етапи в одному файлі Дженкінса.


2
як згенерувати цю ідентифікаційну інформацію?
undefined


де слід зберігати файл облікових даних. jenkins sais: Попередження: CredentialId "jenkins_key" не вдалося знайти.
Діну Ніколае

Облікові дані @Dinu створюються в Jenkins, ви повинні побачити їх у головному меню, якщо встановлений плагін. support.cloudbees.com/hc/en-us/articles/…
Упул Долувеера

1
спасибі! хтось, хто розмістив цілу річ, а не просто трохи тут і тут, і сподіваючись, що люди магічно знають, що покласти на решту.

25

Якщо ви хочете використовувати облікові дані ssh,

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

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

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

10
як згенерувати цю ідентифікаційну інформацію?
undefined

Я створив такі дані: help.github.com/en/articles/… , я додав відкритий ключ до свого git, але де мені потрібно зберігати цей файл. Дженкінс каже: Попередження: Не вдалося знайти ідентифікатор ідентифікатора "jenkins_key".
Діну Ніколае

@DinuNicolae, будь ласка, зверніться Adding new global credentials -> 7.за таким посиланням. jenkins.io/doc/book/using/using-credentials
f-society

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, вони можуть надати свої облікові дані без необхідності виставляти їх у файлі Jenkins
henhen

Ви можете керувати своїм механізмом, пов’язаним із вашою власною логікою, у своїй команді розробників та використовувати різні ключі облікових даних для кожної групи. наприклад: Якщо користувач Github знаходиться у списку 'backend_developers', використовуйте <gitCredentialsGroupA>, якщо користувач Github у списку 'frontend_developers' використовує <gitCredentialsGroupB>, спроектуйте свій механізм, пов'язаний із вашим власним випадком використання.
avivamg

де б ви зберігали ці документи? Це з плагіном Jenkins Credentials?
henhen

Використовуйте документацію про облікові дані Дженкінса - jenkins.io/doc/book/using/using-credentials
avivamg

1
Я розшукав такий простий checkoutприклад, як цей, дякую.
301_Moved_Постійно

1

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

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.