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: 'git@bitbucket.org: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.

Jawaban:


162

Anda dapat menggunakan berikut ini di pipeline:

git branch: 'master',
    credentialsId: '12345-1234-4696-af25-123455',
    url: 'ssh://git@bitbucket.org: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.


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://git@test.com/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.


2
bagaimana cara menghasilkan credentialsId ini?
tidak ditentukan


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: 'git@github.com<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}"
    )

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

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

1

Ini diselesaikan untuk saya gunakan

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.