Abaixo está o requisito necessário para alcançar o uso do Jenkins Pipeline e eu sou uma nova abelha no Jenkins Pipeline.
- Após concluir o trabalho de desenvolvimento e enviar suas alterações ao Bitbucket, o usuário cria uma solicitação de recebimento.
- Para aprovar uma solicitação de recebimento, precisamos de pelo menos uma compilação Jenkins bem-sucedida. Assim, gostaríamos de obter apenas o resultado da compilação do código verificado para a solicitação de recebimento.
- Quando uma solicitação de recebimento é criada / atualizada, o Jenkins deve ser acionado automaticamente para uma integração contínua real.
- O resultado da compilação deve ser reportado ao Bitbucket.
Utilizou o Stash Pull Request Builder e o stash Notifier para o processo acima, que está funcionando no Normal Freestyle Project.
Precisamos migrar a funcionalidade semelhante usando o pipeline Jenkins. Portanto, criamos o trabalho de jenkins como abaixo.
O script de pipeline para verificar a ramificação do PR e a criação do gatilho é como abaixo
node {
stage('Checkout') {
checkout(
[
$class: 'GitSCM',
extensions: [
[$class: 'CleanCheckout'],
],
branches: [
[name: '']
],
userRemoteConfigs:
[[
credentialsId: 'id',
url: 'repourl.git'
refspec: ('+refs/pull-requests/*/from:refs/remotes/origin/pr/*/from'),
branch: ('origin/pr/${pullRequestId}/from')
]]
])
}
stage('Build') {
sh 'make'
}
stage('notify') {
step([$class: 'StashNotifier'])
try {
// Do stuff
currentBuild.result = 'SUCCESS'
} catch(err) {
currentBuild.result = 'FAILED'
}
step([$class: 'StashNotifier'])
}
}
Embora eu tenha feito a configuração acima ao criar / atualizar o PR, a compilação não é acionada automaticamente no jenkins. Eu acho que a notificação do stash para o jenkins não aconteceu porque especificamos "origin/${pullRequestId}/from"
no projeto de estilo livre. Mas não tenho essa opção para especificar no trabalho de pipeline.
Tentei algumas alternativas como abaixo.
Em vez do stash Pull Request Builder, tentei apenas o projeto "Poll SCM" e especifiquei o trabalho cron para disparar como "H/2 * * * *"
. Após a confirmação, o trabalho é acionado em jenkins. Isso significa que, para cada commit, o trabalho de jenkins é acionado. Mas Jenkins deve acionar o trabalho quando o PR for criado / atualizado.
Estou sentindo falta de algo aqui certamente que poderia ser básico e novo no pipeline de jenkins.
Alguma dica para alcançar o comportamento desejado?
Respostas:
No script groovy, você precisa referenciar variáveis de ambiente de uma maneira diferente da do bash.
Portanto, provavelmente esta linha está causando problemas:
Tente usar:
fonte
Para expandir a resposta acima, tente usar:
Porque no groovy, a interpolação de strings não é feita para strings simples - ou seja, strings entre aspas simples. Veja http://groovy-lang.org/syntax.html#_string_interpolation para obter detalhes sobre isso.
fonte
Foi o mesmo problema: para alcançar o resultado desejado, criei dois trabalhos: PR Trigger (Projeto Freestyle) e PR Builder (Pipeline).
Para o PR Trigger, adicionei o plug-in Git, o Stash Pull Request Builder Plugin (a mesma configuração não funcionou para o pipeline) e o Parameterized Trigger Plugin (para passar o ID da solicitação pull ao pipeline do PR Builder; Project to Build - PR Builder).
Para o PR Builder, adicionei o plug-in Parameterized Builds.
fonte