Saya menggunakan Jenkins Declarative Pipeline untuk mengotomatiskan proses pembuatan saya. Kami ingin menerbitkan artefak kami ke repositori JFrog jarak jauh hanya jika kondisi tertentu (Sonar, Checkmarx) lulus.
Setelah sedikit riset, saya menemukan bahwa plugin Artifactory berguna untuk ini. Tetapi saya tidak dapat menemukan dokumen tentang bagaimana mengintegrasikan dalam pipa deklaratif. Di bawah ini adalah cuplikan kode dari Jenkinsfile
stages{
stage('Pre-Build'){
steps{
script{
def server = Artifactory.server 'LocalJfrog'
def rtGradle = Artifactory.newGradleBuild()
rtGradle.resolver server: server, repo: 'gradle-dev-local'
rtGradle.deployer server: server, repo: 'gradle-release-local'
rtGradle.useWrapper = true
}
}
}
}
Publikasi bersyarat tidak dimungkinkan dengan kode di atas karena saya tidak dapat menggunakan kembali variabel server walaupun saya menonaktifkan publikasi otomatis.
sumber
Saya pikir masalah Anda berakar pada variabel server yang tidak dapat digunakan kembali di luar blok tahap pra-bangun.
Dalam Jenkins deklaratif, Anda bisa mendefinisikan variabel seperti itu menggunakan
script { ... }
blok, tetapi begitu Anda meninggalkan tahap, variabel-variabel itu tidak dapat diakses ke tahap lainnya.Dengan saran sebelumnya, saya akan merekomendasikan ini:
Tempatkan kode penyebaran artifactory ke perpustakaan bersama.
Kemudian untuk menjaga pipa deklaratif Anda
D.R.Y
referensi:
https://jenkins.io/doc/book/pipeline/syntax/#when
https://jenkins.io/doc/book/pipeline/share-libraries/
sumber
Jika Anda ingin menanamkan logika dalam Jenkinsfile, sintaksis deklaratif mungkin bukan metode terbaik karena tidak selalu mudah untuk mencerminkannya dalam kode.
Jika Anda beralih ke pipa skrip Jenkinsfile, Anda akan dapat mendefinisikan dan menggunakan kondisi dengan cara yang lebih mudah.
sumber