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

news2024/11/16 21:32:54

目录

  • 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 any

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

在这里插入图片描述

从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.coloradmin.cn/o/838355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Delphi Architect Crack,部署支持Swagger

Delphi Architect Crack,部署支持Swagger 单一代码库-用更少的编码工作为所有主要平台创建应用程序。写一次,到处编译。 Windows-使用最新的用户界面控件、WinRT API和HighDPI相关功能,使Windows的VCL应用程序现代化。 远程桌面-使用改进的VCL和IDE远程桌…

Java问题排查工具Arthas安装教程

Java问题排查工具Arthas入门教程 什么是阿里Arthas? 在生产环境经常遇到大量的日志,同时还有一些性能问题,需要进行进程分析,排查,有时候确实比较花时间,所以可以借助一些开源的框架来实现,Art…

全志F1C200S嵌入式驱动开发(从DDR中截取内存)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 linux内核起来的时候,不一定所有的内存都是分配给linux使用的。有的时候,我们是希望能够截留一部分内存的。为什么保留这部分内存呢?这里面可以有很多的用途。比如说,第一,如果…

Python GUI编程(Tkinter)

Python GUI编程(Tkinter) Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows …

Qt下载慢/无法下载解决方式

文章目录 一. Qt在线安装下载二. 安装方式 一. Qt在线安装下载 官网下载:https://www.qt.io/download清华源下载:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/ 二. 安装方式 进入下载好的目录 在目录栏输入CMD&…

vue+element中如何设置单个el-date-picker开始时间和结束时间关联

功能&#xff1a;选了开始时间&#xff0c;则结束时间只能选择开始时间之后的&#xff1b;选了结束时间&#xff0c;则开始时间只能选择结束时间之前的 重点是picker-options属性 图示&#xff1a; 代码展示: // body 内部<el-form-item><el-date-pickerv-model&qu…

vscode无法连接远程服务器的可能原因:远程服务器磁盘爆了

vscode输入密码后一直等待&#xff0c;无法进入远程服务器终端&#xff1a; 同时Remote-SSH输出包含以下内容 在日志中的以下几个部分&#xff1a; [17:15:05.529] > wget download failed 这表明VS Code尝试在远程服务器上下载VS Code服务器时失败了。> Cannot write…

程序环境和预处理(含C语言程序的编译+链接)--1

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f43b;‍❄个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN…

嵌入式面试刷题(day3)

文章目录 前言一、怎么判断两个float是否相同二、float数据可以移位吗三、数据接收和发送端大小端不一致怎么办四、怎么传输float类型数据1.使用联合进行传输2.使用字节流3.强制类型转换 总结 前言 本篇文章我们继续讲解嵌入式面试刷题&#xff0c;给大家继续分享嵌入式中的面…

docker search 镜像报错: connect: no route to host (桥接模式配置静态IP)

如下 原因 可能有多种&#xff1a; ① 没有开放防火墙端口 ② ip地址配置有误 解决 我是因为虚拟机采用了桥接模式&#xff0c;配置静态ip地址有问题。 先确认虚拟机采用的是 桥接模式&#xff0c;然后启动虚拟机。 1、打开命令行&#xff0c;输入下面指令&#xff0c;打开…

【Docker】Docker容器数据卷、容器卷之间的继承和DockerFIle的详细讲解

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…

大数据教材推荐|Python数据挖掘入门、进阶与案例分析

主 编&#xff1a; 卢滔&#xff0c;张良均&#xff0c;戴浩&#xff0c;李曼&#xff0c;陈四德 出版社&#xff1a; 机械工业出版社 内容提要 本书从实践出发&#xff0c;结合11个“泰迪杯”官方推出的赛题&#xff0c;按照赛题的难易程度进行排序&#xff0c;由浅入深…

Meta开源AI音频和音乐生成模型

在过去的几年里&#xff0c;我们看到了AI在图像、视频和文本生成方面的巨大进步。然而&#xff0c;音频生成领域的进展却相对滞后。MetaAI这次再为开源贡献重磅产品&#xff1a;AudioCraft&#xff0c;一个支持多个音频生成模型的音频生成开发框架。 AudioCraft开源地址 开源地…

阿里为啥禁止三表Join关联?

阿里出过一个《Java开发手册》&#xff0c;上面有一条规约是禁止超过三张表的join。 为什么要禁止&#xff0c;其实最主要的原因就是join的效率比较低。 mysql只有一种表连接类型:嵌套循环连接(nested-loop)&#xff0c;不支持排序-合并连接(sort-merge join)与散列连接(hash …

【动态规划刷题 5】 最小路径和地下城游戏

最小路径和 链接: 64. 最小路径和 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2,1]] 输…

《OWASP代码审计》学习——跨站脚本注入(XSS)

一、跨站脚本概述 1.什么是跨站脚本 跨站点脚本(XSS)是一种编码注入漏洞。它通常出现在 web 应用程序中。XSS 使攻击者能够向其他用户浏览的网页中注入恶意内容。XSS 允许攻击者绕过访问控制&#xff0c;它是 OWASP Top10 最常见的漏洞之一。XSS 是网络服务器上的第二大漏洞。…

CSS元素的显示模式

1、现在我想做成小米左侧边栏这样的效果&#xff0c;该怎么做呢&#xff1f; 2、小米商城触碰之后会显示出新的商品案例 3、一碰到之后会出现这个列表 4、这里涉及到了元素显示模式&#xff1a; 5、用人进行划分可以分为男人和女人&#xff0c;根据男人和女人的特性进行相应的…

Leetcode-每日一题【剑指 Offer 17. 打印从1到最大的n位数】

题目 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 示例 1: 输入: n 1输出: [1,2,3,4,5,6,7,8,9] 说明&#xff1a; 用返回一个整数列表来代替打印 n 为正整数 解题思路 前置知识 M…

ChatGenTitle:使用百万arXiv论文信息在LLaMA模型上进行微调的论文题目生成模型

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…

2024年中国计量大学MBA项目招生信息全面了解

2024年全国管理类硕士联考备考已经到了最火热的阶段&#xff0c;不少考生开始持续将注意力集中在备考的规划中&#xff01;杭州达立易考教育整合浙江省内的MBA项目信息&#xff0c;为大家详细梳理了相关报考参考内容&#xff0c;方便大家更好完成择校以及针对性的备考工作。本期…