it-swarm.com.de

Ist es möglich, Git mit Jenkins-Pipeline zusammenzuführen

Ich versuche, einen Jenkins-Workflow mit einer Jenkins-Datei zu erstellen. Alles, was ich möchte, ist, den Entwicklungsbereich auf Änderungen zu überwachen. Wenn eine Änderung auftritt, möchte ich, dass das Tag git ist und mit dem Master zusammengeführt wird. Ich verwende den GitSCM-Schritt, aber das einzige, was es zu unterstützen scheint, ist git clone. Ich möchte keine Shell für das Tag/Zusammenführen, aber ich sehe keinen Ausweg. Weiß jemand, ob das möglich ist? Ich benutze BitBucket (on-prem) für meinen Git-Server.

15
Progger

Momentan ist dies nicht möglich, da das Plugin GitPublisher, das zuvor für das Markieren/Mischen/Pushing von Freestyle-Jobs verantwortlich war, nicht aktualisiert wurde, um mit Jenkins-Pipelines kompatibel zu sein. Sie können dieses Problem sowohl auf der Kompatibilitätsseite der Pipeline-Plugins als auch im speziellen GitPublisher Jira-Problem verfolgen.

Es scheint also die einzige Möglichkeit zu sein, Ihre Tag/Merge-Befehle tatsächlich auszuspionieren. Beachten Sie jedoch, dass Sie immer noch von den integrierten Funktionen von Jenkins profitieren können, z ziemlich einfach, dann tag/merge nach Ihren Bedürfnissen. 

Beispiel Check-Out:

git url: "ssh://[email protected]:12345/your-git-project.git",
    credentialsId: 'jenkins_ssh_key',
    branch: develop

Dann ist das Tag/Merge/Push ziemlich einfach:

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"

Ich hoffe, dass GitPublisher eines Tages in einer Pipeline-kompatiblen Version veröffentlicht wird, aber für den Moment sollte diese Problemumgehung ausreichen.

17
Pom12

Wenn Sie nach den git-Anmeldeinformationen suchen, können Sie das SSH-Agent-Plugin wie in diesem Link verwenden: 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"
}
12

Ja, es ist !! Nachdem ich tagelang gekämpft hatte, endete ich mit diesem einfachen Codeblock für ein Skript-Pipeline-Skript, das für mich funktionierte.

withCredentials([sshUserPrivateKey(credentialsId: '<credential-id>', keyFileVariable: 'SSH_KEY')]) {
   sh("git Push Origin <local-branch>:<remote-branch>")
}

Enjoyy !!

4
Litty Philip

In meinem Fall musste ich mit HTTPS arbeiten. Ich habe es gelöst durch:

  1. Anlegen eines Benutzernamens/Passwortes bitbucketUsernamePassword .
  2. Verwenden dieser Berechtigung zum Auschecken. 
  3. Einstellung von credential.helper vor dem Checkout.
  4. Ausführen eines git-Checkout-Zweigs , um ein lokales Zweig-Tracking fern zu bekommen.

Dann kann ich mit git Push danach Dinge schieben.

So was:

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

Dann kann ich Dinge tun wie:

sh 'git Push'
4
Tomas Bjerre

Ich hatte eine ähnliche Aufgabe zu erledigen und habe es geschafft, mit einer Variation davon zu arbeiten: https://issues.jenkins-ci.org/browse/JENKINS-28335?focusedCommentId=320383&page=com.atlassian. jira.plugin.system.issuetabpanels% 3Acomment-tabpanel # comment-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'
    }
}

Während ci die ID des Berechtigungsnachweises ist, den Sie in Jenkins eingerichtet haben. Der Pfad zum ssh-Schlüssel wird als Umgebungsvariable SSH_KEY verfügbar.

2
Gregorio Melo

Funktioniert dies mit sshagent auf Blue Ocean (das die https-Autorisierung verwendet)?

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}")
                }
1

Die Antwort von Litty Philips hat mich am meisten überzeugt, aber ich musste auch GIT_SSH_COMMAND definieren.

withCredentials([sshUserPrivateKey(credentialsId: '<credential-id>', keyFileVariable: 'SSH_KEY')]) {
   sh """
   GIT_SSH_COMMAND = "ssh -i $SSH_KEY"
   git Push Origin <local-branch>:<remote-branch>
   """
}
0
J Blackburn

Dieser Thread war wirklich hilfreich. Meine Jenkins-Zugangsdaten sind Benutzername und Passwort.

withCredentials([usernamePassword(credentialsId: 'fixed', usernameVariable: 'username', passwordVariable: 'password')]){
                {
                    sh("git Push http://$username:[email protected]/repo")
                }

Der Benutzername und das Passwort sind im Protokoll verdeckt:

+ git Push http://****:****@git.corp.mycompany.com/repo
0
s d

In meinem Fall möchte ich per SSH zu einem CodeCommit-Repository pushen. sshagent funktioniert nicht, da User nicht festgelegt ist. Dies hat schließlich den Job gemacht:

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}'
    }
}
0
NeverFall