Можно ли Git объединить/нажать, используя трубопровод Дженкинса

Я пытаюсь создать рабочий процесс Jenkins с помощью Jenkinsfile. Все, что я хочу сделать, это следить за развитием "разработки" для изменений. Когда происходит изменение, я хочу, чтобы тег git и слияние выполнялись мастером. Я использую GitSCM Step, но единственное, что, по-видимому, поддерживает, - это git clone. Я не хочу, чтобы выкладывать, чтобы сделать тег/слияние, но я не вижу пути вокруг него. Кто-нибудь знает возможно ли это? Я использую BitBucket (on-prem) для моего сервера 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 будет выпущен в совместимой с конвейером версии, но на данный момент это обходное решение должно сделать.

Ответ 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>
   """
}