声明,本文是基于:jenkins流水线(jenkinsfile)详解,保姆式教程_我认不到你的博客-CSDN博客,以下内容介绍通过 Commit ID 拉取 git 历史版本
Commit ID (节点号)是什么?(下图是gitee的信息)
我的理解是:我们每次提交git的时候,除了保存我们修改的代码外,也缓存了之前提交的代码,可以用于我们查看更新的内容,而Commit ID 就是为了识别这些历史的提交版本
一、设置字符参数
我这里只展示了一个关于 git 版本的字符信息,也是本文最重要的一个,其他都不是必要的
其他的我设置了
name
和
tag
来规定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>
**:检出指定的提交,例如:5062ac843f2b947733e6a3b105977056821bd352
,5062ac84
。需要注意的是
:如果使用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镜像并运行
版权归原作者 我认不到你 所有, 如有侵权,请联系我们删除。