Jenkins通过git合并分支实现自动打包

这篇具有很好参考价值的文章主要介绍了Jenkins通过git合并分支实现自动打包。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现功能:git提交代码,然后Jenkins自动打包两次,提交前的分支一次,合并后的分支一次

如:dev提交到master,使得Jenkins打两个包,即dev分支在提交合并请求时打一次,

在合并请求完成后master分支打一次

git的webhooks设置

  1. Url填入jenkins的job配置

  1. 勾选合并请求触发构建,勾选后在合并请求过程中会根据jenkins的详细控制进行触发

Jenkins通过git合并分支实现自动打包

在git合并分支,触发webhooks时,会向Jenkins传递相应参数,如下示例:

以下为打开合并请求时携带的参数:
gitlabBranch : dev
gitlabSourceBranch : dev
gitlabActionType : MERGE
gitlabUserName : Administrator
gitlabUserEmail : admin@example.com
gitlabSourceRepoHomepage : http://10.9.8.185/gitlab-instance-02db178f/demo
gitlabSourceRepoName : demo
gitlabSourceNamespace : GitLab Instance
gitlabSourceRepoURL : git@10.9.8.185:gitlab-instance-02db178f/demo.git
gitlabSourceRepoSshUrl : git@10.9.8.185:gitlab-instance-02db178f/demo.git
gitlabSourceRepoHttpUrl : http://10.9.8.185/gitlab-instance-02db178f/demo.git
gitlabMergeRequestTitle : Update dev3
gitlabMergeRequestDescription : 
gitlabMergeRequestId : 6
gitlabMergeRequestIid : 6
gitlabMergeRequestState : opened
gitlabMergedByUser : root
gitlabMergeRequestAssignee : 
gitlabMergeRequestLastCommit : 9549b3448ccf41995dba6ec723715ad361676702
gitlabMergeRequestTargetProjectId : 2
gitlabTargetBranch : main
gitlabTargetRepoName : demo
gitlabTargetNamespace : GitLab Instance
gitlabTargetRepoSshUrl : git@10.9.8.185:gitlab-instance-02db178f/demo.git
gitlabTargetRepoHttpUrl : http://10.9.8.185/gitlab-instance-02db178f/demo.git
gitlabBefore : 
gitlabAfter : 
gitlabTriggerPhrase :

注:当完成合并请求时,gitlabMergeRequestState 的状态会改变,如下:
gitlabMergeRequestState : merged

Jenkins项目的触发设置

Jenkins配置

  1. http://10.9.8.185/project/demo 为job的url,需要填入gitlab webhooks 的配置

  1. 根据gitlab的触发请求选择触发构建的条件,控制权在gitlab webhooks,

如gitlab 没有push请求则jenkins不会因为gitlab的push触发构建

但合并请求的详细控制在jenkins,分别对应:打开请求,新的commit提交,完成合并,关闭合并等

Jenkins通过git合并分支实现自动打包

Jenkins的maven文件示例

在完成git和Jenkins项目的配置后,需要根据需求书写Jenkins pipeline的maven打包文件

注:以下示例中的jacoco、junit、sonar需要额外插件文章来源地址https://www.toymoban.com/news/detail-507777.html

