#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"
}
}
}
}
}