У меня есть конвейерная работа Jenkins, чтобы сделать выпуск. Он использует плагин Jenkin's Github для проверки проекта и создания сборки.
Мой упрощенный DSL:
multibranchPipelineJob('Release') {
...
branchSources {
branchSource {
source {
github {
id('AAA')
repoOwner('BBB')
repository('CCC')
credentialsId('github-credentials')
repositoryUrl('https://github.com/BBB/CCC')
configuredByUrl(false)
}
}
...
}
}
...
}
и мой упрощенный «Jenkinsfile» выглядит так:
pipeline {
agent any
stages {
stage('Build & Release') {
steps {
sh "./gradlew clean build release"
}
}
}
}
Но когда он пытается выполнить задачу release
, он терпит неудачу со следующим исключением.
Caused by: org.eclipse.jgit.errors.TransportException: https://github.com/BBB/CCC.git: Authentication is required but no CredentialsProvider has been registered
at org.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:531)
at org.eclipse.jgit.transport.TransportHttp.openPush(TransportHttp.java:434)
at org.eclipse.jgit.transport.PushProcess.execute(PushProcess.java:127)
at org.eclipse.jgit.transport.Transport.push(Transport.java:1335)
at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:137)
Насколько я понимаю, когда задача release
запущена, она пытается подключиться с помощью SSH к Github, но я не настроил его, поскольку мы не хотим поддерживать «пользователя» для Jenkins на Github. Как я могу решить эту проблему, не настраивая ключи SSH на Github?
Вам нужно убедиться, что у вас есть правильные учетные данные на странице конфигурации системы Jenkins.
Как видно из документации , зарегистрируйте PAT (персональный токен доступа), хранящийся в Jenkins, через плагин Jenkins Credentials.
Затем преобразуйте его в имя пользователя/пароль с помощью плагина GitHub:
Перейдите к глобальной конфигурации и добавьте GitHub Server Config.
Перейдите в раздел «Дополнительно» -> «Управление дополнительными действиями GitHub» -> «Преобразовать логин и пароль в токен».
Доступ к учетным данным для приложения Github можно получить в Jenkinsfile следующим образом:
steps {
withCredentials([usernamePassword(credentialsId: 'github-app-id',
usernameVariable: 'GITHUB_APP',
passwordVariable: 'GITHUB_ACCESS_TOKEN')]) {
sh 'export GRGIT_USER=$GITHUB_APP && export GRGIT_PASS=$GITHUB_ACCESS_TOKEN && ./gradlew final'
}
}