ชำระเงิน Jenkins Pipeline Git SCM พร้อมข้อมูลประจำตัวหรือไม่


108

ฉันทำตามบทช่วยสอนนี้ :

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

อย่างไรก็ตามไม่ได้บอกวิธีเพิ่มข้อมูลรับรอง Jenkins มีส่วน "ข้อมูลรับรอง" เฉพาะที่คุณกำหนด user user & pass จากนั้นรับ ID เพื่อใช้ในงาน แต่จะใช้ใน Pipeline อย่างไร?

ฉันลองใช้:

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-keys ให้กับไฟล์. ssh / authority_keys ของผู้ใช้ Linux ของ Jenkin

ในโลกอุดมคติฉันต้องการมีที่เก็บสำหรับงานไปป์ไลน์และคีย์ที่เก็บข้อมูลจากนั้นเปิด Docker Jenkins จากนั้นเพิ่มงานและคีย์เหล่านี้แบบไดนามิกที่นั่นโดยไม่ต้องกำหนดค่าอะไรใน Jenkins Console

คำตอบ:


167

คุณสามารถใช้สิ่งต่อไปนี้ในไปป์ไลน์:

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

หากคุณใช้ ssh url ข้อมูลประจำตัวของคุณจะต้องเป็นชื่อผู้ใช้ + คีย์ส่วนตัว หากคุณใช้ https โคลน url แทน ssh ข้อมูลประจำตัวของคุณควรเป็นชื่อผู้ใช้ + รหัสผ่าน


1
ที่แก้ไขมันขอบคุณ ฉันไม่ทราบว่า SSH-url และ HTTPS-url ต้องการข้อมูลรับรองที่แตกต่างกันในการใช้งาน!
Render

3
มันมีประโยชน์ แต่credentialsIdมาจาก id ใน/var/lib/jenkins/credentials.xmlเนื่องจากฉันต้องดิ้นรนเพื่อหามันออกมา
Prayagupd

18
@prayagupd คุณควรจะได้รับรหัสข้อมูลรับรองจากหน้าข้อมูลรับรอง ( http://yourjenkinsinstall/credentials) ไม่จำเป็นต้องลากไฟล์ config
Serban Constantin

4
สำหรับผู้ที่ถามว่า "How to Generate a credentialsId". วิธีการค้นหา [1. คลิกที่ข้อมูลประจำตัวในหน้าแรกของ Jenkins 2 จากนั้นคุณจะเห็นตารางที่มีข้อมูลประจำตัวทั้งหมดที่คุณสร้างขึ้น 3. ID อยู่ในตารางนี้]
vincedjango

1
สำหรับฉันมันไม่สามารถแก้ไข URL ssh://เมื่อฉันจะตั้งค่าเริ่มต้นด้วย ถอดมันออกแก้ไข
Moshisho

32

หากต้องการชำระเงินอย่างชัดเจนโดยใช้ข้อมูลรับรองเฉพาะ

    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 Job ปัจจุบัน

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

คุณสามารถใช้ทั้งสองขั้นตอนภายในไฟล์ Jenkins ไฟล์เดียว


2
จะสร้างรหัสประจำตัวนี้ได้อย่างไร
undefined


ฉันควรเก็บไฟล์ข้อมูลรับรองไว้ที่ไหน jenkins sais: คำเตือน: ไม่พบ CredentialId "jenkins_key"
Dinu Nicolae

ข้อมูลรับรอง @Dinu ถูกสร้างขึ้นในเจนกินส์คุณควรเห็นในเมนูหลักหากติดตั้งปลั๊กอิน 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
จะสร้างรหัสประจำตัวนี้ได้อย่างไร
undefined

ฉันสร้างข้อมูลประจำตัวดังนี้help.github.com/en/articles/…ฉันเพิ่มคีย์สาธารณะในคอมไพล์ของฉัน แต่ฉันต้องเก็บไฟล์นี้ไว้ที่ไหน Jenkins กล่าวว่า: คำเตือน: ไม่พบ CredentialId "jenkins_key"
Dinu Nicolae

@DinuNicolae โปรดดูAdding new global credentials -> 7.ที่ลิงค์ต่อไปนี้ jenkins.io/doc/book/using/using-credentials
f-society

16

การเพิ่มตัวอย่างสั้น ๆ ให้คุณโดยใช้ปลั๊กอิน 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

คุณสามารถจัดการกลไกของคุณที่เกี่ยวข้องกับตรรกะของคุณเองในทีม dev ของคุณและใช้คีย์ข้อมูลรับรองที่แตกต่างกันสำหรับแต่ละกลุ่ม ตัวอย่างเช่นหากผู้ใช้ Github อยู่ในรายชื่อ "backend_developers" ให้ใช้ <gitCredentialsGroupA> หากผู้ใช้ Github ในรายการ 'frontend_developers' ใช้ <gitCredentialsGroupB> ให้ออกแบบกลไกของคุณที่เกี่ยวข้องกับกรณีการใช้งานของคุณเอง
avivamg

คุณจะเก็บข้อมูลรับรองเหล่านี้ไว้ที่ไหน มันมีปลั๊กอิน Jenkins Credentials หรือไม่?
henhen

ใช้เอกสารข้อมูลประจำตัวของ Jenkins - jenkins.io/doc/book/using/using-credentials
avivamg

1
ฉันได้ค้นหาcheckoutตัวอย่างง่ายๆเช่นนี้แล้วขอบคุณมาก
301_Moved_ ถาวร

1

สิ่งที่ควรค่าแก่การเพิ่มในการอภิปราย ... สิ่งที่ฉันทำนั้นช่วยฉันได้ ... เนื่องจากไปป์ไลน์ทำงานภายในพื้นที่ทำงานภายในอิมเมจนักเทียบท่าที่ล้างข้อมูลทุกครั้งที่ทำงาน ฉันคว้าข้อมูลประจำตัวที่จำเป็นในการดำเนินการที่จำเป็นบน repo ภายในไปป์ไลน์ของฉันและเก็บไว้ในไฟล์. 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}']]
            ])
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.