Bitbucket webhook и Дженкинс, показывающие результаты сборки

#unit-testing #jenkins #bitbucket #webhooks

Вопрос:

Можно ли использовать Bitbucket webhooks с Дженкинсом и показывать результаты сборки на Bitbucket?

Кто — нибудь достиг этой комбинации? При использовании webhooks на Bitbucket, как вы показываете результаты сборки от Дженкинса?

Комментарии:

1. вы пробовали, что есть у Дженкинса в их документации ?

2. @balexandre показывает ли этот плагин результаты сборки на bitbucket?

Ответ №1:

В конце концов, я использовал REST API Bitbucket, чтобы показать статус сборки на Дженкинсе, это был самый простой и гибкий способ:

https://developer.atlassian.com/server/bitbucket/how-tos/updating-build-status-for-commits/

Я использовал универсальный триггер веб-крючка Дженкинса, чтобы получить полезную нагрузку от открытого PR, такого как commitId: https://plugins.jenkins.io/generic-webhook-trigger/

 
def notifyBitBucket(commitId, state) {
  withCredentials([string(credentialsId: ‘[your-bitbucket-user-token], variable: 'TOKEN')]) {
    try {
      sh """
          curl --location --request POST “[your-bitbucket-repo]/rest/build-status/1.0/commits/${commitId}" 
          --header "Content-Type: application/json" 
          --header "Authorization: Bearer ${TOKEN}" 
          --data-raw '{
            "state": "${state}",
            "key": "pipeline-webhook",
            "name": "pipeline-webhook",
            "url": "${BUILD_URL}/console#footer",
            "description": “[something describing your build]”
          }'
        """
    } catch(e) {
      echo 'Notify failed, trying again... error: '   ex.toString()
      notifyBitBucket(commitId, state)
    }
  }
}

node {
  try {
    stage('Build') {
      notifyBitBucket(commitId, "INPROGRESS");

      ... your logic

      notifyBitBucket(commitId, "SUCCESSFUL");
  } catch(ex) {
      echo 'Build failed with error: '   ex.toString()
      notifyBitBucket(commitId, "FAILED");
      currentBuild.result = 'FAILED'
  }
}
 

Я добавил try catch, потому что иногда API выходил из строя.