现在要为 GitLab 中当前的项目主干分支 origin/master 上的代码打上一个 Tag,例如 v1.0.0。
然后修改代码后仍提交到 GitLab 的主干分支 origin/master 上,此时再给项目打上一个 Tag, 例如 v2.0.0。
这样, hellojenkins 项目的主干分支 origin/master 上就打上了两个 Tag。
而 Jenkins 可以根据主干分支 origin/master 上代码的不同 Tag 对项目进行分别构建。实现项目的持续交付与持续部署。
步骤同上,这里不演示了
由于 GitLab 中的项目具有 tag 标签
,那么 Jenkins 在进行项目构建时就需要让用户选择准备构建哪个 tag 的项目。所以,需要在 Jenkins 中配置一个Git 参数 tag
作为用户选项。
然后当前页面继续下拉,找到 Build Steps。
然后点击左上角的三条杠,拖拽到顶部,git checkout $hjtag
表示切换到指定的标签,后面可以看到效果
然后当前页面继续下拉,找到 Build Steps
中原来添加的构建命令。在所有涉及镜像的命 令中添加上$hjtag
变量引用。然后应用保存。
然后当前页面继续下拉,找到“构建后操作”中的 Send build artifacts over SSH
中的 Exec command
,将原来写死的版本 latest 修改为$hjtag
。
任务首页中再次点击 Build with Parameters
构建项目,发现增加了 hjtag
选项。这里选择 V1.0.0
进行构建
Harbor中新增了 v1.0.0 的镜像。
在目标服务器上新增了 v1.0.0 的镜像,且该容器也运行了起来。
浏览器访问
任务首页中再次点击 Build with Parameters
构建项目,发现增加了 hjtag 选项
。这里选择V2.0.0
进行构建,修改端口号
流水线是 Jenkins 对项目构建过程的一种管理方式。其将项目的构建过程按照构建阶段进行非常清晰的划分显示
。用户可以通过可视化操作方式
来轻松查看、管理构建过程中的各个阶段。
点击立即构建后,就会看到“阶段视图”。
为了更好的理解脚本,这里对 hello workd 项目的脚本进行修改。
SCM(Software Configuration Management)是指软件配置管理
,用于管理和协调软件开发过程中的代码、文档和其他相关元素
每个要构建的项目采用 piple 方式进行构建管理
,要求必须要有一个构建脚本
,而采用 SCM 脚本维护方式时,默认该脚本文件名为 Jenkinsfile
。
在 Idea 中的项目根目录下追加一个名为 Jenkinsfile 的文件。然后再将原来的脚本内容复制到该文件中。为了显示区别,这里对脚本内容进行了简单修改。
pipeline {
agent any
stages {
stage('阶段one') {
steps {
echo '阶段one构建成功 ---> SUCCESS'
}
}
stage('阶段two') {
steps {
echo '阶段two构建成功 ---> SUCCESS'
}
}
stage('阶段three') {
steps {
echo '阶段three构建成功 ---> SUCCESS'
}
}
}
}
然后在 GitLab 的项目首页中就可看到多了一个 Jenkinsfile 文件。然后再复制该项目的 http 地址。
在 Jenkins 中流水线任务的“配置”中,流水线选择 SCM 方式
,SCM 选择 Git
,然后再 将刚才复制的 GitLab 仓库地址
粘贴到这里
重新立即构建后会发现,除了这些阶段名称更新为了修改过的外,还新增了一个新的阶段 Checkout SCM,即从 SCM 中检出脚本
。
现要将之前的 hellojks 项目通过流水线方式进行构建管理。所以,首先需要修改 Idea 中 的 Jenkinsfile 文件内容,然后再提交到 GitLab
。
pipeline {
agent any
stages {
stage('从Gitlab拉取代码') {
steps {
echo '从Gitlab拉取代码 ---> SUCCESS'
}
}
stage('将项目打为jar包') {
steps {
echo '将项目打为jar包 ---> SUCCESS'
}
}
stage('代码质量检测') {
steps {
echo '代码质量检测 ---> SUCCESS'
}
}
stage('构建并推送镜像到Harbor') {
steps {
echo '构建并推送镜像到Harbor ---> SUCCESS'
}
}
stage('通知目标服务器') {
steps {
echo '通知目标服务器 ---> SUCCESS'
}
}
}
}
在 Jenkins 中对 hello_pipeline 任务重新构建。
定义Git参数
,在 Jenkins 中的 pipeline 任务中定义一个 Git 参数,该参数仍为发布的 tag
。
在 pipeline 脚本文件中如何定义具体的命令语句来实现“从 GitLab 位取代码”“将项目 打为 jar 包”
等任务?
pipeline 脚本文件是具有其特殊的语法的。不过,通过当前 pipeline 任 务中的流水线语法,可自动生成符合 pipeline 脚本语法的脚本语句。
下面要通过流水线语法生成“从 GitLab 拉取代码”的语句。
首先从 GitLab 的项目中复制项目地址。
然后在 Jenkins 的流水线语法中选择“checkout:Check out from version control”
,并将复 制来的 GitLab 的项目地址粘贴到Repository URL
中。
点击“生成流水线脚本”,便可以下面的文本框中自动生成相应脚本语句。
复制生成的流水线脚本,并将其写入到 Idea 中的 Jenkinsfile 的相应 stage{}中
,并提交到 GitLab。
对任务进行重新构建,发现可以对构建的版本进行选择了。
拉取代码”阶段中点击 Logs,便可看到拉取的日志。
在 Jenkins 中通过流水线脚本语法生成“将项目打为 jar 包”的脚本语句
复制生成的流水线脚本,并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中
,提交。
对任务进行重新构建,然后便可在最上层的“将项目打为 jar 包”阶段
中点击Logs
,便 可看到 maven 构建的日志
。
在 Jenkins 中通过流水线脚本语法生成“代码质量检测”的脚本语句。
复制生成的流水线脚本,并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中
,提交。
对任务进行重新立构建,然后便可在最上层的“通过 SonarQube 进行代码检测”阶段中 点击 Logs
,便可看到 SonarQube 代码检测的日志
。
然后在 SonarQube 管理页面中就可看到新增加了一个 hello_pipeline
的项目了。
在Idea中的Jenkinsfile文件中添加环境变量
,这些变量将在后面生成的脚本命令中使用。
environment {
harbor_user='admin'
harbor_password='Harbor12345'
harbor_host='192.168.40.138:8888'
harbor_repo='jks'
}
在 Jenkins 中通过流水线脚本语法生成“推送镜像到 Harbor”的脚本语句
。脚本语句中使用的是 Jenkinsfile 中定义的环境变量
。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DzTj8Hmi-1691236468832)
注意:这里是target目录下的jar包,没有重新截图了
mv target/*.jar docker/
cd docker
docker build -t ${JOB_NAME}:${ptag} .
docker login -u ${harbor_user} -p ${harbor_password} ${harbor_host}
docker tag ${JOB_NAME}:${ptag} ${harbor_host}/${harbor_repo}/${JOB_NAME}:${ptag}
docker image prune -f
docker push ${harbor_host}/${harbor_repo}/${JOB_NAME}:${ptag}
复制生成的流水线脚本,并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中
,提交。
对任务进行重新立构建,然后便可在最上层的“构建镜像并推送到 Harbor”阶段中点 击 Logs
,便可看到推送镜像到 Harbor 的日志。
此时在 Jenkins主机
中就可看到出现了 hello_pipeline
的镜像。
此时查看 harbor 的管理页面,可以看到在 jks 项目中新增加了 hello_pipeline 的仓库, 且仓库中具有 v1.0.0 的镜像
。
为了使用户可以随时指定容器对外暴露的参数
,这里在 Jenkins 当前任务下的“配置” 中“参数化构建过程”中添加一个字符参数
。
在 Jenkins 中通过流水线脚本语法生成“通知目标服务器执行 deploy 脚本”的脚本语句
。 选择 sshPublisher:Send build artifacts over SSH,并从中找到目标服务器
。
然后在下面的Exec command
中键入要执行的命令,生成流水线脚本。
deploy.sh $harbor_host $harbor_repo $JOB_NAME $ptag 8080 $export_port
复制生成的流水线脚本,并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中
,提交到GitLab。
对任务进行重新构建,然后便可在最上层的“通知目标服务器”阶段中点击 Logs
,便可看到推送镜像到 Harbor 的日志。
查看目标服务器中的镜像,发现相应镜像没有从 harbor 上拉取下来。
其实是双引号变量引起的
再次重新构建,拉取成功
浏览器访问成功