pipeline {
    agent any 
    stages {
        stage('parameters'){
            steps{
                sh '''
                    echo "gitlab webhooks触发构建携带的参数"
                    echo "
                    gitlabBranch : ${gitlabBranch}
                    gitlabSourceBranch : ${gitlabSourceBranch}
                    gitlabActionType : ${gitlabActionType}
                    gitlabUserName : ${gitlabUserName}
                    gitlabUserEmail : ${gitlabUserEmail}
                    gitlabSourceRepoHomepage : ${gitlabSourceRepoHomepage}
                    gitlabSourceRepoName : ${gitlabSourceRepoName}
                    gitlabSourceNamespace : ${gitlabSourceNamespace}
                    gitlabSourceRepoURL : ${gitlabSourceRepoURL}
                    gitlabSourceRepoSshUrl : ${gitlabSourceRepoSshUrl}
                    gitlabSourceRepoHttpUrl : ${gitlabSourceRepoHttpUrl}
                    gitlabMergeRequestTitle : ${gitlabMergeRequestTitle}
                    gitlabMergeRequestDescription : ${gitlabMergeRequestDescription}
                    gitlabMergeRequestId : ${gitlabMergeRequestId}
                    gitlabMergeRequestIid : ${gitlabMergeRequestIid}
                    gitlabMergeRequestState : ${gitlabMergeRequestState}
                    gitlabMergedByUser : ${gitlabMergedByUser}
                    gitlabMergeRequestAssignee : ${gitlabMergeRequestAssignee}
                    gitlabMergeRequestLastCommit : ${gitlabMergeRequestLastCommit}
                    gitlabMergeRequestTargetProjectId : ${gitlabMergeRequestTargetProjectId}
                    gitlabTargetBranch : ${gitlabTargetBranch}
                    gitlabTargetRepoName : ${gitlabTargetRepoName}
                    gitlabTargetNamespace : ${gitlabTargetNamespace}
                    gitlabTargetRepoSshUrl : ${gitlabTargetRepoSshUrl}
                    gitlabTargetRepoHttpUrl : ${gitlabTargetRepoHttpUrl}
                    gitlabBefore : ${gitlabBefore}
                    gitlabAfter : ${gitlabAfter}
                    gitlabTriggerPhrase : ${gitlabTriggerPhrase}"
                '''
            }
        }
        stage('checkout') {
            steps {
                script{
                    if( "${env.gitlabMergeRequestState}" == 'opened' ){
                        echo "打开合并请求,构建合并分支"
                        env.BRANCH="${env.gitlabBranch}"
                    }
                    if( "${env.gitlabMergeRequestState}" == 'merged' ){
                        echo "完成合并请求,切换构建分支为主分支"
                        env.BRANCH="${env.gitlabTargetBranch}"
                    }
                    if( "${env.gitlabMergeRequestState}" == '' || "${env.gitlabMergeRequestState}" == 'null' ){
                        echo "没有合并请求,构建默认分支"
                        env.BRANCH="${BRANCH}"
                    }
                    echo "动态分支 :${env.BRANCH} 拉取指定分支代码"
                }
                echo "env.BRANCH 为定义的参数变量,根据变量拉取指定分支"
                checkout([$class: 'GitSCM', branches: [[name: "${env.BRANCH}"]], extensions: [], userRemoteConfigs: [[credentialsId: '5e3b04f0-93aa-4607-a149-b0ca73de9cfe', url: 'http://10.9.8.185/gitlab-instance-02db178f/demo.git']]])
            }
        }
        stage('BUILD FILE') {
            steps {
                sh 'echo "build 构建日期文件写入"'
                sh '''
                L_RELEASE_NOTE=Notes.txt
                L_COMMIT=`git log -1 --pretty=format:%H`
                
                echo "Release Date: ` date \'+%Y-%m-%d %H:%M:%S\'`" >> $L_RELEASE_NOTE
                echo "Commit: ${L_COMMIT}" >> ${L_RELEASE_NOTE}
                echo "Build Number: "${BUILD_NUMBER} >> ${L_RELEASE_NOTE}
                echo "Web Address: "${BUILD_URL} >> ${L_RELEASE_NOTE}
                NOTE_FILE=BUILD
                echo "build: ${VERSION}-b${BUILD_NUMBER}(${BRANCH})" >> $NOTE_FILE
                echo "date: `date \'+%Y-%m-%d %H:%M:%S\'`" >> $NOTE_FILE ''' 
            }
        }
        stage('build') {
            steps {
                echo "build 安装包"
                sh 'mvn versions:set -DnewVersion=${VERSION}'
                sh 'mvn clean package -Dmaven.test.failure.ignore=true  -Dbuild.number=${BUILD_NUMBER}' 
                //sh 'mvn clean org.jacoco:jacoco-maven-plugin:0.8.8:prepare-agent package -Dmaven.test.failure.ignore=true  -Dbuild.number=${BUILD_NUMBER}' 
            }
        }
        stage('Junit Test') {
            steps {
                echo "构建后使用junit插件 添加报告"
                junit 'target/surefire-reports/*.xml'
            }
        }
        stage('SonarQube') {
            steps {
                script{
                    scannerHome = tool 'SonarQubeScanner'
                }
                withSonarQubeEnv('SonarQube7.8') {
                    // This expands the evironment variables SONAR_CONFIG_NAME, SONAR_HOST_URL, SONAR_AUTH_TOKEN that can be used by any script.
                    sh "${scannerHome}/bin/sonar-scanner " + 
                    "-Dsonar.projectKey=demo " + 
                    "-Dsonar.host.url=http://10.97.8.185:6080 " + 
                    "-Dsonar.java.binaries=target/classes " + 
                    "-Dsonar.sources=. " + 
                    "-Dsonar.sourceEncoding=UTF-8 " +
                    "-Dsonar.nodejs.executable=/opt/node/node-v16.17.0-linux-x64/bin/node " +
                    "-Dsonar.login=4ac58e617129ce88038d9741f5ba6a786cda3ed6"
                }
            }
        }
        stage('Code Coverage') {
            steps {
                echo "构建后使用jacoco插件 添加报告"
                sh 'ls target'
                //sh "mvn org.jacoco:jacoco-maven-plugin:0.8.8:report"
                jacoco()
            }
        }
        stage('artifacts') {
            steps {
                echo "归档文件,指定目录下build文件"
                //archiveArtifacts artifacts: 'target/*.jar', followSymlinks: false 
            }
        }
    }
    post { 
        always { 
            echo " always  构建后触发"
        }
        success{
            echo " success 构建成功 "
        }
        failure{
            echo " failure 构建失败 "
        }
        aborted{
            echo " aborted 终止构建 "
        }
    }
}

