# !groovy
stage 'build'
node {
repositoryCommiterEmail = 'ci@example.com'
repositoryCommiterUsername = 'examle.com'
checkout scm
sh "echo done"
if (env.BRANCH_NAME == 'master') {
stage 'tagging'
sh("git config user.email ${repositoryCommiterEmail}")
sh("git config user.name '${repositoryCommiterUsername}'")
sh "git remote set-url origin git@github.com:..."
// deletes current snapshot tag
sh "git tag -d snapshot || true"
// tags current changeset
sh "git tag -a snapshot -m \"passed CI\""
// deletes tag on remote in order not to fail pushing the new one
sh "git push origin :refs/tags/snapshot"
// pushes the tags
sh "git push --tags"
}
}
stage('tag build'){
checkout([
$class: 'GitSCM', branches: [[name: '*/master']],
userRemoteConfigs: [[credentialsId: 'git',
url: 'ssh://<ssh URL>']],
extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'targeted-dir']]
])
sshagent(credentials: ['<credentials ID.']){
dir('targeted-dir'){
sh("git config user.email '<email>")
sh("git config user.name '<user>.com'")
// deletes current snapshot tag
sh ("git tag -d ${PARAM_VERSION_NUMBER} || true")
// tags current changeset
sh ("git tag -a ${PARAM_VERSION_NUMBER} -m \"versioning ${PARAM_VERSION_NUMBER}\"")
// deletes tag on remote in order not to fail pushing the new one
sh ("git push origin :refs/tags/snapshot")
// pushes the tags
sh ("git push --tags")
}
}
5条答案
按热度按时间i86rm4rw1#
这是我能够实现这一点的方法,但如果你知道一个更好的方法,我更愿意听到它。
blmhpbnm2#
我想分享my Jenkins Pipeline Setup和我的解决方案,通过SSH发布变更/标签到git repo(Git Publish Support还在开发中)。请查看更多信息,任何改进的想法都是受欢迎的。
简而言之,您只需将文件
git_push_ssh.groovy
添加到项目中,并从Jenkinsfile中调用方法pushSSH()
,如下所示:gwbalxhn3#
对于那些无法使用上述方法的人,我直接使用了sshagent插件,它确实起到了作用:
}
gk7wooem4#
要使其在Blue Ocean(使用https连接)中正常工作,请使用以下命令:
dgtucam15#
基于SSH代理的方法在我们的Windows build服务器上不起作用,但是,我们仍然希望使用存储在Jenkins的凭据管理器中的凭据。由于我们的Git凭据是一个SSH密钥,我们意识到我们可以让Jenkins直接为我们提供密钥文件: