Трубопровод Дженкинса не может добиться успеха, используя учетные данные - PullRequest
0 голосов
/ 13 февраля 2019

Я новичок в сценарии конвейера jenkins и пытаюсь использовать плагин релиза maven в моем конвейере.Но я столкнулся с некоторой проблемой на шаге релиза.

Вот мой код:

node('linux') {
stage('Checkout') {
    checkout scm
}
 withMaven(maven: 'Maven 3') {

    stage('Build') {
        sh "mvn clean verify"
        junit '**/target/*-reports/TEST-*.xml'
    }

    stage('SonarQube analysis') {
       sh 'mvn sonar:sonar'
    }

     stage('Release') {
        withCredentials([usernamePassword(credentialsId: "jenkins-gerrit", usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
            sh 'git config user.email "************************"'
            sh 'git config user.name $USERNAME'
            sh 'mvn -B release:clean release:prepare release:perform -Dusername=$USERNAME -Dpassword=$PASSWORD'
    }
}

}

И я получаю следующую ошибку:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.4.2:prepare (default-cli) on project aqt-router: Unable to commit files
[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] fatal: unable to access 'http://****:****@mygerritserver/myproject/': Could not resolve host: ****; Name or service not known
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

Я пытался напрямую указать свои личные учетные данные в коде вместо использования withCredentials:

 sh 'mvn -B release:clean release:prepare release:perform -Dusername=johnDoe -Dpassword=password'

На этот раз кажется, что он нашел URL геррита, но, очевидно, пользовательне разрешается нажимать, так как у нас есть архитектура gerrit:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.4.2:prepare (default-cli) on project aqt-router: Unable to commit files
[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] remote: Branch refs/heads/master:
[ERROR] remote: You are not allowed to perform this operation.
[ERROR] remote: To push into this reference you need 'Push' rights.
[ERROR] remote: User: johnDoe
[ERROR] remote: Please read the documentation and contact an administrator
[ERROR] remote: if you feel the configuration is incorrect
[ERROR] remote:
[ERROR] remote: Processing changes: refs: 1
[ERROR] remote: Processing changes: refs: 1, done
[ERROR] To http://johnDoe:password@mygerritserver/myproject
[ERROR] ! [remote rejected] master -> master (prohibited by Gerrit)

Дело в том, что мне нужно использовать пользователя gerrit, указанного в наших учетных данных jenkins, потому что он имеет право на push и прочее.Но, похоже, я не могу использовать его через функцию withCredentials.

Обратите внимание, что я не могу попытаться напрямую ввести пользователя gerrit в командную строку, потому что я не знаю имени пользователя и пароля.

Спасибо за вашу помощь

РЕДАКТИРОВАТЬ:

Благодаря комментарию @ellak я нашел решение:

 def encodedPassword = URLEncoder.encode("$PASSWORD",'UTF-8')
 sh "mvn -B release:clean release:prepare release:perform -Dusername=$USERNAME -Dpassword=$encodedPassword"

Действительно, я думаю, чтопароль содержал специальный символ, который нужно было закодировать.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Благодаря комментарию @ellak я нашел решение:

 def encodedPassword = URLEncoder.encode("$PASSWORD",'UTF-8')
 sh "mvn -B release:clean release:prepare release:perform -Dusername=$USERNAME -Dpassword=$encodedPassword"

Действительно, я думаю, что пароль содержал специальный символ, который нужно было закодировать.

0 голосов
/ 13 февраля 2019

Вам нужно использовать " вместо ' для интерполяции строк для работы в groovy.

sh "git config user.name $USERNAME"
sh "mvn -B release:clean release:prepare release:perform -Dusername=$USERNAME -Dpassword=$PASSWORD"
...