Jenkins - Как передать переменные в плагин уведомления о статусе Bitbucket? - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь передать переменные в плагин Bitbucketstatusnotify, но он не работает.Я пробовал разные итерации и использование escape-символов и т.д. безрезультатно.Это вообще возможно?Если да, то как?

Мой фрагмент кода jenkins ниже:

REPO_SLUG = sh(script: "echo ${GIT_URL} | grep -oP '(?<=/).*[^.git]'", returnStdout: true)

// Update Bitbucket commit build status to In Progress  
bitbucketStatusNotify(buildState: 'INPROGRESS', repoSlug: "${REPO_SLUG}", commitId: "${GIT_COMMIT}")

try {

//build code here

// Update Bitbucket commit build status to Successful  
bitbucketStatusNotify(buildState: 'SUCCESSFUL', repoSlug: "${REPO_SLUG}", commitId: "${GIT_COMMIT}")


} catch (Exception e) {

echo 'Error occured: ' + e

// Update Bitbucket commit build status to Failed  
bitbucketStatusNotify(buildState: 'FAILED', repoSlug: "${REPO_SLUG}", commitId: "${GIT_COMMIT}")

}

Пожалуйста, обратите внимание , что GIT_COMMIT является переменной среды jenkins.Я попытался повторить эти переменные и увидеть правильные значения, как и ожидалось, однако передача их этому плагину не работает.

1 Ответ

0 голосов
/ 25 июля 2018

Пожалуйста, используйте этот скрипт:
import hudson.tasks.test.AbstractTestResultAction

node {
    stage 'Checkout'
        notifyBitbucket('INPROGRESS')
        cleanWs()
        checkout scm
    enter code here
    stage 'Build'
        bat "nuget restore \"${workspace}/PlaygroundForVaults.sln\""
        bat "\"C:/Program Files/dotnet/dotnet.exe\" restore \"${workspace}/PlaygroundForVaults.sln\""
        bat "\"C:/Program Files/dotnet/dotnet.exe\" build \"${workspace}/PlaygroundForVaults.sln\""
    stage 'UnitTests'
        bat returnStatus: true, script: "\"C:/Program Files/dotnet/dotnet.exe\" test \"${workspace}/PlaygroundForVaults.sln\" --logger \"trx;LogFileName=unit_tests.xml\" --no-build"
        step([$class: 'MSTestPublisher', testResultsFile:"**/unit_tests.xml", failOnError: true, keepLongStdio: true])
        def allTestPassed = allTestPass()
        if(allTestPassed == false)
        {
            notifyBitbucket('FAILED')
            assert false
        }
        else
        {
            notifyBitbucket('SUCCESS')
        }
}
def allTestPass() {
    def testStatus = ""
    def allTestPass = 0
    AbstractTestResultAction testResultAction = currentBuild.rawBuild.getAction(AbstractTestResultAction.class)
    if (testResultAction != null) {
        def total = testResultAction.totalCount
        def failed = testResultAction.failCount
        def skipped = testResultAction.skipCount
        def passed = total - failed - skipped
        testStatus = "Test Status:\n  Passed: ${passed}, Failed: ${failed} ${testResultAction.failureDiffString}, Skipped: ${skipped}"
        if (failed == 0) {
            currentBuild.result = 'SUCCESS'
        }
        allTestPass = (failed == 0)
    }
    else
    {
        testStatus = "Didn't find any tests..."
        allTestPass = false
    }
    println testStatus
    return allTestPass
}
def notifyBitbucket(String state) {
    println "Notify Bitbucket With " + state + ", Commit = " + "${Commit}"
    if('SUCCESS' == state || 'FAILED' == state) {
        currentBuild.result = state         // Set result of currentBuild !Important!
    }

    notifyBitbucket commitSha1: '${Commit}', 
                    credentialsId: 'Bitbucket_PG_Global_For_Notification_User_Pass', 
                    disableInprogressNotification: false, 
                    considerUnstableAsSuccess: false, 
                    ignoreUnverifiedSSLPeer: true, 
                    includeBuildNumberInKey: false, `enter code here`
                    prependParentProjectKey: false, 
                    projectKey: '', 
                    stashServerBaseUrl: '<your server ip>:7990'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...