How to use GitHub commit message and commit id inside Jenkins pipeline?

旧城冷巷雨未停 提交于 2019-12-24 04:03:11

问题


I am using DevOps model, where i have built a pipeline for code build and deploy. In the entire process i want to log the Git commit id and commit message for that specific change commits.

@shruthibhaskar
shruthibhaskar committed just now 
1 parent 51132c4 commit aedd3dc56ab253419194762d72f2376aede66a19

and commit message and description as below

test commit 3

test commit desc 3

how do i access these values of commit inside my jenkins pipeline, where i have configured a webhook for SCM polling?


回答1:


Jenkins git plugin set some environment variables for every build. You can find the list of them in git plugin site. In which it gives the SHA of the current commit in ${GIT_COMMIT} environment variable.

You can use the SHA along with git log to print commit message and any other details you required with --pretty option.

git log --oneline -1 ${GIT_COMMIT} # prints SHA and title line
git log --format="medium" -1 ${GIT_COMMIT} # print commit, author, date, title & commit message



回答2:


git log --format=format:%s -1 (latest commit)

git log --format=format:%s -1 ${GIT_COMMIT} (specific commit)

git --no-pager show -s --format='%s' ${GIT_COMMIT}




回答3:


You can make a message from based on currentBuild.changeSets, for example:

@NonCPS
def sendChangeLogs() {
    def commitMessages = ""
    def formatter = new SimpleDateFormat('yyyy-MM-dd HH:mm')
    def changeLogSets = currentBuild.changeSets
    for (int i = 0; i < changeLogSets.size(); i++) {
        def entries = changeLogSets[i].items
        for (int j = 0; j < entries.length; j++) {
            def entry = entries[j]
            commitMessages = commitMessages + "${entry.author} ${entry.commitId}:\n${formatter.format(new Date(entry.timestamp))}: *${entry.msg}*\n" 
        }
    }
    slackSend color: "good", message: "Job: `${env.JOB_NAME}`. Starting build with changes:\n${commitMessages}"
}

And call it:

stage('Clone repository') {
    steps {
        checkout scm

        script {
            sendChangeLogs()
        }
    }
}

PS @NonCPS needs to except serialization error. I've found it here



来源:https://stackoverflow.com/questions/50856212/how-to-use-github-commit-message-and-commit-id-inside-jenkins-pipeline

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!