2016-04-01 13 views
4

現在のgitチェンジセットにタグを付け、Jenkinsfile内部からタグをプッシュしたいとします。タグが既に存在する場合は、タグを置き換える必要があります。Jenkinsfile内から現在のgitチェンジセットにタグを付けるにはどうすればよいですか?

モバイルタグとなるsnapshotタグで渡されたビルドにタグを付けるために、このロジックを使用します。

どうすればいいですか?

答えて

6

これは私がこれをこのように実装する方法ですが、あなたがより良い方法を知っていれば、私はそれを聞いて喜んでいます。

#!groovy 

stage 'build' 
node { 

    repositoryCommiterEmail = '[email protected]' 
    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 [email protected]:..." 

     // 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" 
    } 
} 
+2

これは面白いです。どのようにしてリモートへの認証を行うのですか(パスワードの送信方法)? – octavian

1

私は(Git Publish Supportが開発中ですが)SSH経由レポをgitのために変更/タグを公開するmy Jenkins Pipeline Setupと私の解決策を共有したいです。詳細情報をチェックしてください。改善アイデアは大歓迎です。

あなたは自分のプロジェクトにファイル git_push_ssh.groovyを追加し、このようJenkinsfileからメソッド pushSSH()を呼び出す要するに

:やった、私は直接プラグインsshagentを使用上記の作業を取得できなかった人のために

env.BRANCH_NAME = "mycoolbranch"// BRANCH_NAME is predefined in multibranch pipeline job 
env.J_GIT_CONFIG = "true" 
env.J_USERNAME = "Jenkins CI" 
env.J_EMAIL = "[email protected]" 
env.J_CREDS_IDS = '02aa92ec-593e-4a90-ac85-3f43a06cfae3' // Use credentials id from Jenkins 
def gitLib = load "git_push_ssh.groovy" 
... 
gitLib.pushSSH(commitMsg: "Jenkins build #${env.BUILD_NUMBER}", tagName: "build-${env.BUILD_NUMBER}", files: "changelog.txt someotherfile.txt"); 
1

トリック:

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

}

関連する問題