jenkins pipline 拉取git历史版本

news2024/11/25 6:58:53

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

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

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

在这里插入图片描述

一、设置字符参数

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

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

在这里插入图片描述

二、编写流水线代码

1、点击流水线语法

在这里插入图片描述

2、选择checkout:Check out from version control

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

在这里插入图片描述

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

在这里插入图片描述

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,一般配合参数传递过来。不过里边不仅仅支持分支名字的定义,还支持如下类型:

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

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

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

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

      • ssh://git@github.com/github/git.git
      • git@github.com:github/git.git (short notation for ssh protocol)
      • ssh://user@other.host.com/~/repos/R.git (to access the repos/R.git repository in the user’s home directory)
      • https://github.com/github/git.git

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

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

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

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

四、测试

1、复制 commit id

在这里插入图片描述

2、测试使用分支启动

2.1、master分支

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

在这里插入图片描述

2.2、结果

在这里插入图片描述

3、测试 commit id 启动

3.1、commit id

在这里插入图片描述

3.2、结果

在这里插入图片描述

之前的教程

CICD与DevOps

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

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

本文参考

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/555127.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5G配电网专用工业级路由器(电力紧凑型DTU)-智慧电力物联网

随着近年来智能电网的快速发展&#xff0c;它实现了电力系统的监控、数据、电能的统一化智能管理&#xff0c;通过与5G技术结合&#xff0c;助力构建高可靠、高灵活、高效率的配电网络。 5G网络技术具备低时延传输的特点&#xff0c;满足配电网安全、控制的苛刻要求&#xff0…

软件测试面试一定要准备的7个高频面试题(附答案,建议收藏)

收集了很多人在面试时的面试题后&#xff0c;我特意整理出了7个高频出现的面试题&#xff0c;一起来看看。 高频问题1&#xff1a;请自我介绍下&#xff1f; 高频问题2&#xff1a;请介绍下最近做过的项目&#xff1f; 高频问题3&#xff1a;请介绍下你印象深刻的bug&#xff1…

Android网络握手失败问题分析

问题场景 调用某功能云端接口请求&#xff0c;保存如下信息&#xff1a;Web服务通信期间握手期间远程主机关闭连接 javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake分析 由于同一份代码不同机器有的能调用成功&#xff0c;有的调用失…

C#通用的二进制转化为float和double方法

上一篇&#xff0c;我们将32位二进制【或4个字节】转化为float【Real】小数&#xff0c;这次我们使用通用的方法进行二进制转化。 C#中将32位二进制转换为float【Real】十进制类型_斯内科的博客-CSDN博客 二进制转化float(double)方法: //单精度浮点数对应32位 /…

挖出电商店铺详情数据-API接口分享

在今天的互联网时代&#xff0c;电商平台已经成为了我们生活中不可或缺的一部分。淘宝作为全国最大的电商平台之一&#xff0c;其商品信息也越来越丰富&#xff0c;但是如果你想开发一款能够帮助用户购物的应用程序&#xff0c;就必须获取到淘宝的API接口&#xff0c;才能让你的…

【Webpack】前端工程自动化 - require.context实现模块自动化导入

一、介绍 require.context 是基于 webpack 的一个的 api&#xff0c;主要用来实现模块的自动化导入在前端工程中&#xff0c;如果遇到一个文件需要引入很多模块的情况&#xff0c;可以使用这个apirequire.context 会遍历文件夹中的指定文件&#xff0c;然后自动导入&#xff0…

记一次redis主从切换导致的数据丢失与陷入只读状态故障

背景 最近一组业务redis数据不断增长需要扩容内存&#xff0c;而扩容内存则需要重启云主机&#xff0c;在按计划扩容升级执行主从切换时意外发生了数据丢失与master进入只读状态的故障&#xff0c;这里记录分享一下。 业务redis高可用架构 该组业务redis使用的是一主一从&am…

从“0”到“1”!低代码开发和云计算的碰撞,引领数字化转型浪潮!

随着互联网技术的飞速发展&#xff0c;数字化转型已经成为企业转型升级的必经之路。而在数字化转型的过程中&#xff0c;云计算和低代码开发逐渐成为新技术的代表&#xff0c;为企业提供更高效、更灵活的技术支持&#xff0c;让企业赢得更大的竞争优势。 云计算的发展 云计算是…

三阶段项目

