git - 如何从 jenkins 声明性管道在 git 中标记项目

标签 git jenkins jenkins-pipeline git-tag

在成功构建项目源之后,我想在 git 中设置一个标签并推送它。 以下是我的管道定义的相关部分:

pipeline {
    agent {
        docker {
            label 'docker'
            image 'somerepo/maven:3.5.2-jdk-8-alpine'
            args '-v /root/.m2:/root/.m2'
        }
    }

    stages {
        stage('Prepare') {
            environment {
                BITBUCKET = credentials('jenkins-creds')
            }
            steps {
                sh 'git clean -ffdx'
                sh("git config user.name 'jenkins'")
                sh("git config user.email 'x@y.z'")
                // Use .netrc for Git credentials
                sh '''
                    cat >~/.netrc <<.
                    machine bitbucket.server
                    login $BITBUCKET_USR
                    password $BITBUCKET_PSW
                    .
                    '''.stripIndent()
            }
        }
        stage('Validate pom') {
            steps {
                sh 'mvn -B validate'
            }
        }
        stage('Tag the version') {
            steps {
                sh 'printf "Tag the sources %s", "1.2.3"'
                sh 'mvn -B versions:set -DnewVersion=5.1.1'
                sh 'mvn -B scm:tag'
            }
        }
    }
}

这导致以下错误日志:

[INFO] Building PR02 Parent POM 5.1.2
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-scm-plugin:1.9.5:tag (default-cli) @ pr02-parent-pom ---
[INFO] Final Tag Name: '5.1.2'
[INFO] Executing: /bin/sh -c cd /var/jenkins_home/workspace/ParentPOM-Pipeline_master-GOYL657LPCAICEX72SN6WFZQV55BYMCLX7KLK63B6MKGMFYWD3IA && git tag -F /tmp/maven-scm-523050667.commit 5.1.2
[INFO] Working directory: /var/jenkins_home/workspace/ParentPOM-Pipeline_master-GOYL657LPCAICEX72SN6WFZQV55BYMCLX7KLK63B6MKGMFYWD3IA
[INFO] Executing: /bin/sh -c cd /var/jenkins_home/workspace/ParentPOM-Pipeline_master-GOYL657LPCAICEX72SN6WFZQV55BYMCLX7KLK63B6MKGMFYWD3IA && git push https://jira.team-dso.nl/bitbucket/scm/pr02/pr02-parent-pom.git refs/tags/5.1.2
[INFO] Working directory: /var/jenkins_home/workspace/ParentPOM-Pipeline_master-GOYL657LPCAICEX72SN6WFZQV55BYMCLX7KLK63B6MKGMFYWD3IA
[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] fatal: could not read Username for 'https://jira.team-dso.nl': No such device or address

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE

出了什么问题和/或我如何才能在每次成功构建后完成标记项目的目标?

最佳答案

我正在使用这段代码创建一个 git 标签并将其推送到服务器。您需要在构建阶段之后添加此阶段

stage('Git Push To Origin') {

        steps {

            withCredentials([usernamePassword(credentialsId: your_credentials, passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {


                sh "git tag ${your_tag}"
                sh "git push https://${GIT_USERNAME}:${GIT_PASSWORD}@${repository} ${your_tag}"
            }
        }
    }

关于git - 如何从 jenkins 声明性管道在 git 中标记项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47904152/

相关文章:

git - "cannot pull into a repository with state: merging_resolved"

git 工作流程,并将更改从 master merge 到分支

git - 上游 git 标签未显示在 fork 存储库中

jenkins - 如何使用 kubernetes 插件在 Jenkins 管道中使用后期步骤

jenkins - Jenkinsfile 库方法文档

Jenkins - 将脚本化管道导出到共享库中

git - 无法推送到远程分支,无法解析到分支

windows - Windows 上的 Hudson - 错误 : java. io.IOException:无法运行程序 "sh"

docker - 多行docker run命令

jenkins-pipeline - 如何使用 jenkins 管道共享库定义全局变量或常量?