Jenkins Pipeline e stash Pull Request Builder não está funcionando na criação / atualização de PR

7

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.

insira a descrição da imagem aqui

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?

user1876040
fonte
editou a pergunta com base em descobertas
user1876040
Primeiro, coisas básicas: você colocou na lista branca os IPs do Bitbucket? Além disso, você pode verificar os webhooks do bitbucket e nos informar se eles estão funcionando conforme o esperado.
Munai Das Udasin
Olá, @Munai Das Udasin, Obrigado pela resposta. Abaixo estão minhas observações. Enquanto trabalhamos em rede interna, o bitbucket ips é um dos IPs da lista de permissões. Então isso não é um problema. Além disso, nossa análise nos Webhooks apresenta menos inconvenientes a) Quando o PR é atualizado, o trabalho não é acionado no jenkins b) O trabalho é acionado quando o PR é recusado, pois não queremos conforme o caso de uso.
user1876040

Respostas:

2

No script groovy, você precisa referenciar variáveis ​​de ambiente de uma maneira diferente da do bash.

Portanto, provavelmente esta linha está causando problemas:

branch: ('origin/pr/${pullRequestId}/from')

Tente usar:

branch: ('origin/pr/' + env.pullRequestId + '/from')
jgebal
fonte
2

Para expandir a resposta acima, tente usar:

branch: "origin/pr/${pullRequestId}/from"

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.

Lars Immisch
fonte
Para sua informação, não há resposta acima, os sites do StackExchange não são fóruns e a ordem da resposta nem sempre é o tempo. Ao fazer referência a outra resposta, vincular a ela ou pode ser difícil saber a qual resposta você está se referindo posteriormente.
Tensibai
0

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).

insira a descrição da imagem aqui

Para o PR Builder, adicionei o plug-in Parameterized Builds.

insira a descrição da imagem aqui

MariaMironets
fonte