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

news/2024/4/15 8:20:07

目录

  • 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 版本

修改代码并推送

在这里插入图片描述

GitLab 中项目打 Tag

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

发布 V2.0.0 版本

步骤同上,这里不演示了

在这里插入图片描述

Jenkins 配置 tag 参数

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

添加 Git 参数

在这里插入图片描述

在这里插入图片描述

添加 checkout 命令

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

在这里插入图片描述

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

在这里插入图片描述

修改构建命令配置

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

在这里插入图片描述

修改 SSH 配置

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

在这里插入图片描述

部署 v1.0.0

重新构建工程

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

在这里插入图片描述

构建结果

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

在这里插入图片描述

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

在这里插入图片描述

浏览器访问

在这里插入图片描述

部署 v2.0.0

重新构建工程

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

在这里插入图片描述

在这里插入图片描述

访问

在这里插入图片描述

部署v3.0.0

在这里插入图片描述

在这里插入图片描述

13、流水线任务的Helloworld

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

Hello World

新建流水线任务

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

修改项目脚本

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

SCM 方式维护脚本

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

代码中追加 Jenkinsfile

        每个要构建的项目采用 piple 方式进行构建管理,要求必须要有一个构建脚本,而采用 SCM 脚本维护方式时,默认该脚本文件名为 Jenkinsfile
        在 Idea 中的项目根目录下追加一个名为 Jenkinsfile 的文件。然后再将原来的脚本内容复制到该文件中。为了显示区别,这里对脚本内容进行了简单修改。

pipeline {agent anystages {stage('阶段one') {steps {echo '阶段one构建成功 ---> SUCCESS'}}stage('阶段two') {steps {echo '阶段two构建成功 ---> SUCCESS'}}stage('阶段three') {steps {echo '阶段three构建成功 ---> SUCCESS'}}}
}

在这里插入图片描述

提交修改到 GitLab

在这里插入图片描述

        然后在 GitLab 的项目首页中就可看到多了一个 Jenkinsfile 文件。然后再复制该项目的 http 地址。
在这里插入图片描述

Jenkins 配置

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

在这里插入图片描述

重新构建

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

在这里插入图片描述

14、流水线管理 hellojenkins

        现要将之前的 hellojks 项目通过流水线方式进行构建管理。所以,首先需要修改 Idea 中 的 Jenkinsfile 文件内容,然后再提交到 GitLab

