云原生(六)、CICD - Jenkins快速入门
Jenkuns快速入门
一、CICD概述
CICD是持续集成(Continuous Integration)和持续部署(Continuous Deployment)的缩写。它是软件开发中的一种流程和方法论,旨在通过自动化的方式频繁地将代码集成到共享存储库中,并自动部署到生产环境中。
-
持续集成(Continuous Integration):开发者将代码频繁地合并到共享存储库中,然后自动运行测试以确保代码的质量和稳定性。这有助于发现和解决潜在的问题,并促使开发团队保持代码库的健康状态。
-
持续部署(Continuous Deployment):一旦代码通过了持续集成的测试,并且达到了部署到生产环境的标准,就可以自动地将代码部署到生产环境中,以供最终用户访问和使用。这可以大大减少发布新功能或修复bug的时间,提高交付速度。
传统软件开发流程:
1、项目经理给你们分配模块开发任务给开发人员(项目经理-开发)
2、每个模块单独开发完毕(开发),单元测试(测试)
3、开发完毕后,集成部署到服务器(测试、运维)
4、测试出现问题,提交bug,开发继续修复bug(开发)
5、bug修改完毕,继续提交测试…
问题:
1、模块之间依赖负载,集成部署经常出问题
2、测试人员经常在等待…
3、按时交付也会出问题
思考:
1、测试时间能否提前(开发一提交代码,问题就能直接暴露出来:自动化测试)
2、人工集成部署(能否使用自动化工具构建)
持续集成
持续集成的好处:
1、自动化集成部署,提高了集成效率。
2、更快的修复问题。
3、更快的进行交付。
4、提高了产品质量。
DevOps
DevOps是一种软件开发和IT运维(Operations)的方法论或文化。它旨在通过改进开发团队和运维团队之间的沟通、协作和集成,以实现更快、更可靠的软件交付。DevOps强调自动化、持续集成(Continuous Integration)、持续交付(Continuous Delivery)、持续部署(Continuous Deployment)等实践,以便将软件的开发、测试和部署过程整合到一个无缝的流程中。通过DevOps实践,团队可以更快地响应用户需求,更快地交付软件,并且更容易地应对市场变化和技术挑战。
二、GitLab安装使用
1、安装
# 拉取镜像
docker pull gitlab/gitlab-ce#创建目录
mkdir -p /home/gitlab/etc
mkdir -p /home/gitlab/data
mkdir -p /home/gitlab/logs#启动容器
docker run --name="gitlab" -d --hostname=139.9.199.4 -p 4443:443 -p 8888:80 -p 8022:22 -v /home/gitlab/etc:/etc/gitlab -v /home/gitlab/data:/var/opt/gitlab -v /home/gitlab/logs:/var/log/gitlab --privileged=true gitlab/gitlab-ce:latest#查看启动日志
docker logs -f gitlab#配置修改
#cd /home/gitlab/etc/gitlab.rb
external_url 'http://139.9.199.4'# /home/gitlab/data/gitlab-rails/etc/gitlab.yaml#查看初始密码
cat /home/gitlab/etc/initial_root_passwordPassword: BjIDRuFBLJpw8RqsbR//VOBAOYkE4nu0eN7mM/FLLJs=
使用用户名root+上面获得的密码登录
登录成功后先修改密码,初始密码只保留24h
2、使用
直接像使用git一样使用
yum update -y
yum install git -y
git version
由于centos停止维护,安装git时,镜像源的安装存在问题。解决方案
#克隆项目git config --global user.name "Administrator"git config --global user.email "admin@exmple.com"git config --global credential.helper storegit clone http://139.9.199.4:8888/root/base-test.gitcd base-testtouch README.mdgit add .git commit -m "update"git push -u origin main
三、Jenkins
中文官方文档
Jenkins是一个开源的持续集成(CI)和持续部署(CD)工具,用于自动化软件开发过程中的构建、测试和部署。它允许开发团队在一个可视化的界面中设置和管理工作流程,以确保代码的频繁集成和部署。
Jenkins的主要功能包括:
-
持续集成:Jenkins可以定期或在代码提交时触发构建过程,自动编译源代码、运行测试并生成构建报告。
-
持续部署:通过Jenkins可以设置自动化的部署流程,一旦代码通过了测试,就可以自动部署到生产环境中。
-
插件生态系统:Jenkins具有丰富的插件生态系统,使得它可以与各种不同的工具和技术集成,如版本控制系统(如Git、SVN)、构建工具(如Maven、Gradle)、测试框架(如JUnit、Selenium)等等。
-
可扩展性:Jenkins是一个可扩展的平台,可以根据具体的需求定制和扩展功能。
-
可视化界面:Jenkins提供了直观的用户界面,使得用户能够轻松地查看和管理构建和部署任务。
Jenkins是一个强大而灵活的工具,可以帮助开发团队实现持续集成和持续部署,从而提高软件交付的质量和效率。
1、使用docker安装jenkins
docker run -u root --rm -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
- 根据提示获取登录密码
cat /var/jenkins_home/secrets/initialAdminPassword
- 安装推荐插件
安装前,需要更换配置文件中的外网访问地址
#进入目录 cd /var/jenkins_home/updates
#替换default.json的外网地址
sed -i 's/https:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.jsonsed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
修改完成后开始安装
- 部分插件安装成功,直接继续,填写信息。保存并完成
- 不要重启,直接刷新页面,重启容器会挂掉
2、安装插件 gitlab docker
3、纠正未成功安装的插件
纠正完成后重启容器即可。
四、JenKins使用
1、使用案例: Hello-JenKins
新建流水线项目,添加脚本
//最外层的 pipeline
pipeline {
//agent环境agent {docker 'maven;3.3.3'}//步骤的集合stages {//分步骤stage('build'){steps{sh 'mvn --version'}}stage('Test'){steps{sh 'echo "test"'}}}
}
通过菜单栏的 Blue Ocean查看具体信息。
2、超时重试
开发与测试常用到的命令。retry、timeout
pipeline {agent anystages {stage('build'){steps{retry(3){sh './start.sh'}timeout(time:3,unit:'MINUTES'){//未来会有许多的测试脚本sh './health-check.sh'}}}}
}
3、钩子函数
生命周期函数,当pipeline执行到某一个步骤时,做一些特殊的事件。post
pipeline {agent anystages {stage('TEST'){steps{retry(3){sh ‘echo "fail";exit 1'} }}post {always {echo 'always'}success{echo 'success'}failure{echo 'failure'}unstable{echo 'unstable'}changed{echo 'changed'}}}
}
4、定义执行环境
您可能已经注意到每个示例中的 agent指令。agent 指令告诉jenkins在哪里以及如何执行Pipeline或者Pipeline子集。正如您所预料的, 所有的Pipeline都需要 agent 指令,
在执行引擎中,指令会引起以下操作的执行:
-
所有在块block中的步骤steps会被]enkins保存在一个执行队列中。 一旦一个执行器 executor 是可以利用的,这些步骤将会开始执行。
-
一个工作空间 workspace 将会被分配,工作空间中会包含来自远程仓库的文件和一些用于Pipelin的工作文件
-
工作目录为 /var/jenkins_home/workspace
在Pipeline中可以很容易的运行 Docker 镜像和容器。 Pipeline可以定义命令或者应用运行需要的环境和工具,不需要在执行代理中手动去配置各种各样的系统工具和依赖。 这种方式可以让你使用 Docker容器工具包 中的任何工具
pipeline {agent anystages {//执行步骤dockerfiledocekrcomposeshell其他程序的相关命令。。。}
}
例子
pipeline {agent {docker {image 'node:7-alpine'}}stages {//执行步骤stage('TEST'){steps {sh 'node --version'}}}
}
5、环境变量
配置全局的环境变量environment。这个配置在所有的step中都可以使用。
pipeline {agent anyenvironment {DB_PSD = '123456'DB_ENGINE = 'sqlite'}stages {//执行步骤stage('Build'){steps {sh 'printenv'}}}
}
6、多步骤
pipeline {agent anyenvironment {DB_PSD = '123456'DB_ENGINE = 'sqlite'}stages {//项目构建stage('Build'){steps {//git、dockerfile等构建工作。。。echo 'Build'}}//项目测试stage('Test'){steps {//shell测试、web测试、压测。。。echo 'Test'}}//部署stage('Deploy'){steps {//访问、集群、分布式。。。echo 'Deploy'}}}
}
会产生多个步骤的进程任务,方便管理与排查
7、人工确认
人工确认后,完成上线发布的工作。input
pipeline {agent anyenvironment {DB_PSD = '123456'DB_ENGINE = 'sqlite'}stages {//项目构建stage('Build'){steps {//git、dockerfile等构建工作。。。echo 'Build'}}//项目测试stage('Test'){steps {//shell测试、web测试、压测。。。echo 'Test'}}//人工确认stage('isSure'){steps {input "是否确认发布上线"}}//部署stage('Deploy'){steps {//访问、集群、分布式。。。echo 'Deploy'}}}
}
五、WebHook触发器
通过以上的步骤。我们有了自己的gitlab,也学会了jenkins的CICD。现在,我们想做的是,一旦我的代码提交,jenkins就自动触发服务更新。
首先关闭防火墙,使容器之间互通! system stop firewalld
1、构建触发器,自动触发构建!有一个webhook触发器!
逻辑:提交代码后,jenkins能够感知到代码提交了,流水线工程(项目打包,构建镜像,运行容器,测试接口,人工确认,部署上线)就自动执行
2、创建一个jenkins流水线。配置gitlab的触发器,生成Secret token
在gitlab的项目中设置项目的webhook
成功后,可以在项目中看到多出一个钩子
测试
通过gitlab钩子中的测试push操作,会发现jenkins自动触发了构建。并且描述为Started by GitLab push by Administrator
六、官方流水线项目
官方文档 :https://www.jenkins.io/zh/doc/tutorials/build-a-java-app-with-maven/
1、clone 仓库到本地,然后推倒我们自己的gitlab中
git clone https://github.com/jenkins-docs/simple-java-maven-app.git
2、重复上一小节webhook的内容,实现一个流水线工程。
3、添加脚本代码时,不需要再自己编写,直接使用仓库中的jenkins脚本,指定jenkinsfile文件的路径。
4、添加jenkins脚本的git地址时,会出现权限问题,需要在jenkins全局配置中添加gialab的token凭证。
#jenkins脚本文件的内容
pipeline {agent {docker {image 'maven:3.9.0'args '-v /root/.m2:/root/.m2'}}stages {stage('Build') {steps {sh 'mvn -B -DskipTests clean package'}}stage('Test') {steps {sh 'mvn test'}post {always {junit 'target/surefire-reports/*.xml'}}}stage('Deliver') {steps {sh './jenkins/scripts/deliver.sh'}}}
}
相关文章:
云原生(六)、CICD - Jenkins快速入门
Jenkuns快速入门 一、CICD概述 CICD是持续集成(Continuous Integration)和持续部署(Continuous Deployment)的缩写。它是软件开发中的一种流程和方法论,旨在通过自动化的方式频繁地将代码集成到共享存储库中…...
基于java+springboot+vue实现的付费自习室管理系统(文末源码+Lw+ppt)23-400
摘 要 付费自习室管理系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了springboot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括:个人信息修改,对用户…...
【JavaParser笔记02】JavaParser解析Java源代码中的类字段信息(javadoc注释、字段名称)
这篇文章,主要介绍如何使用JavaParser解析Java源代码中的类字段信息(javadoc注释、字段名称)。 目录 一、JavaParser依赖库 1.1、引入依赖 1.2、获取类成员信息 (1)案例代码 <...
Spring IoCDI(3)
DI详解 接下来学习一下依赖注入DI的细节. 依赖注入是一个过程, 是指IoC容器在创建Bean时, 去提供运行时所依赖的资源, 而资源指的就是对象. 在之前的案例中, 使用了Autowired这个注解, 完成了依赖注入这个操作. 简单来说, 就是把对象取出来放到某个类的属性中. 在一些文章中…...
保研线性代数机器学习基础复习1
1.什么是代数(algebra)? 为了形式化一个概念,构建出有关这个概念的符号以及操作符号的公式。 2.什么是线性代数(linear algebra)? 一项关于向量以及操作向量的公式的研究。 3.举一些向量的例子&#x…...
js绑定事件的方法
在JavaScript中,绑定事件的方法主要有以下几种: HTML属性方式:直接在HTML元素中使用事件属性来绑定事件。 html<button onclick"alert(Hello World!)">Click Me</button> DOM属性方式:通过JavaScript代码…...
是德科技keysight N9000B 信号分析仪
181/2461/8938产品概述: 工程的内涵就是将各种创意有机地联系起来,并解决遇到的问题。 CXA 信号分析仪具有出色的实际性能,它是一款出类拔萃、经济高效的基本信号表征工具。 它的功能十分强大,为一般用途和教育行业的用户执行测试…...
软考 - 系统架构设计师 - 架构风格
软件架构风格是指描述特定软件系统组织方式的惯用模式。组织方式描述了系统的组成构件,以及这些构件的组织方式,惯用模式指众多系统所共有的结构和语义。 目录 架构风格 数据流风格 批处理架构风格 管道 - 过滤器架构风格 调用 / 返回风格 主程序…...
CleanMyMac X2024专业免费的国产Mac笔记本清理软件
非常高兴有机会向大家介绍CleanMyMac X 2024这款专业的Mac清理软件。它以其强大的清理能力、系统优化效果、出色的用户体验以及高度的安全性,在Mac清理软件市场中独树一帜。 CleanMyMac X2024全新版下载如下: https://wm.makeding.com/iclk/?zoneid49983 一、主要…...
ES6 模块化操作
ES6模块化主要有两个操作:import 和 export 如果在html文件的script中引用模块的话,要设置<script type"module"> 一种导入导出方法: a.js//分别暴露 export let num 1 export function compute(a, b){return a b }//统…...
统计XML文件内标签的种类和其数量及将xml格式转换为yolov5所需的txt格式
1、统计XML文件内标签的种类和其数量 对于自己标注的数据集,需在标注完成后需要对标注好的XML文件校验,下面是代码,只需将SrcDir换成需要统计的xml的文件夹即可。 import os from tqdm import tqdm import xml.dom.minidomdef ReadXml(File…...
《操作系统导论》第14章读书笔记:插叙:内存操作API
《操作系统导论》第14章读书笔记:插叙:内存操作API —— 杭州 2024-03-30 夜 文章目录 《操作系统导论》第14章读书笔记:插叙:内存操作API1.内存类型1.1.栈内存:它的申请和释放操作是编译器来隐式管理的,所…...
HAProxy + Vitess负载均衡
一、环境搭建 Vitess环境搭建: 具体vitess安装不再赘述,主要是需要启动3个vtgate(官方推荐vtgate和vtablet数量一致) 操作: 在vitess/examples/common/scripts目录中,修改vtgate-up.sh文件,…...
2024年京东云主机租用价格_京东云服务器优惠价格表
2024年京东云服务器优惠价格表,轻量云主机优惠价格5.8元1个月、轻量云主机2C2G3M价格50元一年、196元三年,2C4G5M轻量云主机165元一年,4核8G5M云主机880元一年,游戏联机服务器4C16G配置26元1个月、4C32G价格65元1个月、8核32G费用…...
qt-C++笔记之QSpinBox控件
qt-C笔记之QSpinBox控件 code review! 文章目录 qt-C笔记之QSpinBox控件1.运行2.main.cpp3.main.pro4.《Qt6 C开发指南》:4.4 QSpinBox 和QDoubleSpinBox 1.运行 2.main.cpp #include <QApplication> #include <QSpinBox> #include <QPushButton&g…...
Linux(CentOS)/Windows-C++ 云备份项目(服务器网络通信模块,业务处理模块设计,断点续传设计)
此模块将网络通信模块和业务处理模块进行了合并 网络通信通过httplib库搭建完成业务处理: 文件上传请求:备份客户端上传的文件,响应上传成功客户端列表请求:客户端请求备份文件的请求页面,服务器响应文件下载请求&…...
【QQ版】QQ群短剧机器人源码 全网短剧机器人插件
内容目录 一、详细介绍二、效果展示2.效果图展示 三、学习资料下载 一、详细介绍 QQ版本可以兼容两个框架(HTQQ,MYQQ这两个的vip版也可以使用) 支持私聊与群聊,命令是 搜剧影视关键词 如果无法搜索到影视资源,请使用下方命令&…...
矩阵间关系的建立
参考文献 2-D Compressive Sensing-Based Visually Secure Multilevel Image Encryption Scheme 加密整体流程如下: 我们关注左上角这一部分: 如何在两个图像之间构建关系,当然是借助第3个矩阵。 A. Establish Relationships Between Different Images 简单说明如下: …...
【C++】C到C++的入门知识
目录 1、C关键字 2、命名空间 2.1 命名空间的定义 2.2 命名空间的使用 2.2.1 加命名空间名称及作用域限定符 2.2.2 使用using将命名空间中某个成员引入 2.2.3 使用using namespace 命名空间名称引入 3、C输入&输出 4、缺省参数 4.1 缺省参数的概念 4.2 缺省参数的…...
【c++】简单的日期计算器
🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好啊,在我们学习了默认成员函数后,我们本节内容来完成知识的实践,来实现一个简易的日期计算器 目录 头文件声明函数函数的实现1.全缺省默认构…...
基于easyx库的C/C++游戏编程实例-飞机大战
飞机大战游戏设计 首先创建飞机/子弹结构: struct Plane {int x;int y;bool live;int width;int height;int type;int hp; }player,bul[BUL_NUM],enemy[ENE_NUM];你需要加载图片: void ImageLoad() {//背景loadimage(&bg[0], "./image/飞机大…...
stitcher类实现多图自动拼接
效果展示 第一组: 第二组: 第三组: 第四组: 运行代码 import os import sys import cv2 import numpy as npdef Stitch(imgs,savePath): stitcher cv2.Stitcher.create(cv2.Stitcher_PANORAMA)(result, pano) stitcher.st…...
Ubuntu下udp通信
一、知识准备阶段 socket是什么?套接字是什么? https://blog.csdn.net/m0_37925202/article/details/80286946 Socket程序从Windows移植到Linux下的一些注意事项 sockaddr和sockaddr_in详解 bzero和memset函数 函数原型:void bzero&…...
拌合楼管理软件开发(十三) 对接耀华XK3190-A9地磅(实战篇)
前言: 实战开整 目前而言对于整个拌合楼管理软件开发,因为公司对这个项目还处于讨论中,包括个人对其中的商业逻辑也存在一些质疑,都是在做一些技术上的储备.很早就写好了串口与地磅对接获取代码,也大概知道真个逻辑,这次刚好跟库区沟通,远程连接到磅房电脑,开始实操一下. 一、地…...
FastAPI+React全栈开发10 MongoDB聚合查询
Chapter02 Setting Up the Document Store with MongoDB 10 Aggregation framework FastAPIReact全栈开发10 MongoDB聚合查询 In the following pages, we will try to provide a brief introducton to the MongoDB aggregation framework, what it is, what benefits it of…...
python 报错问题汇总
error: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: d:\\anaconda\\envs\\yolov5\\lib\\site-packages\\ISR-2.2.0-py3.7.egg 解决方法:重启pycharm python-contrib 无法安装 opencv-contrib-python 安装包网址:安装包下载链接…...
6.5物联网RK3399项目开发实录-驱动开发之LCD显示屏使用(wulianjishu666)
90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】 链接:https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwdc53f LCD使用 简介 AIO-3399J开发板外置了两个LCD屏接口,一个是EDP,一个是LVDS,接口对应板…...
「Android高级工程师」BAT大厂面试基础题集合-下-Github标星6-5K
C、 com.android.provider.contact D、 com.android.provider.contacts 11.下面关于ContentProvider描述错误的是()。 A、 ContentProvider可以暴露数据 B、 ContentProvider用于实现跨程序共享数据 C、 ContentProvider不是四大组件 D、 ContentP…...
【算法】基数排序
简介 基数排序(*Radix sort)是一种非比较排序算法(non-comparative sorting algorithm)。现代计算机的基数排序算法由 计数排序 算法的开发人哈罗德H西华德(Harold H. Seward)于1954年于麻省理工大学开发。…...
2核2G服务器优惠价格轻量61元一年,CVM价格313元15个月
腾讯云2核2G服务器多少钱一年?轻量服务器61元一年,CVM 2核2G S5服务器313.2元15个月,轻量2核2G3M带宽、40系统盘,云服务器CVM S5实例是2核2G、50G系统盘。腾讯云2核2G服务器优惠活动 txybk.com/go/txy 链接打开如下图:…...
东营有网站/企业宣传推广方案
...
影视会员网站怎么建设/免费seo网站诊断
转载于:https://www.cnblogs.com/xyhy/p/3485626.html...
上海什么做网站的公司比较好/浏览器下载安装
题目链接:http://acm.swust.edu.cn/#/problem/698/-1 1000(ms) 65535(kb) 1006 / 2689 用2 台处理机A 和B 处理n 个作业。设第i 个作业交给机器A 处理时需要时间a[i] ,若由机器B 来处理,则需要时间b[i]。由于各作业的特点和机器的性能关系…...
上海专业网站建设/中国疫情最新数据
1. 问题引入——频率的稳定值记为概率,这里的“稳定”是何含义? 2. 依概率收敛的定义 3. 依概率收敛示例 4. 依概率收敛的性质 5. 切比雪夫不等式(定理)及其证明 6. 切比雪夫不等式的适用范围 7. 切比雪夫不等式的应用示例...
前端做的网站/站长工具seo综合查询问题
中国石油大学华东2013-2014-2C语言A卷A卷2013—2014学年第2学期《计算机程序设计 C(2-2)》期末考试试卷专业班级姓名学号开课系室计算机应用技术系考试日期2014年6月22日题号一二三总分得分阅卷人一、程序阅读题(每空2分,共20分)1.又是一年一…...
华为网站建站/网上代写文章一般多少钱
之前编译的参数没有添加mysqli支持,因代码需要,必须添加上去。这次尝试一下扩展编译。 由于是源代码安装的,所以在php的目录bin下面有相关的命令。 到解压的源代码的ext目录下面,进入mysqli目录,执行/home/php/bin/php…...