声明,本文是基于: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镜像并运行