web-dev-qa-db-ja.com

Jenkinsfile内から現在のgitチェンジセットにタグを付けるにはどうすればよいですか?

現在のgitチェンジセットにタグを付けて、Jenkinsfile内からタグをプッシュします。タグがすでに存在する場合は、置き換える必要があります。

このロジックを使用して、渡されたビルドにsnapshotタグ(モバイルタグ)をタグ付けします。

これどうやってするの?

10
sorin

これが私がこれをこの方法で実装できた方法ですが、あなたがより良い方法を知っているなら、私はそれを聞いて喜んでいるだけではありません。

#!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"
    }
}
12
sorin

上記を機能させることができなかった人々のために、私は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")
    }
}

}

3
Nick Brown

私のJenkins Pipeline Setup と、変更/タグをSSH経由でgit repoに公開するソリューションを共有したいと思います(ただし、- Git Publish Support は開発中です)。詳細については、こちらをご覧ください。改善のアイデアは大歓迎です。

つまり、ファイル_git_Push_ssh.groovy_をプロジェクトに追加し、次のようにJenkinsfileからメソッドpushSSH()を呼び出すだけです。

_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");
_
3
Amaksoft

(https接続を使用する)青い海でこれを機能させるには、以下を使用します。

sshagent(credentials: ["406ef572-9598-45ee-8d39-9c9a227a9227"]) {
                def repository = "git@" + env.GIT_URL.replaceFirst(".+://", "").replaceFirst("/", ":")
                sh("git remote set-url Origin $repository")
                sh("git tag --force build-${env.BRANCH_NAME}")
                sh("git Push --force Origin build-${env.BRANCH_NAME}")
            }
1