Lihat Jenkins Pipeline Git SCM dengan kredensial?

104

Saya mengikuti tutorial ini :

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

Namun itu tidak memberi tahu cara menambahkan kredensial. Jenkins memang memiliki bagian "Kredensial" khusus tempat Anda menentukan pengguna & sandi pengguna, lalu mendapatkan ID untuk itu untuk digunakan dalam pekerjaan, tetapi bagaimana cara menggunakannya dalam petunjuk Pipeline?

Saya mencoba dengan:

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

tidak beruntung:

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.

Apakah ada cara untuk mengonfigurasi kredibilitas dalam pipeline, atau apakah saya harus meletakkan kunci SSH ke file .ssh / authorized_keys pengguna Linux Jenkin?

Idealnya, saya ingin memiliki repositori untuk pekerjaan pipeline dan repo-key, lalu meluncurkan Docker Jenkins, dan secara dinamis menambahkan tugas dan kunci ini di sana tanpa harus mengonfigurasi apa pun di Jenkins Console.

Memberikan
sumber

Jawaban:

162

Anda dapat menggunakan berikut ini di pipeline:

git branch: 'master',
    credentialsId: '12345-1234-4696-af25-123455',
    url: 'ssh://[email protected]:company/repo.git'

Jika Anda menggunakan url ssh maka kredensial Anda haruslah nama pengguna + kunci pribadi. Jika Anda menggunakan url klon https, bukan ssh, maka kredensial Anda harus berupa nama pengguna + kata sandi.

Serban Constantin
sumber
1
Sudah diperbaiki, terima kasih. Saya tidak menyadari bahwa SSH-url dan HTTPS-url memerlukan kredensial yang berbeda untuk digunakan!
Render
3
itu membantu, tetapi credentialsIdberasal dari id /var/lib/jenkins/credentials.xmlkarena saya harus berjuang untuk mengetahuinya.
prayagupd
17
@prayagupd, Anda seharusnya bisa mendapatkan ID kredensial dari halaman kredensial ( http://yourjenkinsinstall/credentials). Tidak perlu menjaring file konfigurasi.
Serban Constantin
4
Bagi yang bertanya "How to Generate a credentialsId". Berikut cara menemukannya. [1. Klik Kredensial di beranda Jenkins, 2. Anda kemudian akan melihat tabel dengan semua kredensial yang Anda buat. 3. ID ada di tabel ini]
vincedjango
1
Bagi saya itu tidak dapat menyelesaikan URL ketika saya mengaturnya untuk memulai ssh://. Menghapusnya, memperbaikinya.
Moshisho
30

Untuk membayar secara eksplisit menggunakan kredensial tertentu

    stage('Checkout external proj') {
        steps {
            git branch: 'my_specific_branch',
                credentialsId: 'my_cred_id',
                url: 'ssh://[email protected]/proj/test_proj.git'

            sh "ls -lat"
        }
    }

Untuk melakukan pembayaran berdasarkan kredensial yang dikonfigurasi di Jenkins Job saat ini

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

Anda dapat menggunakan kedua tahapan dalam satu file Jenkins.

Upul Doluweera
sumber
2
bagaimana cara menghasilkan credentialsId ini?
tidak ditentukan
lihat-lihat - support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera
di mana saya harus menyimpan file kredensial. jenkins sais: Peringatan: CredentialId "jenkins_key" tidak dapat ditemukan.
Dinu Nicolae
Kredensial @Dinu dibuat di Jenkins, Anda akan melihatnya di menu utama jika plugin sudah diinstal. support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera
1
Terima kasih! seseorang yang memposting semuanya dan bukan hanya sedikit di sini dan sedikit di sini, dan berharap orang secara ajaib tahu apa yang harus dimasukkan untuk sisanya.
25

Jika Anda ingin menggunakan kredensial ssh,

  git(
       url: '[email protected]<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )

jika Anda ingin menggunakan nama pengguna dan kredensial kata sandi, Anda perlu menggunakan http clone seperti yang disebutkan @Serban.

    git(
       url: 'https://github.com/<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )
f-masyarakat
sumber
10
bagaimana cara menghasilkan credentialsId ini?
tidak ditentukan
Saya membuat kredensial seperti ini: help.github.com/en/articles/… , saya menambahkan kunci publik ke git saya, tetapi di mana saya harus menyimpan file ini. Jenkins mengatakan: Peringatan: CredentialId "jenkins_key" tidak dapat ditemukan.
Dinu Nicolae
@DinuNicolae silakan lihat Adding new global credentials -> 7.tautan berikut. jenkins.io/doc/book/using/using-credentials
f-society
14

Menambahkan contoh singkat untuk Anda menggunakan git plugin GitSCM :

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

di dalam pipa Anda

stage('checkout'){
    steps{
        script{
            checkout
        }
    }
}
avivamg.dll
sumber
apakah Anda tahu cara menggunakan kredensial global untuk seluruh tim? Atau adakah cara agar pengembang mana pun yang mendorong ke github, mereka dapat memberikan kredensial mereka tanpa harus mengungkapkannya di Jenkinsfile
kemudian
Anda dapat mengelola mekanisme yang terkait dengan logika Anda sendiri di tim pengembang, dan menggunakan kunci kredensial yang berbeda untuk setiap grup. misalnya: Jika pengguna Github ada dalam daftar 'backend_developers' gunakan <gitCredentialsGroupA>, Jika pengguna Github dalam daftar 'frontend_developers' gunakan <gitCredentialsGroupB>, rancang mekanisme Anda yang terkait dengan kasus penggunaan Anda sendiri.
avivamg
di mana Anda akan menyimpan kredensial ini? Apakah dengan plugin Jenkins Credentials?
Kapan
Gunakan dokumentasi kredensial Jenkins - jenkins.io/doc/book/using/using-credentials
avivamg
1
Saya telah mencari jauh dan luas untuk checkoutcontoh sederhana seperti ini, terima kasih.
301_Moved_Permanently
1

Untuk apa itu layak ditambahkan ke diskusi ... apa yang saya lakukan yang akhirnya membantu saya ... Karena pipa dijalankan dalam ruang kerja dalam gambar buruh pelabuhan yang dibersihkan setiap kali dijalankan. Saya mengambil kredensial yang diperlukan untuk melakukan operasi yang diperlukan pada repo dalam pipeline saya dan menyimpannya dalam file .netrc. ini memungkinkan saya untuk berhasil mengotorisasi operasi repo 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
sumber
1

Ini diselesaikan untuk saya gunakan

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Sarang
sumber