Я пытаюсь создать рабочий процесс Jenkins с помощью Jenkinsfile. Все, что я хочу сделать, это следить за развитием "разработки" для изменений. Когда происходит изменение, я хочу, чтобы тег git и слияние выполнялись мастером. Я использую GitSCM Step, но единственное, что, по-видимому, поддерживает, - это git clone. Я не хочу, чтобы выкладывать, чтобы сделать тег/слияние, но я не вижу пути вокруг него. Кто-нибудь знает возможно ли это? Я использую BitBucket (on-prem) для моего сервера git.
Можно ли Git объединить/нажать, используя трубопровод Дженкинса
Ответ 1
В настоящий момент это невозможно, так как плагин GitPublisher
, плагин, ранее ответственный за тегирование/слияние/нажатие на фристайл, не обновлялся, чтобы быть совместимым с конвейерами Jenkins. Вы можете следить за этой проблемой на странице с плагинами подключений конвейера, а выделенный GitPublisher Jira issue.
Итак, кажется, что единственный вариант, который у вас есть, - это на самом деле выложить команды тегов/слияний... Однако обратите внимание, что вы все равно можете воспользоваться некоторыми встроенными возможностями Jenkins, такими как использование учетных данных для вашего Git repo, что делает его довольно простым, а затем тегировать/объединять в соответствии с вашими потребностями.
Пример выписки:
git url: "ssh://[email protected]:12345/your-git-project.git",
credentialsId: 'jenkins_ssh_key',
branch: develop
Тогда tag/merge/push будет довольно простым:
sh 'git tag -a tagName -m "Your tag comment"'
sh 'git merge develop'
sh 'git commit -am "Merged develop branch to master'
sh "git push origin master"
Я надеюсь, что в один прекрасный день GitPublisher будет выпущен в совместимой с конвейером версии, но на данный момент это обходное решение должно сделать.
Ответ 2
Если вы используете учетные данные git, вы можете использовать плагин агента SSH, как в этой ссылке: https://issues.jenkins-ci.org/browse/JENKINS-28335?focusedCommentId=260925&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-260925
sshagent(['git-credentials-id']) {
sh "git push origin master"
}
Ответ 3
В моем случае я был вынужден работать с HTTPS. Я решил это:
- Создание учетных данных имени пользователя/пароля bitbucketUsernamePassword.
- Использование этого удостоверения для проверки.
- Установка credential.helper перед выполнением проверки.
- Выполнение ветки git checkout, чтобы получить удаленный отслежыватель локальной ветки.
Затем я могу продвигать вещи с помощью git push.
Вот так:
sh 'git config --global credential.helper cache'
sh 'git config --global push.default simple'
checkout([
$class: 'GitSCM',
branches: [[name: branch]],
extensions: [
[$class: 'CloneOption', noTags: true, reference: '', shallow: true]
],
submoduleCfg: [],
userRemoteConfigs: [
[ credentialsId: 'bitbucketUsernamePassword', url: cloneUrl]
]
])
sh "git checkout ${branch}" //To get a local branch tracking remote
Тогда я могу делать такие вещи, как:
sh 'git push'
Ответ 4
Да, это!! После нескольких дней борьбы я получил простой блок кода для скриптового конвейерного скрипта, который работал для меня.
withCredentials([sshUserPrivateKey(credentialsId: '<credential-id>', keyFileVariable: 'SSH_KEY')]) {
sh("git push origin <local-branch>:<remote-branch>")
}
Enjoyy !!
Ответ 5
Эта тема была действительно полезной. Мои учетные данные Jenkins - это имя пользователя/пароль, поэтому я использовал:
withCredentials([usernamePassword(credentialsId: 'fixed', usernameVariable: 'username', passwordVariable: 'password')]){
{
sh("git push http://$username:[email protected]/repo")
}
Имя пользователя и пароль скрыты в журнале:
+ git push http://****:****@git.corp.mycompany.com/repo
Ответ 6
Мне пришлось выполнить аналогичную задачу, и мне удалось заставить ее работать с одним из вариантов: https://issues.jenkins-ci.org/browse/JENKINS-28335?focusedCommentId=320383&page=com.atlassian.jira. plugin.system.issuetabpanels% 3Acomment-tabpanel # комментарий-320383
withCredentials([sshUserPrivateKey(credentialsId: 'ci', keyFileVariable: 'SSH_KEY')]) {
sh 'echo ssh -i $SSH_KEY -l git -o StrictHostKeyChecking=no \\"\\[email protected]\\" > local_ssh.sh'
sh 'chmod +x local_ssh.sh'
withEnv(['GIT_SSH=local_ssh.sh']) {
sh 'git push origin develop'
}
}
Принимая во внимание, что ci
- это идентификатор учетных данных, которые вы установили в Jenkins. Путь к ключу ssh становится доступным как переменная окружения SSH_KEY
.
Ответ 7
В моем случае я хочу отправить в репозиторий CodeCommit через SSH. sshagent
не работает, потому что не устанавливает User
. Это в конечном счете сделало работу:
withCredentials([sshUserPrivateKey(credentialsId: CODECOMMIT_CREDENTIALS_ID, keyFileVariable: 'SSH_KEY', usernameVariable: 'SSH_USER')]) {
withEnv(["GIT_SSH_COMMAND=ssh -o StrictHostKeyChecking=no -o User=${SSH_USER} -i ${SSH_KEY}"]) {
sh 'git push ${CODECOMMIT_URL} ${COMMIT_ID}:refs/heads/${BRANCH}'
}
}
Ответ 8
Получил это, работая с sshagent на синем океане (который использует авторизацию https)
sshagent(credentials: ["406ef572-9598-45ee-8d39-9c9a227a9227"]) {
def repository = "[email protected]" + env.GIT_URL.replaceFirst(".+://", "").replaceFirst("/", ":")
sh("git remote set-url origin $repository")
sh("git tag --force build-${env.BRANCH_NAME}")
sh("git push --force origin build-${env.BRANCH_NAME}")
}
Ответ 9
Ответ литти Филипса дал мне большую часть пути, но мне также нужно было определить GIT_SSH_COMMAND.
withCredentials([sshUserPrivateKey(credentialsId: '<credential-id>', keyFileVariable: 'SSH_KEY')]) {
sh """
GIT_SSH_COMMAND = "ssh -i $SSH_KEY"
git push origin <local-branch>:<remote-branch>
"""
}