Как переименовать в GitHub отображаемое имя «проверки состояния» построителя запросов от Jenkins? - PullRequest
0 голосов
/ 28 января 2019

У нас есть проект на GitHub , который имеет два многоотраслевых конвейера Jenkins заданий - одно строит проект, а другое запускает тесты ,Единственное различие между этими двумя конвейерами заключается в том, что у них разные JenkinsFiles .

У меня есть две проблемы, которые, я подозреваю, связаны друг с другом:

  1. ВРаздел проверки состояния GitHub. Я вижу только одну проверку со следующим заголовком: continuous-integration/jenkins/pr-merge — This commit looks good, которая направляет меня к конвейеру Jenkins test .Это означает, что наш build конвейер не обрабатывается GitHub, даже если он виден на Jenkins.Я подозреваю, что это потому, что обе проверки имеют одно и то же имя (например, continuous-integration/jenkins/pr-merge).
  2. Я не смог выяснить, как переименовать сообщение проверки состояния для каждого задания Jenkins (например, test и сборка ).Я прошел через этот подобный вопрос, но его решение не применимо к нам, так как Триггеры сборки недоступны в Многоотраслевых конвейерах

Если кто-нибудь знает, как изменить это сообщение для каждого задания для Jenkins Multichranch Pipelines , это было бы очень полезно.Спасибо!

Редактировать (просто немного больше информации):

Мы настроили веб-заезды GitHub / Jenkins в репозитории, и сборки для обоих наших начинаются.build и test jobs, просто проверка статуса / сообщение не отображаются на GitHub для обоих (кажется, только для test ).Вот наш JenkinsFile для задания build :

#!/usr/bin/env groovy 
properties([[$class: 'BuildConfigProjectProperty', name: '', namespace: '', resourceVersion: '', uid: ''], buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '5')), [$class: 'ScannerJobProperty', doNotScan: false]])
node {
    stage('Initialize') {
        echo 'Initializing...'
        def node = tool name: 'node-lts', type: 'jenkins.plugins.nodejs.tools.NodeJSInstallation'
        env.PATH = "${node}/bin:${env.PATH}"
    }

    stage('Checkout') {
        echo 'Getting out source code...'
        checkout scm
    }

    stage('Install Dependencies') {
        echo 'Retrieving tooling versions...'
        sh 'node --version'
        sh 'npm --version'
        sh 'yarn --version'
        echo 'Installing node dependencies...'
        sh 'yarn install'
    }

    stage('Build') {
        echo 'Running build...'
        sh 'npm run build'
    }

    stage('Build Image and Deploy') {
        echo 'Building and deploying image across pods...'
        echo "This is the build number: ${env.BUILD_NUMBER}"
        // sh './build-openshift.sh'
    }

    stage('Upload to s3') {
        if(env.BRANCH_NAME == "master"){
            withAWS(region:'eu-west-1',credentials:'****') {
                def identity=awsIdentity();
                s3Upload(bucket:"****", workingDir:'build', includePathPattern:'**/*');
                cfInvalidate(distribution:'EBAX8TMG6XHCK', paths:['/*']);
            }
        };
        if(env.BRANCH_NAME == "PRODUCTION"){
            withAWS(region:'eu-west-1',credentials:'****') {
                def identity=awsIdentity();
                s3Upload(bucket:"****", workingDir:'build', includePathPattern:'**/*');
                cfInvalidate(distribution:'E6JRLLPORMHNH', paths:['/*']);
            }
        };
    }
}

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Этот ответ очень похож на ответ @ biruk1230.Но если вы не хотите понизить версию своего плагина github, чтобы обойти эту ошибку, вы можете напрямую вызвать API.

void setBuildStatus(String message, String state) 
{
    env.COMMIT_JOB_NAME = "continuous-integration/jenkins/pr-merge/sanity-test"
    withCredentials([string(credentialsId: 'github-token', variable: 'TOKEN')]) 
    {
        // 'set -x' for debugging. Don't worry the access token won't be actually logged
        // Also, the sh command actually executed is not properly logged, it will be further escaped when written to the log
        sh """
            set -x
            curl \"https://api.github.com/repos/thanhlelgg/brain-and-brawn/statuses/$GIT_COMMIT?access_token=$TOKEN\" \
                -H \"Content-Type: application/json\" \
                -X POST \
                -d \"{\\\"description\\\": \\\"$message\\\", \\\"state\\\": \\\"$state\\\", \
                \\\"context\\\": \\\"${env.COMMIT_JOB_NAME}\\\", \\\"target_url\\\": \\\"$BUILD_URL\\\"}\"
        """
    } 
}

Проблема с обоими методами заключается в том, что continuous-integration/jenkins/pr-merge будет отображаться независимо от того,что.

0 голосов
/ 29 января 2019

Попробуйте использовать GitHubCommitStatusSetter (см. этот ответ для декларативного синтаксиса конвейера).Вы используете синтаксис конвейерного сценария, так что в вашем случае это будет что-то вроде этого (примечание: это всего лишь прототип, и его обязательно нужно изменить в соответствии с вашим конкретным проектом):

#!/usr/bin/env groovy 
properties([[$class: 'BuildConfigProjectProperty', name: '', namespace: '', resourceVersion: '', uid: ''], buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '5')), [$class: 'ScannerJobProperty', doNotScan: false]])
node {

    // ...

    stage('Upload to s3') {
        try {
            setBuildStatus(context, "In progress...", "PENDING");

            if(env.BRANCH_NAME == "master"){
                withAWS(region:'eu-west-1',credentials:'****') {
                    def identity=awsIdentity();
                    s3Upload(bucket:"****", workingDir:'build', includePathPattern:'**/*');
                    cfInvalidate(distribution:'EBAX8TMG6XHCK', paths:['/*']);
                }
            };

            // ...

        } catch (Exception e) {
            setBuildStatus(context, "Failure", "FAILURE");
        }
        setBuildStatus(context, "Success", "SUCCESS");
    }
}

void setBuildStatus(context, message, state) {
  step([
      $class: "GitHubCommitStatusSetter",
      contextSource: [$class: "ManuallyEnteredCommitContextSource", context: context],
      reposSource: [$class: "ManuallyEnteredRepositorySource", url: "https://github.com/my-org/my-repo"],
      errorHandlers: [[$class: "ChangingBuildStatusErrorHandler", result: "UNSTABLE"]],
      statusResultSource: [ $class: "ConditionalStatusResultSource", results: [[$class: "AnyBuildResult", message: message, state: state]] ]
  ]);
}

Пожалуйстапроверьте this и this ссылки для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...