DHCP分配不到冲突地址 需要重启 再分配 用这个命令 reset ip pool name vlan40 all ospf&#xff1a; 建立邻居表&#xff1a;报文&#xff1a;hello报文 状态&#xff1a;down int 2-way 选举DR 同步数据库&#xff1a;报文&#xff1a;DD-LSR-LSU-LSACK 状态&#xff…

C语言-printf打印%*s、%.*s与%-.*s的区别

一、简介 在平时的使用中&#xff0c;会经常使用到printf进行打印&#xff0c;而最长使用的方式是printf("%s",string)进行打印。但是有个问题&#xff0c;如果string结尾不是0。那么printf会继续打印&#xff0c;直到遇到0为止。这样就会有内存溢出的风险。显然&…

(三)ArcGIS空间数据的转换与处理——栅格数据变换

ArcGIS空间数据的转换与处理——栅格数据变换 目录 ArcGIS空间数据的转换与处理——栅格数据变换 1.地理配准2.平移3.扭曲4.旋转5.翻转6.重设比例尺7.镜像 数据变换是指对数据进行诸如放大、缩小、翻转、移动、扭曲等几何位置、形状和方位的改变等操作。对于 栅格数据的相应操…

类和对象 - 练习题(C++)

目录 1、求123...n 题目链接&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 2 计算日期到天数转换 题目链接&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 3 日期差值 题目链接&…

人工智能学习07--pytorch18--目标检测:Faster RCNN源码解析(pytorch)

参考博客&#xff1a; https://blog.csdn.net/weixin_46676835/article/details/130175898 VOC2012 1、代码的使用 查看pytorch中的faster-rcnn源码&#xff1a; 在pytorch中导入&#xff1a; import torchvision.models.detection.faster_rcnn即可找到faster rcnn所实现的源…

NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049

首先看一下整体流程,可以看到这里用的PutHbaseJson处理器,把数据导入到 hbase中的 注意这里也可以使用PutSql导入数据,通过phoenix的jdbc驱动,然后把数据利用PutSql处理器导入到 Hbase中,但是我这里的时候报错了,然后一直没解决,所以最后用了PutHbaseJson处理器,把数据存入到…

【LinuxShell】linux防火墙之SNAT策略和DNAT策略

文章目录 前言一、SANT策略1.SNAT策略概述2.SNAT的典型应用环境3.SNAT的工作原理4.SNAT策略的应用SNAT转换前提条件SNAT策略打开方式SNAT实验过程 5.知识扩展 二、DNAT策略1.DNAT策略概述2.DNAT的典型应用环境3.DNAT的工作原理4.DNAT策略的应用DNAT转换前提条件DNAT地址转换方式…

linux管道通信原理

管道&#xff0c;通常指无名管道&#xff0c;是 UNIX 系统IPC&#xff08;InterProcess Communication)最古老的形式。 1、特点: 1.它是半双工的(即数据只能在一个方向上流动) &#xff0c;具有固定的读端和写端 2.它只能用于具有亲缘关系的进程之间的通信(也是子进程或者兄弟进…

python 读写 json,csv,txt,docx,xlsx,xls文件大全

目录 前言一、读写json1.1 读1.2 写1.2.1 list类型写入1.2.2 dict类型写入 二、读写csv2.1 读2.2 写2.2.1 list类型写入2.2.2 dict类型写入 三、读写txt3.1 读3.2 写按行写入&#xff08;手动添加换行符\n&#xff09;按行写入&#xff08;python添加换行符\n&#xff09;3.2.1…

Linux:Firewalld防火墙

Linux&#xff1a;Firewalld防火墙 一、Firewanlld防火墙概述二、Firewalld和Iptables的关系三、Firewalld网络区域3.1 Firewalld 区域的概念&#xff1a;3.2 firewalld防火墙预定义了9个区域3.3 firewalld数据处理流程 四、Firewalld防火墙的配置方法五、Firewalld-config图形…

RHCSA 8考题超级详细解析(2022最新版)本人已过

文章目录 1.配置IP地址2、配置软件仓库3、调试SELinux4、创建用户账户5. 配置cron计划任务6、创建共享目录7、配置NTP时间客户端8. auto自动挂载9、配置文件权限10、配置用户账户11、查找文件12、查找字符串13、 创建归档14、配置sudo提权15、设置密码默认策略16、配置umask值1…