[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]

目录

  • 12、自由风格的CD操作
    • 发布 V1.0.0 版本
      • 修改代码并推送
      • GitLab 中项目打 Tag
    • 发布 V2.0.0 版本
    • Jenkins 配置 tag 参数
      • 添加 Git 参数
      • 添加 checkout 命令
      • 修改构建命令配置
      • 修改 SSH 配置
    • 部署 v1.0.0
      • 重新构建工程
      • 构建结果
    • 部署 v2.0.0
      • 重新构建工程
      • 访问
    • 部署v3.0.0
  • 13、流水线任务的Helloworld
    • Hello World
      • 新建流水线任务
      • 修改项目脚本
    • SCM 方式维护脚本
      • 代码中追加 Jenkinsfile
      • 提交修改到 GitLab
      • Jenkins 配置
      • 重新构建
  • 14、流水线管理 hellojenkins
    • 重新构建
    • 从GitLab拉取代码
      • 流水线语法
      • 生成脚本命令
      • 更新 Jenkinsfile
      • 重新构建
    • 将项目打为 jar 包
      • 生成脚本命令
      • 更新 Jenkinsfile
      • 重新构建
    • 代码质量检测
      • 生成脚本命令
      • 更新 Jenkinsfile
      • 重新构建
    • 构建镜像并推送到 Harbor
      • Jenkinsfile 中定义环境变量
      • 生成脚本命令
      • 更新 Jenkinsfile
      • 重新构建
    • 通知目标服务器
      • 添加端口号参数
      • 生成脚本命令
      • 更新 Jenkinsfile
      • 重新构建

12、自由风格的CD操作

        现在要为 GitLab 中当前的项目主干分支 origin/master 上的代码打上一个 Tag,例如 v1.0.0。 然后修改代码后仍提交到 GitLab 的主干分支 origin/master 上,此时再给项目打上一个 Tag, 例如 v2.0.0。这样, hellojenkins 项目的主干分支 origin/master 上就打上了两个 Tag。
        而 Jenkins 可以根据主干分支 origin/master 上代码的不同 Tag 对项目进行分别构建。实现项目的持续交付与持续部署。

发布 V1.0.0 版本

修改代码并推送

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第1张图片

GitLab 中项目打 Tag

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第2张图片
[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第3张图片

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第4张图片
[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第5张图片

发布 V2.0.0 版本

步骤同上,这里不演示了

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第6张图片

Jenkins 配置 tag 参数

        由于 GitLab 中的项目具有 tag 标签,那么 Jenkins 在进行项目构建时就需要让用户选择准备构建哪个 tag 的项目。所以,需要在 Jenkins 中配置一个Git 参数 tag 作为用户选项。

添加 Git 参数

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第7张图片

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第8张图片

添加 checkout 命令

然后当前页面继续下拉,找到 Build Steps。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第9张图片

        然后点击左上角的三条杠,拖拽到顶部,git checkout $hjtag表示切换到指定的标签,后面可以看到效果

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第10张图片

修改构建命令配置

        然后当前页面继续下拉,找到 Build Steps 中原来添加的构建命令。在所有涉及镜像的命 令中添加上$hjtag 变量引用。然后应用保存。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第11张图片

修改 SSH 配置

        然后当前页面继续下拉,找到“构建后操作”中的 Send build artifacts over SSH 中的 Exec command,将原来写死的版本 latest 修改为$hjtag

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第12张图片

部署 v1.0.0

重新构建工程

        任务首页中再次点击 Build with Parameters 构建项目,发现增加了 hjtag 选项。这里选择 V1.0.0 进行构建

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第13张图片

构建结果

Harbor中新增了 v1.0.0 的镜像。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第14张图片

在目标服务器上新增了 v1.0.0 的镜像,且该容器也运行了起来。

在这里插入图片描述

浏览器访问

在这里插入图片描述

部署 v2.0.0

重新构建工程

        任务首页中再次点击 Build with Parameters 构建项目,发现增加了 hjtag 选项。这里选择V2.0.0进行构建,修改端口号

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第15张图片

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第16张图片

访问

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第17张图片

部署v3.0.0

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第18张图片

在这里插入图片描述

13、流水线任务的Helloworld

        流水线是 Jenkins 对项目构建过程的一种管理方式。其将项目的构建过程按照构建阶段进行非常清晰的划分显示。用户可以通过可视化操作方式来轻松查看、管理构建过程中的各个阶段。

Hello World

新建流水线任务

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第19张图片

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第20张图片

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第21张图片

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第22张图片

点击立即构建后,就会看到“阶段视图”。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第23张图片

修改项目脚本

        为了更好的理解脚本,这里对 hello workd 项目的脚本进行修改。

在这里插入图片描述

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第24张图片

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第25张图片

SCM 方式维护脚本

       SCM(Software Configuration Management)是指软件配置管理,用于管理和协调软件开发过程中的代码、文档和其他相关元素

代码中追加 Jenkinsfile

        每个要构建的项目采用 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'
            }
        }

    }
}

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第26张图片

提交修改到 GitLab

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第27张图片

        然后在 GitLab 的项目首页中就可看到多了一个 Jenkinsfile 文件。然后再复制该项目的 http 地址。
