Есть ли способ автоматизировать фиксацию, нажатие после применения плагина в задании Jenkins 2?

#jenkins #jenkins-pipeline #jenkins-groovy

#Дженкинс #дженкинс-конвейер #дженкинс-заводной

Вопрос:

Я пытался автоматизировать форматирование стиля кода в задании jenkins, поэтому в будущем, когда будет добавлен новый код, Jenkins позаботится о форматировании кода (если он не применяется) — это также поможет в устаревших репозиториях кода.

Итак, идея состоит в том, чтобы запустить следующий этап перед установкой mvn build,

 stage('Apply Google code style ') {
      steps {
        script {
          sh "mvn com.coveo:fmt-maven-plugin:format"
        }
      }
    }
 

и если сборка пройдет хорошо, (автоматически) зафиксируйте эти изменения, определив, изменились ли какие-либо файлы * .java.

Я поиграл с changeset изменениями и changeLogSet определил изменения после применения плагина, оказывается, они содержат только изменения с последнего коммита. Есть ли какой-либо способ изменить файлы в Jenkins после оформления заказа?

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

1. почему вы не можете использовать собственную git команду из конвейера, чтобы выполнить коммит за вас? следуйте git add . инструкциям , git commit -m "auto formatted committed from pipeline" , git push origin $branchName . убедитесь, что учетные данные git настроены на компьютере, чтобы сделать это.

2. верно, хотя я имел в виду проверить только «ЕСЛИ» есть изменения. но я понял суть и нашел решение. Опубликую это сейчас

Ответ №1:

Ответом здесь является функция Jenkins groovy, проверяющая git status --porcelain

 @NonCPS
Boolean getGitStatus() {
  def changedFiles = sh(returnStdout: true, script: "git status --porcelain")
  if(changedFiles != null) {
    return true
  } else {
    return false
  }
}
 

Проверка этой функции на этапе и фиксация, если возвращает true.

 stage('Check for new changes and commit') {
  steps {
    script {
      if (env.BRANCH_NAME != 'hotfix/*') {
        def changedFiles = getGitStatus()
        if(changedFiles) {
          echo "Changes identified by Jenkins for Auto commit"
          sh "git add -u"
          sh "git commit -m 'Jenkins Auto Commit : Google code styler applied'"
          sh "git push origin $env.BRANCH_NAME"
        } else  {
          echo "No new changes identified"
        }
      }
    }
  }
}