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.
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.
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"
}
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 !!
Dans mon cas, j'ai été obligé de travailler avec HTTPS. Je l'ai résolu par:
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'
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
.
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
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}'
}
}