web-dev-qa-db-fra.com

Est-il possible de fusionner/pousser Git en utilisant le pipeline Jenkins

J'essaie de créer un flux de travail Jenkins à l'aide d'un fichier Jenkins. Tout ce que je veux, c'est surveiller la branche "développer" des changements. Quand un changement se produit, je veux que ce soit git tag et fusionner pour maîtriser. J'utilise GitSCM Step mais la seule chose qu'il semble supporter, c'est git clone. Je ne veux pas avoir Shell pour faire le tag/fusionner mais je ne vois pas comment y aller. Est-ce que quelqu'un sait si c'est possible? J'utilise BitBucket (sur site) pour mon serveur Git.

15
Progger

Ce n'est pas possible pour le moment, car le plug-in GitPublisher, qui était auparavant responsable du marquage/de la fusion/de l'insertion dans les tâches de style libre, n'a pas été mis à jour pour être compatible avec les pipelines Jenkins. Vous pouvez suivre ce problème à la fois dans la page de compatibilité des plug-ins pipeline et dans le numéro dédié GitPublisher Jira .

Il semble donc que votre seule option est de décomposer vos commandes de balise/fusion ... Cependant, notez que vous pouvez toujours bénéficier de certaines fonctionnalités intégrées de Jenkins, telles que l'utilisation des informations d'identification pour votre dépôt Git, qui en font assez simple ensuite de taguer/fusionner en fonction de vos besoins. 

Exemple de sortie:

git url: "ssh://jenkins@your-git-repo:12345/your-git-project.git",
    credentialsId: 'jenkins_ssh_key',
    branch: develop

Ensuite, le tag/merge/Push sera assez simple:

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"

J'espère qu'un jour GitPublisher sera publié dans une version compatible avec les pipelines, mais pour le moment, cette solution de contournement devrait suffire.

17
Pom12

Si vous recherchez des informations d'identification git, vous pouvez utiliser le plug-in de l'agent SSH comme dans ce lien: 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
andrzej.szmukala

Oui, c'est !! Après avoir lutté pendant des jours, je me suis retrouvé avec ce simple bloc de code pour le script de pipeline scripté qui a fonctionné pour moi.

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

Enjoyy !!

4
Litty Philip

Dans mon cas, j'ai été obligé de travailler avec HTTPS. Je l'ai résolu par:

  1. Création d’un identifiant/mot de passe/ bitbucketUsernamePassword .
  2. Utiliser ces informations pour passer à la caisse. 
  3. Définir credential.helper avant de passer à la caisse.
  4. Faire une branche git checkout pour obtenir une télécommande de suivi de branche locale.

Ensuite, je suis capable de pousser des choses avec git Push après cela.

Comme ça:

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

Ensuite, je peux faire des choses comme:

sh 'git Push'
4
Tomas Bjerre

J'ai eu à faire une tâche similaire et j'ai réussi à la faire fonctionner avec une variante: 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 \\"\\$@\\" > local_ssh.sh'
    sh 'chmod +x local_ssh.sh'
    withEnv(['GIT_SSH=local_ssh.sh']) {
        sh 'git Push Origin develop'
    }
}

Alors que ci est l'id du justificatif d'identité que vous avez configuré dans Jenkins. Le chemin d'accès à la clé ssh devient disponible en tant que variable d'environnement SSH_KEY.

2
Gregorio Melo

Ce fil était vraiment utile. Mes identifiants Jenkins sont nom d'utilisateur/mot de passe, donc j'ai utilisé:

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

Le nom d'utilisateur et le mot de passe sont tous deux masqués dans le journal:

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

Dans mon cas, je veux pousser vers un référentiel CodeCommit via SSH. sshagent ne fonctionne pas car il ne définit pas User. Cela a finalement fait le travail:

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