pipeline {agent anystages {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 任务重新构建。

在这里插入图片描述

从GitLab拉取代码

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

在这里插入图片描述

在这里插入图片描述

流水线语法

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

在这里插入图片描述

生成脚本命令

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

更新 Jenkinsfile

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

在这里插入图片描述

重新构建

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

在这里插入图片描述

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

在这里插入图片描述

将项目打为 jar 包

生成脚本命令

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

在这里插入图片描述

更新 Jenkinsfile

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

在这里插入图片描述

重新构建

        对任务进行重新构建,然后便可在最上层的“将项目打为 jar 包”阶段中点击Logs,便 可看到 maven 构建的日志
在这里插入图片描述

代码质量检测

生成脚本命令

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

在这里插入图片描述

更新 Jenkinsfile

        复制生成的流水线脚本,并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中,提交。
在这里插入图片描述

重新构建

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

在这里插入图片描述

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

在这里插入图片描述

构建镜像并推送到 Harbor

Jenkinsfile 中定义环境变量

        在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}

更新 Jenkinsfile

        复制生成的流水线脚本,并将其写入到 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

更新 Jenkinsfile

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

在这里插入图片描述

重新构建

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

其实是双引号变量引起的

在这里插入图片描述

再次重新构建,拉取成功

在这里插入图片描述

浏览器访问成功

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/1008637.html

相关文章

continue有什么作用

学习算法以来&#xff0c;break使用的比较多&#xff0c;continue使用的比较少&#xff0c;只知道break是跳出循环的作用,不知道continue有什么作用。 continue可以跳过本次循环&#xff0c;强制执行下一次循环。 比如这个代码 #include<iostream>using namespace std…

【小沐学NLP】在线AI绘画网站(百度:文心一格)

文章目录 1、简介2、文心一格2.1 功能简介2.2 操作步骤2.3 使用费用2.4 若干示例2.4.1 女孩2.4.2 昙花2.4.3 山水画2.4.4 夜晚2.4.5 古诗2.4.6 二次元2.4.7 帅哥 结语 1、简介 当下&#xff0c;越来越多AI领域前沿技术争相落地&#xff0c;逐步释放出极大的产业价值&#xff0…

Nodejs实现读写文件和文件流

在Nodejs中&#xff0c;文件操作是非常常见的任务之一。它允许我们读取和写入文件&#xff0c;以及处理大型文件而不会消耗太多内存。本篇博文将会首先介绍一下文件和文件流的区别&#xff0c;然后全面介绍如何在Nodejs中实现文件操作和读写&#xff0c;包括使用文件系统模块&a…

Compose(一)搭建桌面应用

Compose(一)桌面应用 1、下载最新版本IDEA: Intellij IDEA 2023.1.5(Community Edition) 2、下载>15的JDK&#xff1a;我是JDK 17 3、创建Compose项目&#xff1a;File->New->Project->Compose Multiplatform->Single platform->DeskTop 4、项目目录自动生成…

MySQL5.7源码编译Debug版本

编译环境Ubuntu22.04LTS 1 官方下载MySQL源码 https://dev.mysql.com/downloads/mysql/?spma2c6h.12873639.article-detail.4.68e61a14ghILh5 2 安装基础软件 cmakeclangpkg-configperl 参考&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/source-installation-prere…

【redis】redis的认识和安装

目录 1.redis是什么2.Redis的特点3.安装redis4.设置远程连接4.1 开启隧道4.2 可视化客户端连接4.3 开启防火墙 5.redis常见数据类型5.1 redis的一些全局命令5.2 数据结构 6. redis的典型应用---缓存&#xff08;cache&#xff09;6.1 使用redis做缓存6.2 缓存穿透&#xff0c;缓…

扩散模型实战(二):扩散模型的发展

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型从最初的简单图像生成模型&#xff0c;逐步发展到替代原有的图像生成模型&#xff0c;直到如今开启 AI 作画的时代&#xff0c;发展速度可谓惊人。下面介绍一下2D图像生成相…

使用 Amazon ECS Anywhere 在边缘部署 Amazon IoT Greengrass

1.概述 亚马逊云科技提供了完备的IoT服务能力&#xff0c;涵盖设备服务、连接和控制服务以及云端分析服务&#xff0c;是快速构建安全可靠、可扩展的 IoT 平台的常见选择。Amazon IoT Greengrass 边缘运行时和云服务&#xff0c;可帮助您在设备上构建、部署和管理 IoT 应用。A…

NativePHP:使用PHP构建跨平台桌面应用的新框架

NativePHP是一个用于使用PHP构建桌面应用的框架。它允许PHP开发人员使用熟悉的工具和技术创建跨平台的原生应用。NativePHP具有一系列易于使用的类&#xff0c;一套用于构建和打包应用程序的工具以及一个静态跨平台PHP运行时。 官网地址&#xff1a;https://nativephp.comNati…

代码随想录算法训练营第五十六天| 583. 两个字符串的删除操作 72. 编辑距离

代码随想录算法训练营第五十六天| 583. 两个字符串的删除操作 72. 编辑距离 一、力扣583. 两个字符串的删除操作 题目链接 思路&#xff1a;相等时不删除&#xff0c;不相等时&#xff0c;两个字符串各删除一个&#xff0c;比大小&#xff0c;删除用步骤少的。 class Soluti…

春秋云镜 CVE-2020-26048

春秋云镜 CVE-2020-26048 CuppaCMS 任意文件上传 靶标介绍 CuppaCMS是一套内容管理系统&#xff08;CMS&#xff09;。 CuppaCMS 2019-11-12之前版本存在安全漏洞&#xff0c;攻击者可利用该漏洞在图像扩展内上传恶意文件&#xff0c;通过使用文件管理器提供的重命名函数的自…

Python(七十)元组的遍历

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

TBB库中实现协程(coroutine)的源码说明

源码请见: https://github.com/oneapi-src/oneTBB/blob/master/src/tbb/co_context.h 在windows系统&#xff0c;TBB(也就是intel 的 oneTBB库)&#xff0c;通过windwos fiber(纤程)来实现协程(coroutine)。 创建一个协程,代码很简洁: inline void create_coroutine(corouti…

网络开发-IO模型

基本概念 I/O即数据的读取&#xff08;接收&#xff09;或写入&#xff08;发送&#xff09;操作 通常用户进程中的一个完整I/O分为两个阶段 用户进程空间<-->内核空间内核空间<-->设备空间&#xff08;磁盘、网卡等&#xff09; I/O分为内存I/O、网络I/O和磁盘…

Linux学习之正则表达式元字符和grep命令

cat /etc/redhat-release看到操作系统的版本是CentOS Linux release 7.6.1810 (Core)&#xff0c;uname -r可以看到内核版本是3.10.0-957.21.3.el7.x86_64。 正则表达式是一种搜索字符串的模式&#xff0c;通俗点理解&#xff0c;也就是普通字符和元字符共同组成的字符集合匹…

【读书笔记】CHAPTER 1: SCALE FROM ZERO TO MILLIONS OF USERS

如果你有一定工作经验&#xff0c;或者开发项目基础&#xff0c;就看这个图就可以。 一个“从零扩展到数百万用户”系统&#xff0c;基本由上述部分组成&#xff1a; web、app&#xff1a;触达用户的设备&#xff08;页面&#xff09; DNS&#xff1a;用户看到的都是域名(ww…

python#django数据库一对一/一对多/多对多

一对一OneToOneField 用户和用户信息 搭建 # 一对一 class TestUser(models.Model): usernamemodels.CharField(max_length32) password models.CharField(max_length32) class TestInfo(models.Model): mick_namemodels.CharField(max_length32) usermode…

BaseMapper的依赖是

在Java开发中&#xff0c;BaseMapper是一个通用的数据库操作接口&#xff0c;通常用于实现数据库的增删改查等操作。它不属于任何特定的库或框架&#xff0c;因此没有特定的代码依赖项。 如果你需要在项目中使用BaseMapper接口&#xff0c;你需要按照你选择的数据库访问框架&a…

python制作小程序制作流程,用python编写一个小程序

这篇文章主要介绍了python制作小程序代码宠物运输&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 1 importtkinter2 importtkinter.messagebox3 importmath4 classJSQ:5 6 7 d…

k8s存储卷

目录 一、为什么要存储卷&#xff1f;二、emptyDir存储卷三、hostPath存储卷四、 nfs共享存储卷五、PVC 和 PV5.1 PV和PVC之间的相互作用遵循的生命周期5.2 PV 的状态5.3 一个PV从创建到销毁的具体流程 六、静态创建pv和pvc资源由pod运用过程6.1 在NFS主机上创建共享目录&#…
最新文章