jenkins pipline 拉取git历史版本

声明,本文是基于:jenkins流水线(jenkinsfile)详解,保姆式教程_我认不到你的博客-CSDN博客,以下内容介绍通过 Commit ID 拉取 git 历史版本

Commit ID (节点号)是什么?(下图是gitee的信息)

我的理解是:我们每次提交git的时候,除了保存我们修改的代码外,也缓存了之前提交的代码,可以用于我们查看更新的内容,而Commit ID 就是为了识别这些历史的提交版本

jenkins pipline 拉取git历史版本_第1张图片

一、设置字符参数

我这里只展示了一个关于 git 版本的字符信息,也是本文最重要的一个,其他都不是必要的

其他的我设置了 nametag 来规定docker制作镜像的名字和版本

jenkins pipline 拉取git历史版本_第2张图片

二、编写流水线代码

1、点击流水线语法

jenkins pipline 拉取git历史版本_第3张图片

2、选择checkout:Check out from version control

再选择git,后面填写自己 git 项目的 url 这个指的不是 网页的那个 url , 是你拉取项目 git clone url 的这个 url ,再添加凭证

jenkins pipline 拉取git历史版本_第4张图片

3、其他不用管,点击生成流水线脚本就行,后面我会讲具体有什么用

jenkins pipline 拉取git历史版本_第5张图片

4、我的 Jenkins pipline 脚本

pipeline {
    // 指定任务在哪个集群节点中执行,any表示任意节点
    agent any
    
        // 声明全局变量,方便后面修改使用
    environment {
                        
        // 源jar名称,mvn打包之后,target目录下的jar包名称
        JAR_NAME='main*'

        // jenkins下的目录
        JENKINS_HOME='/var/jenkins_home/workspace/graduationProject'
    }

    // 工具,这是我在 jenkins 的全局配置配的,之前的博客有讲过
    tools{
        maven 'maven-3.8.4'
    }
    
    
    stages {
        stage('拉取代码') {
            steps {
                // 清除工作空间
                deleteDir()
                // 拉取代码 gitTag 是 之前自定义的 字符串参数
                checkout([$class: 'GitSCM', branches: [[name: '${gitTag}']], extensions: [], userRemoteConfigs: [[credentialsId: '生成的', url: 'git的url']]])
                echo '拉取成功'
            }
        }
        
        stage('执行构建') {
            steps {
            //    sh "mvn --version"
              sh "mvn clean package"
                echo '构建完成'
            }
        }
        
        stage('把jar包构建为docker镜像并运行') {
            steps {
                sh '''#!/bin/bash
                        
                        // 进入 jar 包所在目录 , 好配合 Dockerfile 生成 Docker 镜像
                        cd $JENKINS_HOME/admin/target
                        
                        // 把Dockerfile 复制到 jar 包所在目录 ,好配合 Dockerfile 生成 Docker 镜像
                        cp $JENKINS_HOME/Dockerfile $JENKINS_HOME/admin/target
                        
                        # 修改文件权限  JAR_NAME
                        chmod 755 $JAR_NAME.jar
                        
                        # name 和 tag 是我 又设置的 一个字符参数 ,步骤和 gitTag 是一样的
                        echo "停止容器"
                        docker stop $name
                        
                        echo "删除容器"
                        docker rm $name
                        
                        echo "删除镜像"
                        docker rmi $name
                        
                        # 这个点(.)就是指的本目录下的 Dockerfile 文件,而
                        echo "打包镜像"
                        docker build -t $name:$tag .
                        
                        echo "运行镜像"
                        docker run -d -p 9999:9600 --name $name $name:$tag
                '''
                echo '运行成功'
            }
        }
    }
}

三、2.2中生成参数的讲解

checkout: Check out from version control 文档:Pipeline: SCM Step (jenkins.io)

GitSCM详细参数的可以看官网的教程:scmGit (jenkins.io),虽然官网叫scmGit,但使用的时候要用GitSCM,不然会报错哈

