Bagaimana saya bisa memicu pembangunan pekerjaan lain dari dalam Jenkinsfile
?
Saya berasumsi bahwa pekerjaan ini adalah repositori lain di bawah organisasi github yang sama , yang sudah memiliki file Jenkins sendiri.
Saya juga ingin melakukan ini hanya jika nama cabang adalah master, karena tidak masuk akal untuk memicu build hilir dari cabang lokal mana pun.
Memperbarui:
stage 'test-downstream'
node {
def job = build job: 'some-downtream-job-name'
}
Tetap saja, saat dijalankan saya mendapatkan error
Tidak ditemukan pekerjaan berparameter bernama some-downtream-job-name
Saya yakin bahwa pekerjaan ini ada di jenkins dan berada di bawah folder organisasi yang sama dengan yang sekarang. Ini adalah pekerjaan lain yang memiliki pekerjaannya sendiri Jenkinsfile
.
Harap diperhatikan bahwa pertanyaan ini khusus untuk GitHub Organization Plugin yang secara otomatis membuat dan memelihara pekerjaan untuk setiap repositori dan cabang dari Organisasi GitHub Anda.
build job: '../other-repo/master', wait: false
build job: '../other-repo/$BRANCH_NAME'
mana$BRANCH_NAME
variabel lingkungan Jenkins yang berkaitan dengan cabang yang menjalankan proyek Multibranch?${BRANCH_NAME}
tersedia sebagai variabel lingkungan, substitusi string sederhana akan dilakukan. Pastikan untuk beralih ke"
dari'
untuk mengutip string Anda. misalnyabuild job: "../other-repo/${BRANCH_NAME}"
build job
: jenkins.io/doc/pipeline/steps/pipeline-build-stepSelain jawaban yang disebutkan di atas: Saya ingin memulai pekerjaan dengan parameter sederhana yang diteruskan ke pipeline kedua dan menemukan jawabannya di http://web.archive.org/web/20160209062101/https://dzone.com/ refcardz / continuous-delivery-with-jenkins-workflow
Jadi saya menggunakan:
stage ('Starting ART job') { build job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]] }
sumber
build
perintah dikembalikan? Bagaimana cara mengakses BUILD_NUMBER dalam salah satu tahapan berikut? Ada yang tahu di mana perintah itu didokumentasikan?build job: 'freestyle', parameters: [ string(name: 'param1', value:'test_param'), string(name:'dummy', value: "${index}")]
, dari jenkins.io/doc/pipeline/examples/#jobs-in-parallelbuild job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]]
tidak berhasil bagi saya tetapi:build job: 'RunArtInTest', parameters: [string(name: 'systemname', value: "${VALUE}")]
bekerjaPerintah
build
di pipeline ada untuk memicu pekerjaan lain di jenkins.Contoh di github
Pekerjaan harus ada di Jenkins dan dapat diukur. Adapun cabangnya, saya rasa Anda bisa membacanya dari git
sumber
build job: 'jobname
tetapi saya mendapatkan kesalahan iniNo parameterized job named jobname found
dan saya dapat meyakinkan Anda bahwa ada pekerjaan dengan nama ini di tingkat yang sama di folder organisasi.build job: "${ORGANISATION_NAME}/${REPO_NAME}/master"
/
. Jalur relatif baik-baik saja; Masalah sorin mungkin bahwa panggilan pekerjaanbuild
adalah pekerjaan multibranch, yang berarti jalan sepertijobname
akan mencoba membangun cabangjobname
dari pekerjaan yang sama; itu harus menjadi../jobname/branchname
gantinyaAnda dapat menggunakan
build job
langkah dari Jenkins Pipeline (Persyaratan Jenkins minimum: 2.130).Berikut API lengkap untuk
build
langkahnya: https://jenkins.io/doc/pipeline/steps/pipeline-build-step/Bagaimana cara menggunakan
build
:job
: Nama tugas downstream yang akan dibuat. Mungkin pekerjaan Pipeline lain, tetapi lebih umum gaya bebas atau proyek lain.../sister-folder/downstream
/top-level-folder/nested-folder/downstream
Picu pekerjaan lain menggunakan cabang sebagai param
Di perusahaan saya, banyak cabang kami menyertakan "/". Anda harus mengganti setiap "/" dengan "% 2F" (seperti yang muncul di URL pekerjaan).
Dalam contoh ini kami menggunakan jalur relatif
stage('Trigger Branch Build') { steps { script { echo "Triggering job for branch ${env.BRANCH_NAME}" BRANCH_TO_TAG=env.BRANCH_NAME.replace("/","%2F") build job: "../my-relative-job/${BRANCH_TO_TAG}", wait: false } } }
Picu pekerjaan lain menggunakan nomor build sebagai parameter
build job: 'your-job-name', parameters: [ string(name: 'passed_build_number_param', value: String.valueOf(BUILD_NUMBER)), string(name: 'complex_param', value: 'prefix-' + String.valueOf(BUILD_NUMBER)) ]
Memicu banyak pekerjaan secara paralel
Sumber: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/
Info lebih lanjut tentang Paralel di sini: https://jenkins.io/doc/book/pipeline/syntax/#parallel
stage ('Trigger Builds In Parallel') { steps { // Freestyle build trigger calls a list of jobs // Pipeline build() step only calls one job // To run all three jobs in parallel, we use "parallel" step // https://jenkins.io/doc/pipeline/examples/#jobs-in-parallel parallel ( linux: { build job: 'full-build-linux', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)] }, mac: { build job: 'full-build-mac', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)] }, windows: { build job: 'full-build-windows', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)] }, failFast: false) } }
Atau sebagai alternatif:
stage('Build A and B') { failFast true parallel { stage('Build A') { steps { build job: "/project/A/${env.BRANCH}", wait: true } } stage('Build B') { steps { build job: "/project/B/${env.BRANCH}", wait: true } } } }
sumber
Gunakan plugin pekerjaan build untuk tugas itu untuk memicu pekerjaan lain dari file jenkins. Anda dapat menambahkan berbagai logika ke eksekusi Anda seperti opsi paralel, node dan agen, serta langkah-langkah untuk memicu pekerjaan eksternal. Saya memberikan beberapa contoh buku masak yang mudah dibaca untuk itu.
1. contoh untuk memicu pekerjaan eksternal dari file jenkins dengan contoh bersyarat:
if (env.BRANCH_NAME == 'master') { build job:'exactJobName' , parameters:[ string(name: 'keyNameOfParam1',value: 'valueOfParam1') booleanParam(name: 'keyNameOfParam2',value:'valueOfParam2') ] }
2. contoh memicu banyak pekerjaan dari file jenkins dengan contoh kondisional:
def jobs =[ 'job1Title'{ if (env.BRANCH_NAME == 'master') { build job:'exactJobName' , parameters:[ string(name: 'keyNameOfParam1',value: 'valueNameOfParam1') booleanParam(name: 'keyNameOfParam2',value:'valueNameOfParam2') ] } }, 'job2Title'{ if (env.GIT_COMMIT == 'someCommitHashToPerformAdditionalTest') { build job:'exactJobName' , parameters:[ string(name: 'keyNameOfParam3',value: 'valueOfParam3') booleanParam(name: 'keyNameOfParam4',value:'valueNameOfParam4') booleanParam(name: 'keyNameOfParam5',value:'valueNameOfParam5') ] } }
sumber