如何验证特定作者在管道声明脚本中所做的代码更改

时间:2018-07-04 15:43:00

标签: jenkins jenkins-pipeline

我们有一个包含多个项目的仓库,每发布一个版本,我们的脚本就会更改特定版本的所有快照。

这可能会导致Triger建立詹金工作。

当前,我正在使用作业,并在项目列表中导航并通过以下shell脚本进行限制。

  • 我如何在声明式管道中实现相同目的以分别构建子项目并确定更改的作者?
  • 如果我手动运行,声明式程序是否能够识别出代码已更改?

    用于cat projects-list.txt中的文件;如果测试-d $ file;然后

    echo "Checking project $file"
    AUTHOR=$(git log -1 --format='%an' -- "$file")
    if [ "${AUTHOR}" != "release" ]; then
      echo "Detected changes in project $file"
      cd $file
      echo "Building project $file"
      mvn clean install -U`
    

我也尝试了以下脚本,但是变量显示为null,我正在通过管道插件的“管道脚本”选项进行测试。(内联脚本)

pipeline {
    agent any
    stages {
        stage ('checkout') {
            steps {
                git url: 'https://my.com/scm/java/my.git'
            }
        }
        stage('Build') {
            steps {
                echo 'Building.. branch'+env.BRANCH_NAME
                echo env.CHANGE_AUTHOR
                echo env.CHANGE_AUTHOR_DISPLAY_NAME
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我逐步介绍了以下脚本,如果有人有更好的解决方案,请更新

script {
    def changeLogSets = currentBuild.changeSets
    def commitAuthor ="" 
    def commitMsg    =""
    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]
            commitAuthor = "${entry.author}"
            commitMsg    = "${entry.msg}" 
            echo "${entry.commitId} by ${entry.author} on ${new Date(entry.timestamp)}: ${entry.msg}"        
        }
    }

    if(commitAuthor == 'release' || commitMsg.contains("INTERIM") ) {
        echo "condition meet"                                                                     
    }
}