1
resposta

[Dúvida] Disparar a pipeline no Jenkins somente quando fizer merge em "develop"

Galera, hoje a pipeline está disparando quando é feito merge em qualquer branch. Estou usando generic webhook e chamando pelo bitbucket.

quero adicionaro conceito de GitFlow para a pipeline.

Essa é a pipeline.

pipeline {
agent any

stages {
    stage('Checkout') {
        steps {
            // Este step fará o checkout do código fonte do repositório configurado no Jenkins
            git branch: 'develop', url: "ssh://git@servidor.domain.ad:7999/ap/repositorio.git"
        }
    }
    stage('Build') {
        steps {
            // Este step irá executar o MSBuild para compilar a aplicação ExtractorTools.sln
            bat '"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\MSBuild\\Current\\Bin\\MSBuild.exe" ExtractorTools.sln /p:Configuration=Debug'
        }
    }
    stage('Backup xx') {
        //Este step cria um backup da pasta "binFolder" e copia seu conteúdo para uma nova pasta com um nome que inclui a data e hora do backup.
        steps {
            bat '''
                @echo off
                setlocal

                set binFolder={caminho}
                for /f "usebackq tokens=1-4 delims=/ " %%a in (`echo %date%`) do set currentDate=%%c-%%b-%%a
                for /f "usebackq tokens=1-2 delims=: " %%a in (`echo %time%`) do set currentTime=%%a-%%b
                set backupFolder=%binFolder%-bkp_%currentDate%-%currentTime%
                xcopy /E /I %binFolder% %backupFolder%

                echo Backup criado em %backupFolder%
            '''
        }
    }
    stage('Backup xx') {
        //Este step cria um backup da pasta "binFolder" e copia seu conteúdo para uma nova pasta com um nome que inclui a data e hora do backup.
        steps {
            bat '''
                @echo off
                setlocal

                set binFolder={caminho}
                for /f "usebackq tokens=1-4 delims=/ " %%a in (`echo %date%`) do set currentDate=%%c-%%b-%%a
                for /f "usebackq tokens=1-2 delims=: " %%a in (`echo %time%`) do set currentTime=%%a-%%b
                set backupFolder=%binFolder%-bkp_%currentDate%-%currentTime%
                xcopy /E /I %binFolder% %backupFolder%

                echo Backup criado em %backupFolder%
            '''
        }
    }
    stage('Removing "bin"') {
        steps {
            // Este step fará o a remoção da basta bin
            bat 'RMDIR /S /Q {caminho}'
            bat 'RMDIR /S /Q {caminho}'
        }
    }

    stage('Deploy') {
        steps {
            // Este step fará o deploy da aplicação copiando os arquivos da pasta de saída da compilação para o servidor de deploy
            bat 'xcopy {caminho} {caminho} /i /y /e'
            bat 'xcopy {caminho} {caminho} /i /y /e'
        }
    }
}
// ----- POST ACTIONS ----- //
post {
    // -- SEÇÃO ALWAYS --> toda action definida nesta section sempre será executada
    always {
        emailext body: "Execucao do job '${env.JOB_NAME}' concluido > ${env.BUILD_URL}", subject: "[Jenkins] Job: ${env.JOB_NAME} | Build: #${env.BUILD_NUMBER} | Build Status: ${currentBuild.result}", to: 'xxx@xxx.com', from: 'jenkins@xx.com', attachLog: true, compressLog: true
    }
    // -- SEÇÃO success --> executa somente em caso de SUCESSO da pipeline
    success {
        echo "Build do job '${env.JOB_NAME}' concluido com sucesso!"
        emailext body: "Execucao do job '${env.JOB_NAME}' concluido com sucesso! > ${env.BUILD_URL}", subject: "[Jenkins] Job: ${env.JOB_NAME} | Build: #${env.BUILD_NUMBER} | Build Status: ${currentBuild.result}", to: 'xxx@xxx.com', from: 'jenkins@xxx.com', attachLog: true, compressLog: true
    }
    // -- SEÇÃO FAILURE --> executa somente em caso de FALHA da pipeline
    failure {
        script {
            echo "Build do job '${env.JOB_NAME}' concluido com falhas"
            emailext body: "Execucao do job '${env.JOB_NAME}' concluido com falhas > ${env.BUILD_URL}", subject: "[Jenkins] Job: ${env.JOB_NAME} | Build: #${env.BUILD_NUMBER} | Build Status: ${currentBuild.result}", to: 'xxx@xxx.com', from: 'jenkins@xx.com', attachLog: true, compressLog: true
        }
    }
}
1 resposta

Olá, Caio

Para isso, você pode usar a funcionalidade de gatilhos do Jenkins.

Você pode configurar o Jenkins para disparar uma build apenas quando um push é feito para a branch 'develop'. Para fazer isso, você precisa ir até as configurações do seu job no Jenkins e procurar a seção 'Build Triggers'. Nessa seção, você deve selecionar a opção 'GitHub hook trigger for GITScm polling'.

Depois disso, você precisa ir até as configurações do seu repositório no Bitbucket e adicionar um webhook para o Jenkins. O webhook deve apontar para a URL do Jenkins com '/github-webhook/' no final. Por exemplo, se o endereço do seu Jenkins for 'http://jenkins.example.com', o webhook deve apontar para 'http://jenkins.example.com/github-webhook/'.

No campo 'Branches to build', você deve inserir 'develop'. Isso fará com que o Jenkins dispare uma build apenas quando um push é feito para a branch 'develop'.

Por fim, na sua pipeline, você deve mudar o comando 'git' para fazer o checkout da branch 'develop'. O comando deve ficar assim:

git branch: 'develop', url: "ssh://git@servidor.domain.ad:7999/ap/repositorio.git"

Espero que isso resolva o seu problema! Lembre-se de testar essa configuração em um ambiente controlado antes de aplicá-la em produção, pois cada ambiente pode ter suas peculiaridades.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software