Używam deklaratywnego potoku Jenkins do automatyzacji procesu kompilacji. Chcemy opublikować nasze artefakty w zdalnym repozytorium JFrog tylko wtedy, gdy spełnione zostaną określone warunki (Sonar, Checkmarx).
Po kilku badaniach odkryłem, że wtyczka Artifactory jest do tego przydatna. Ale nie jestem w stanie znaleźć żadnego dokumentu na temat sposobu integracji z deklaratywnym potokiem. Poniżej znajduje się fragment kodu z 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
}
}
}
}
Publikowanie warunkowe nie jest możliwe z powyższym kodem, ponieważ nie mogę ponownie użyć zmiennej serwera , nawet jeśli wyłączę automatyczne publikowanie.
źródło
Myślę, że twój problem jest zakorzeniony w zmiennej serwera , która nie nadaje się do ponownego użycia poza blokiem etapu przed kompilacją.
W deklaratywnej Jenkinsie można definiować takie zmienne za pomocą
script { ... }
bloku, ale kiedy opuścisz scenę, te zmienne są niedostępne dla innych etapów.Z poprzednimi sugestiami poleciłbym to:
Umieść sztuczny kod wdrażania w bibliotece współużytkowanej.
Następnie, aby zachować deklaratywne potoki
D.R.Y
referencje:
https://jenkins.io/doc/book/pipeline/syntax/#when
https://jenkins.io/doc/book/pipeline/shared-libraries/
źródło
Jeśli chcesz osadzić logikę w pliku Jenkinsa, deklaratywna składnia może nie być najlepszą metodą, ponieważ nie zawsze jest to łatwe do odzwierciedlenia w kodzie.
Jeśli przełączysz się na potok skryptowy Jenkinsfile, będziesz w stanie łatwiej definiować i używać warunków.
źródło