現在の git 変更セットにタグを付け、そのタグを Jenkinsfile 内からプッシュしたいと考えています。タグが既に存在する場合は、置き換える必要があります。
タグで渡されたビルドにタグを付けるために、このロジックを使用したいと思いますsnapshot
。これはモバイルタグになります。
これどうやってするの?
現在の git 変更セットにタグを付け、そのタグを Jenkinsfile 内からプッシュしたいと考えています。タグが既に存在する場合は、置き換える必要があります。
タグで渡されたビルドにタグを付けるために、このロジックを使用したいと思いますsnapshot
。これはモバイルタグになります。
これどうやってするの?
これが私がこのように実装できた方法ですが、より良い方法を知っているなら、私はそれを聞いて喜んでいます.
#!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"
}
}
上記の作業を行うことができなかった人のために、私は sshagent プラグインを直接使用しました。
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")
}
}
}