[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第28张图片

Jenkins 配置

       在 Jenkins 中流水线任务的“配置”中,流水线选择 SCM 方式SCM 选择 Git,然后再 将刚才复制的 GitLab 仓库地址粘贴到这里

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第29张图片

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第30张图片

重新构建

        重新立即构建后会发现,除了这些阶段名称更新为了修改过的外,还新增了一个新的阶段 Checkout SCM,即从 SCM 中检出脚本

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第31张图片

14、流水线管理 hellojenkins

        现要将之前的 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'
            }
         }

    }
}

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第32张图片

重新构建

        在 Jenkins 中对 hello_pipeline 任务重新构建。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第33张图片

从GitLab拉取代码

        定义Git参数,在 Jenkins 中的 pipeline 任务中定义一个 Git 参数,该参数仍为发布的 tag

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第34张图片

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第35张图片

流水线语法

        在 pipeline 脚本文件中如何定义具体的命令语句来实现“从 GitLab 位取代码”“将项目 打为 jar 包”等任务?
        pipeline 脚本文件是具有其特殊的语法的。不过,通过当前 pipeline 任 务中的流水线语法,可自动生成符合 pipeline 脚本语法的脚本语句。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第36张图片

生成脚本命令

下面要通过流水线语法生成“从 GitLab 拉取代码”的语句。

首先从 GitLab 的项目中复制项目地址。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第37张图片

        然后在 Jenkins 的流水线语法中选择“checkout:Check out from version control”,并将复 制来的 GitLab 的项目地址粘贴到Repository URL中。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第38张图片

        点击“生成流水线脚本”,便可以下面的文本框中自动生成相应脚本语句。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第39张图片

更新 Jenkinsfile

        复制生成的流水线脚本,并将其写入到 Idea 中的 Jenkinsfile 的相应 stage{}中,并提交到 GitLab。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第40张图片

重新构建

对任务进行重新构建,发现可以对构建的版本进行选择了。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第41张图片

拉取代码”阶段中点击 Logs,便可看到拉取的日志。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第42张图片

将项目打为 jar 包

生成脚本命令

        在 Jenkins 中通过流水线脚本语法生成“将项目打为 jar 包”的脚本语句

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第43张图片

更新 Jenkinsfile

        复制生成的流水线脚本,并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中,提交。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第44张图片

重新构建

        对任务进行重新构建,然后便可在最上层的“将项目打为 jar 包”阶段中点击Logs,便 可看到 maven 构建的日志
[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第45张图片

代码质量检测

生成脚本命令

        在 Jenkins 中通过流水线脚本语法生成“代码质量检测”的脚本语句。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第46张图片

更新 Jenkinsfile

        复制生成的流水线脚本,并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中,提交。
[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第47张图片

重新构建

        对任务进行重新立构建,然后便可在最上层的“通过 SonarQube 进行代码检测”阶段中 点击 Logs,便可看到 SonarQube 代码检测的日志

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第48张图片

        然后在 SonarQube 管理页面中就可看到新增加了一个 hello_pipeline 的项目了。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第49张图片

构建镜像并推送到 Harbor

Jenkinsfile 中定义环境变量

        在Idea中的Jenkinsfile文件中添加环境变量,这些变量将在后面生成的脚本命令中使用。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第50张图片

 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}

更新 Jenkinsfile

        复制生成的流水线脚本,并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中,提交。
[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第51张图片

重新构建

        对任务进行重新立构建,然后便可在最上层的“构建镜像并推送到 Harbor”阶段中点 击 Logs,便可看到推送镜像到 Harbor 的日志。
[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第52张图片

此时在 Jenkins主机中就可看到出现了 hello_pipeline 的镜像。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第53张图片

        此时查看 harbor 的管理页面,可以看到在 jks 项目中新增加了 hello_pipeline 的仓库, 且仓库中具有 v1.0.0 的镜像
[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第54张图片

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第55张图片

通知目标服务器

添加端口号参数

        为了使用户可以随时指定容器对外暴露的参数,这里在 Jenkins 当前任务下的“配置” 中“参数化构建过程”中添加一个字符参数

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第56张图片

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第57张图片

生成脚本命令

        在 Jenkins 中通过流水线脚本语法生成“通知目标服务器执行 deploy 脚本”的脚本语句。 选择 sshPublisher:Send build artifacts over SSH,并从中找到目标服务器

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第58张图片

        然后在下面的Exec command中键入要执行的命令,生成流水线脚本。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第59张图片

deploy.sh $harbor_host $harbor_repo $JOB_NAME $ptag 8080 $export_port

更新 Jenkinsfile

        复制生成的流水线脚本,并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中,提交到GitLab。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第60张图片

重新构建

        对任务进行重新构建,然后便可在最上层的“通知目标服务器”阶段中点击 Logs,便可看到推送镜像到 Harbor 的日志。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第61张图片

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第62张图片

        查看目标服务器中的镜像,发现相应镜像没有从 harbor 上拉取下来。

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第63张图片

其实是双引号变量引起的

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第64张图片

再次重新构建,拉取成功

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第65张图片

浏览器访问成功

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第66张图片
[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]_第67张图片

你可能感兴趣的:(docker,ci/cd,jenkins,容器,运维)