Ich verwende Jenkins Declarative Pipeline, um meinen Erstellungsprozess zu automatisieren. Wir möchten unsere Artefakte nur dann in einem Remote-JFrog-Repository veröffentlichen, wenn bestimmte Bedingungen (Sonar, Checkmarx) erfüllt sind.
Nach einigem Nachforschen habe ich festgestellt, dass das Artifactory-Plugin hierfür nützlich ist. Ich kann jedoch kein Dokument zur Integration in deklarative Pipelines finden. Unten ist das Code-Snippet von 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
}
}
}
}
Das bedingte Veröffentlichen ist mit dem obigen Code nicht möglich, da ich die Servervariable nicht wiederverwenden kann , auch wenn ich das automatische Veröffentlichen deaktiviere.
quelle
Ich denke, Ihr Problem liegt darin begründet, dass die Servervariable außerhalb des Pre-Build-Stage-Blocks nicht wiederverwendbar ist.
In Jenkins Deklarativ können Sie Variablen wie diese mit dem
script { ... }
Block definieren, aber sobald Sie die Bühne verlassen, sind diese Variablen für andere Bühnen nicht mehr zugänglich.Mit den vorherigen Vorschlägen würde ich Folgendes empfehlen:
Platzieren Sie den artifactory-Bereitstellungscode in einer freigegebenen Bibliothek.
Dann behalten Sie Ihre deklarativen Pipelines
D.R.Y
refs:
https://jenkins.io/doc/book/pipeline/syntax/#when
https://jenkins.io/doc/book/pipeline/shared-libraries/
quelle
Wenn Sie Logik in die Jenkins-Datei einbetten möchten, ist die deklarative Syntax möglicherweise nicht die beste Methode, da es nicht immer einfach ist, sie im Code wiederzugeben.
Wenn Sie zur Skript-Pipeline Jenkinsfile wechseln, können Sie Bedingungen auf einfachere Weise definieren und verwenden.
quelle