I'm mencoba untuk mengubah saya gaya lama proyek dasar alur kerja untuk pipa berdasarkan Jenkins. Sementara akan melalui docs saya menemukan ada dua sintaks yang berbeda bernama ditulis
dan deklaratif
. Seperti Jenkins web deklaratif
sintaks rilis baru-baru ini (akhir tahun 2016). Meskipun ada sintaks baru rilis Jenkins masih mendukung scripted sintaks juga.
Sekarang, aku'm tidak yakin di mana situasi masing-masing dari kedua jenis ini akan menjadi pertandingan terbaik. ditulis
sintaks akan menjadi usang segera? Jadi akan deklaratif
menjadi masa depan Jenkins pipa?
Siapa saja yang dapat berbagi beberapa pemikiran tentang dua sintaks jenis.
Ketika Jenkins Pipa pertama kali dibuat, Groovy terpilih sebagai yayasan. Jenkins telah lama dikirim dengan aplikasi yang tertanam Groovy mesin untuk menyediakan teknologi scripting kemampuan untuk admin dan pengguna sama. Selain itu, pelaksana dari Jenkins Pipa ditemukan Groovy menjadi dasar yang kuat untuk membangun apa yang sekarang disebut sebagai "Scripted Pipa" DSL.
Karena itu adalah sepenuhnya fitur pemrograman lingkungan, Scripted Pipa menawarkan sejumlah besar fleksibilitas dan ekstensibilitas untuk Jenkins pengguna. Groovy learning-curve tidak biasanya diinginkan untuk semua anggota dari suatu tim, sehingga Deklaratif Pipa diciptakan untuk menawarkan lebih sederhana dan lebih berpendirian sintaks untuk authoring Jenkins Pipa.
kedua, keduanya pada dasarnya sama Pipa sub-sistem di bawahnya. Mereka berdua tahan lama implementasi "Pipa sebagai kode." Mereka berdua dapat menggunakan langkah-langkah yang dibangun ke dalam Pipa atau disediakan oleh plugin. Keduanya mampu memanfaatkan Ruang Perpustakaan
di Mana mereka berbeda namun dalam sintaks dan fleksibilitas. Deklaratif batas-batas apa yang tersedia untuk pengguna dengan lebih ketat dan pra-didefinisikan struktur, menjadikannya pilihan ideal untuk sederhana terus-menerus pengiriman pipa. Scripted memberikan beberapa batas, sejauh bahwa hanya membatasi pada struktur dan sintaks cenderung didefinisikan oleh Groovy itu sendiri, bukan dari Pipa-sistem tertentu, menjadikannya pilihan ideal untuk pengguna dan orang-orang dengan persyaratan yang lebih kompleks. Seperti namanya, Deklaratif Pipa mendorong deklaratif model pemrograman. Sedangkan Scripted Pipa mengikuti lebih penting model pemrograman.
Disalin dari https://jenkins.io/doc/book/pipeline/syntax/#compare
Hal lain untuk mempertimbangkan adalah deklaratif pipa memiliki script() langkah. Ini dapat menjalankan scripted pipa. Jadi rekomendasi saya akan menggunakan deklaratif pipa, dan jika diperlukan menggunakan skrip ' ()
untuk scripted pipa. Oleh karena itu anda mendapatkan yang terbaik dari kedua dunia.
Saya membuat beralih ke deklaratif baru-baru ini dari scripted dengan kubernetes agen. Sampai dengan akhir juli '18 deklaratif pipa didn't memiliki kemampuan penuh untuk menentukan kubernetes polong. Namun dengan penambahan yamlFile
langkah anda sekarang dapat membaca pod template dari sebuah file yaml dalam repo.
Hal ini kemudian memungkinkan anda menggunakan misalnya vscode's besar kubernetes plugin untuk memvalidasi pod template, kemudian membaca ke Jenkinsfile dan menggunakan wadah dalam langkah-langkah sebagai anda silahkan.
pipeline {
agent {
kubernetes {
label 'jenkins-pod'
yamlFile 'jenkinsPodTemplate.yml'
}
}
stages {
stage('Checkout code and parse Jenkinsfile.json') {
steps {
container('jnlp'){
script{
inputFile = readFile('Jenkinsfile.json')
config = new groovy.json.JsonSlurperClassic().parseText(inputFile)
containerTag = env.BRANCH_NAME + '-' + env.GIT_COMMIT.substring(0, 7)
println "pipeline config ==> ${config}"
} // script
} // container('jnlp')
} // steps
} // stage
Seperti disebutkan di atas, anda dapat menambahkan script blok. Contoh pod template dengan custom jnlp dan docker.
apiVersion: v1
kind: Pod
metadata:
name: jenkins-pod
spec:
containers:
- name: jnlp
image: jenkins/jnlp-slave:3.23-1
imagePullPolicy: IfNotPresent
tty: true
- name: rsync
image: mrsixw/concourse-rsync-resource
imagePullPolicy: IfNotPresent
tty: true
volumeMounts:
- name: nfs
mountPath: /dags
- name: docker
image: docker:17.03
imagePullPolicy: IfNotPresent
command:
- cat
tty: true
volumeMounts:
- name: docker
mountPath: /var/run/docker.sock
volumes:
- name: docker
hostPath:
path: /var/run/docker.sock
- name: nfs
nfs:
server: 10.154.0.3
path: /airflow/dags
deklaratif muncul untuk menjadi yang lebih di masa depan-bukti pilihan dan salah satu yang orang yang merekomendasikan. it's hanya satu Visual Pipa Editor dapat dukungan. mendukung validasi. dan itu berakhir setelah sebagian dari kekuatan scripted karena anda bisa jatuh kembali ke scripted dalam banyak konteks. kadang-kadang ada orang yang datang dengan menggunakan kasus di mana mereka dapat't cukup melakukan apa yang mereka ingin lakukan dengan deklaratif, tapi ini umumnya orang-orang yang telah menggunakan scripted untuk beberapa waktu, dan fitur ini kesenjangan kemungkinan besar dalam waktu dekat.
lebih banyak konteks: https://jenkins.io/blog/2017/02/03/declarative-pipeline-ga/
Jenkins dokumentasi dengan benar menjelaskan dan membandingkan kedua jenis.
Untuk kutipan: "Scripted Pipa menawarkan sejumlah besar fleksibilitas dan ekstensibilitas untuk Jenkins pengguna. Groovy learning-curve tidak biasanya diinginkan untuk semua anggota dari suatu tim, sehingga Deklaratif Pipa diciptakan untuk menawarkan lebih sederhana dan lebih berpendirian sintaks untuk authoring Jenkins Pipa.
Dua keduanya pada dasarnya sama Pipa sub-sistem di bawahnya."
Baca lebih lanjut di sini:https://jenkins.io/doc/buku/pipa/syntax/#membandingkan