// doGenerateSubmoduleConfigurations 可要可不要
// submoduleCfg 可要可不要
// extensions 也可不要
checkout(
    [$class: 'GitSCM', 
     doGenerateSubmoduleConfigurations: false, 
     submoduleCfg: [], 
     extensions: [[$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true]],
     branches: [[name: '${gitTag}']],
     userRemoteConfigs: [[url: "git的url", credentialsId: "生成的"]]]
)
// 简化
checkout(
    [$class: 'GitSCM', 
     branches: [[name: '${gitTag}']],
     userRemoteConfigs: [[url: "git的url", credentialsId: "生成的"]]]
)
  • GitSCM:指定拉取git的源码(必填

  • doGenerateSubmoduleConfigurations : boolean(可选)

    • 删除了用于测试 git 子模块版本组合的工具。在 git 插件 4.6.0 中删除。忽略用户提供的值,并始终用作其值。false
  • submoduleCfg(可选)

    删除了用于测试 git 子模块版本组合的工具。在 git 插件 4.6.0 中删除。忽略用户提供的值,并始终使用空值。

  • extensions:扩展为不同用途添加新行为或修改现有插件行为,帮助用户更精确地调整插件行为以满足使用需求。参数项比较多,挑一些常用的说明一下。(可选)

    • $class: ‘CloneOption’:用于定义clone时的一些参数配置。
      • depth:int类型,设置浅克隆深度,通常设置为1用于加快拉取,如果想要常规clone,则删除此配置项。
      • noTags:bool类型,取消选择此选项可在没有标签的情况下执行克隆,从而在您只想访问 refspec 指定的内容时节省时间和磁盘空间。
      • reference:String类型,指定包含存储库的文件夹,Git 将在克隆操作期间将其用作参考。如果文件夹在执行克隆的控制器或代理上不可用,则将忽略此选项。
      • shallow:bool类型,执行浅克隆,这样 git 就不会下载项目的历史记录,可以节省时间和磁盘空间。
      • timeout:int类型,指定克隆和获取操作的超时时间(以分钟为单位,默认值:10)。
  • branches:指定要构建的分支相关的标识信息。(必填

    • name:String类型,如果您想跟踪存储库中的特定分支,请指定分支。例如master,一般配合参数传递过来。不过里边不仅仅支持分支名字的定义,还支持如下类型:

      • :指定要检出的分支,例如master。
      • :指定要检出的tag,例如v0.0.1。
      • :检出指定的提交,例如:5062ac843f2b947733e6a3b105977056821bd3525062ac84

      需要注意的是:如果使用commitID进行构建,而且是一个过去的ID,那么depth: 1需要去掉,否则总是会报错。

  • userRemoteConfigs:指定git仓库相关的信息(必填

    • url:String类型,指定 git 存储库的 URL 或路径。以下是有效 git URL 的示例:

      建议统一使用https风格,这样日常使用时便于跳转。

    • credentialsId:String类型,用于检查源的凭据,通常只需要写明凭据的name即可。

    • name:String类型,存储库的 ID,一般情况下用不到。

  • gitTool:String类型,指定git命令的路径,通常情况下,git都是系统全局可用的,因此此参数可忽略。(可选)

四、测试

1、复制 commit id

在这里插入图片描述

2、测试使用分支启动

2.1、master分支

name 和 tag 是生产 Docker 镜像需要的不影响

jenkins pipline 拉取git历史版本_第6张图片

2.2、结果

jenkins pipline 拉取git历史版本_第7张图片

3、测试 commit id 启动

3.1、commit id

jenkins pipline 拉取git历史版本_第8张图片

3.2、结果

jenkins pipline 拉取git历史版本_第9张图片

之前的教程

CICD与DevOps

jenkins使用docker安装保姆级教程(面向小白教程,最新最全,全图文)2022-8-1,不会docker也没关系

使用jenkins+gitee创建docker镜像并运行

本文参考

Jenkins的pipeline实践之GitSCM参数配置项详解原创 - 码农教程 (manongjc.com)

使用jenkins+gitee创建docker镜像并运行

你可能感兴趣的:(jenkins,jenkins,git,运维,docker)