Estou usando o pipeline declarativo Jenkins para automatizar meu processo de criação. Queremos publicar nossos artefatos em um repositório JFrog remoto apenas se determinadas condições (Sonar, Checkmarx) forem aprovadas.
Depois de um pouco de pesquisa, descobri que o plugin Artifactory é útil para isso. Mas não consigo encontrar nenhum documento sobre como integrar no pipeline declarativo. Abaixo está o trecho de código de 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
}
}
}
}
A publicação condicional não é possível com o código acima, pois não posso reutilizar a variável do servidor , mesmo que eu desabilite a publicação automática.
fonte
Penso que o seu problema está enraizado na variável do servidor que não é reutilizável fora do bloco do estágio de pré-construção.
No declarativo de Jenkins, você pode definir variáveis como essa usando o
script { ... }
bloco, mas depois de sair do estágio, essas variáveis ficam inacessíveis a outras para os estágios.Com as sugestões anteriores, eu recomendaria o seguinte:
Abrigue o código de implantação artefato em uma biblioteca compartilhada.
Então, mantenha seus pipelines declarativos
D.R.Y
refs:
https://jenkins.io/doc/book/pipeline/syntax/#when
https://jenkins.io/doc/book/pipeline/shared-libraries/
fonte
Se você deseja incorporar lógica no arquivo Jenkins, a sintaxe declarativa pode não ser o melhor método, pois nem sempre é fácil refleti-la no código.
Se você alternar para o pipeline com script Jenkinsfile, poderá definir e usar condições de uma maneira mais fácil.
fonte