到了这里,关于Jenkins通过git合并分支实现自动打包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp:HbuildeX项目实现jenkins自动化打包上传

    前序: 基于HBuilderX创建的项目。 配置uniapp 指令式打包APP、微信小程序、H5。 ubuntu系统上的jenkins部署基础指令,发送给windows服务器上,windows服务器使用HBuilderX软件的cli.exe执行相关cli命令打包,然后jenkins再调用接口下载打包后的文件。 可实现多线程同时打包。 大致流程:

    2024年02月16日
    浏览(63)
  • jenkins+gitlab实现Android自动打包填坑之旅

    1.首先你需要知道你想要实现的Android自动打包的Android项目的一些环境配置及需要使用的一些开发版本。 声明:本文 Android项目基于:1.jdk11 2.SDK无要求 3.gradle无要求(同Manven一样为项目自动化构建开源工具) 注:本文适用于 任何版本 jdk SDK Gradle。 了解Android项目使用到的东西

    2024年01月25日
    浏览(51)
  • git合并分支(开发版本分支合并到发布版本分支)

    将一个分支合并到另一个分支(或者说将开发版本的分支覆盖到发布版本分支) 假设当前有两个分支 : develop分支 :主要在开发的分支,每日开发的代码都存为该分支 master分支 :作为发布版本的分支,将当前重大版本的代码存为该分支 现在目的 :将develop的内容合并到master分

    2024年02月07日
    浏览(45)
  • QT+jenkins window环境实现一键自动化构建打包签名发布

            1.官网下载地址: Jenkins download and deployment,下载最新版本的安装包并安装。安装过程中,会要求你输入端口号并记住。         2.java下载地址:Java Downloads | Oracle,下载最新版本的安装包并安装。         3.浏览器输入网址:127.0.0.1: port, port为端口号,默认8080,安

    2024年02月01日
    浏览(45)
  • git 分支合并(dev合并到master分支)

    前景:在项目开发中,经常会多分支协作开发,所以就会遇到分支合并等问题。以下用例是将dev分支合并到master分支 1. 对当前dev分支的本地代码进行储存   1.1  如当前代码未编辑完,不想提交,即可将当前dev分支的代码暂存   1.2  如当前代码已编辑完,即可将当前代码提交

    2024年02月15日
    浏览(49)
  • git使用查看分支、创建分支、合并分支

    一、查看分支 查看的git命令如下: 1、查看远程分支 2、查看本地分支 二、创建和切换分支 1、创建新分支 2、切换分支 3、创建分支的同时,切换到该分支上 三、从远程仓库pull(拉取)代码到本地分支 1、指定远程分支,和本地分支 2、如果不写本地分支名称,则默认和远程

    2024年02月08日
    浏览(73)
  • git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支

    查看当前本地仓库中有哪些分支 HEAD所指向的分支就是当前正在工作的分支 创建一个分支 创建好了,但是目前还是指向 master 用tree命令也可以看到已经创建分支成功了 创建出来的分支,和主分支的最新记录是一样的 切换分支就是让HEAD指向我们的dev分支 我们在dev分支上堆R

    2024年02月04日
    浏览(60)
  • Git切换分支(创建本地分支,远程分支,合并分支代码)

    1 .创建本地分支 2 .本地切换到新创建的分支 对应的远程分支也会切换 3 .查看当前所在分支 4 .删除本地分支(先切换其他分支)(删除本地dev分支) 5 .创建远程分支 6 .删除远程分支 7 .提交代码 8 .分支合并 想合并develop到master 先进入master (可以先git status看看是否有冲突)

    2024年02月12日
    浏览(62)
  • git如何把其他分支的合并到主分支上,主分支的合并到其他分支上

    master:主分支 other:其他分支 首先查看分支  git branch 如果分支在主分支上忽略此步,如果不在切换分支 git checkout other 在other分支上拉取代码  git pull 最重要的一步,拉完代码后,在切换到master分支上 (想要合并哪个分支就切换哪个分支上merge) 例如 现在要把other分支 往

    2023年04月23日
    浏览(55)
  • git从远程分支合并到本地分支

    获取远程更改 :首先,确保您的本地仓库包含了远程仓库所有分支的最新信息。运行命令: 这里, origin 是远程仓库的默认名称。如果不同,请替换为适当的远程名称。 切换到本地分支 :切换到您想合并更改的本地分支。例如: 将 your-local-branch 替换为您的本地分支名。 合

    2024年01月25日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包