IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 自动化运维之CI/CD——持续集成与持续交付 -> 正文阅读

[系统运维]自动化运维之CI/CD——持续集成与持续交付

目录

一、git工具使用

1、版本控制系统结构

2、git简介

3、git安装

?4、git使用

上传项目到gitee:

下载项目到本机:

二、gitlab代码仓库

Gitlab的安装

?克隆项目到本地:

上传文件到gitlab

三、jenkins持续集成

1、jenkins简介

2、jenkins安装

安装jenkins:

?第一次访问过程如下:

jenkins和gitlab的整合:

当gitlab发生更改时jenkins也会同步更新:

3、jenkins的构建:

4、项目自动集成与交付:

5、 分布式结构实现项目自动集成与交付:

四、本章总结


一、git工具使用

1、版本控制系统结构

?本地版本控制系统(较传统)

集中化的版本控制系统(较传统)

分布式版本控制系统(主流系统)

2、git简介

Git特点:

????????速度

????????简单的设计

????????对非线性开发模式的强力支持(允许成千上万个并行开发的分支)

????????完全分布式

????????有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。

Git必看秘籍:

Git - Bookhttps://git-scm.com/book/zh/v2

Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。

???????? 已修改表示修改了文件,但还没保存到数据库中。

???????? 已暂存表示对一个已修改文件的当前版本做了标记,

? ? ? ? ?使之包含在下次提交的快照中。 已提交表示数据已经安全地保存在本地数据库中。

这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。

3、git安装

?4、git使用

Git - 记录每次更新到仓库https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%AE%B0%E5%BD%95%E6%AF%8F%E6%AC%A1%E6%9B%B4%E6%96%B0%E5%88%B0%E4%BB%93%E5%BA%93

用户信息

$ git config --global user.name "zzh"

$ git config --global user.email “290637510@qq.com”

检查当前文件状态

$ git status

$ git status -s?? ??? ?//简化输出

状态简览

$ git status -s ?

????????A ?lib/git.rb? ? ? ? ? ? ? ? ?//暂存状态,待提交状态

? ? ? ? ? ?M README? ? ? ? ? ?//已提交文件发生改动后未重新提交(M在右边)

????????M? ? README? ? ? ? ? ?//已提交文件发生改动后重新提交(M在左边)

????????MM? Rakefile

?????????? LICENSE.txt? ? ? ? //新建的文件未槽作过的状态

M在右边表示在工作区,M在左边表示在暂存区

跟踪新文件?git add README
忽略文件

$ cat .gitignore

????????.*?? ??? ?//忽略所有隐藏文件

????????/test?? ??? ?//只忽略当前目录下的test文件

????????build/?? ??? ?//忽略任何目录下名为 build 的文件夹

查看已暂存和未暂存的修改git diff
提交更新git commit
跳过使用暂存区域git commit -a -m 'added new benchmarks'
移除文件

$ git rm PROJECTS.md

$ git rm --cached README

重命名文件

$ git mv README.md README

其实,运行 git mv 就相当于运行了下面三条命令:

???????? $ mv README.md README

???????? $ git rm README.md

? ? ? ? ?$ git add README

查看提交历史

$ git log

$ git log -p -2

$ git log --stat

$ git log --pretty=oneline

取消暂存的文件$ git reset HEAD README.md
撤消对文件的修改$ git checkout -- README.md
版本回退:

$ git reflog

$ git reset --hard efa267a

示例:

?

远程仓库:注册github/gitee帐号,并新建一个仓库:?

张朝辉/demohttps://gitee.com/zhaohui_zhang/demo

?

向gitee中提交本机的ssh公钥,以便上传文件。

?向gitee上推送本机项目

上传项目到gitee:

添加——>提交——>上传?

下载项目到本机:

ssh密钥——>克隆到本地?

二、gitlab代码仓库

对于一些开源项目,可以托管在github或者gitee上。但是对于企业内部的代码,具有很高的隐私性,就需要托管在私人仓库上。用到的私人仓库为Gitlab

Gitlab的安装

官方网站:

下载安装_极狐GitLab - 极狐GitLab 官方网站极狐GitLab 推荐用户下载使用官方 Linux 安装包,可享30天免费试用极狐GitLab 旗舰版,安装速度更快,升级更简单,包含其他版本不具备的增强可靠性功能。https://about.gitlab.com/install/

清华源网站:

Index of /gitlab-ce/yum/ | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorIndex of /gitlab-ce/yum/ | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

安装软件:

#安装依赖
yum install -y curl policycoreutils-python openssh-server perl

#下载并安装软件
wget https://omnibus.gitlab.cn/el/7/gitlab-jh-14.8.2-jh.0.el7.x86_64.rpm
rpm -ivh gitlab-jh-14.8.2-jh.0.el7.x86_64.rpm

vim /etc/gitlab/gitlab.rb		
    external_url 'http://172.25.254.2'		//访问gitlab的地址

gitlab-ctl  reconfigure			//重载服务

登录gitlab: 
http://172.25.254.2  		//用户:root 第一次登录需要强制修改密码

安装完成后,查看状态,可以看到已经安装的组件。

在浏览器访问<172.25.254.2>,首次登录,用户名和密码如下:

?

?修改语言:

?修改密码(密码最少8位,设置的是“Westos007”):

添加客户端SSH密钥(公钥):

?创建项目:

?克隆项目到本地:

上传文件到gitlab

添加——>提交——>上传?

# echo www.westos.org > index.html
# git add index.html                            //添加
# git commit -m "add index.html"                //提交
# git push -uf origin main                      //上传

三、jenkins持续集成

和gitlb实现整合

1、jenkins简介

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。

CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。

?CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。

2、jenkins安装

官方网站:

https://jenkins.io/zh/download/https://jenkins.io/zh/download/国内镜像站:
Index of /jenkins/redhat/ | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorIndex of /jenkins/redhat/ | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

安装jenkins:

#下载jenkins软件包
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.338-1.1.noarch.rpm                
    
yum install -y java-1.8.0-openjdk.x86_64        //安装jdk依赖
yum install -y jenkins-2.338-1.1.noarch.rpm        //安装jenkins软件包
systemctl start jenkins.service                    //启动jenkins服务

访问jenkins:

第一次启动时会从外网下载组件,会比较慢。

更改jenkins镜像源:

注意:默认jenkins升级的网站访问速度较慢,因此需要测试后寻找速度较快的镜像源

#测试jenkins的镜像源网速
curl -sSL https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/speed-test.sh | bash

更新插件源:
vim  /var/lib/jenkins/hudson.model.UpdateCenter.xml 
  1 <?xml version='1.1' encoding='UTF-8'?>
  2 <sites>
  3   <site>
  4     <id>default</id>
  5     <url>https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/updates/ustc/update-center.json</url>
  6   </site>
  7 </sites>

先测试镜像源网速:

??替换为自己选的网站地址 <vim /var/lib/jenkins/hudson.model.UpdateCenter.xml >

?默认走手动设置的镜像源时需要一个证书,安装证书过程如下:

#创建证书目录
mkdir /var/lib/jenkins/update-center-rootCAs
#下载证书
wget https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/rootCA/update-center.crt -O /var/lib/jenkins/update-center-rootCAs/update-center.crt
#更改证书权限
chown jenkins.jenkins -R /var/lib/jenkins/update-center-rootCAs        

?镜像源更改完成后重启jenkins服务即可生效

?第一次访问过程如下:

访问: http://172.25.254.3:8080

使用初始密码登录:cat /var/lib/jenkins/secrets/initialAdminPassword

安装默认插件即可,使用admin用户,登录后修改密码。

?

?

修改密码:

修改密码后得重新登录,登录用户名是admin,密码为新改的密码。

?新建项目:

jenkins和gitlab的整合:

导入gitlab地址实现和gitlab的整合

注意:jenkins是以git的方式访问gitlab,因此jenkins的客户端必须先安装<yum install -y git>

?在gitlab上添加jenkins客户端的公钥:


?在jenkins上添加客户端的私钥:

?

??选择分支名称(必须和gitlab上统一)?

随意执行一个shell脚本看看效果

轮询< * * * * * >表示每分钟从gitlab上刷新一下

查看构建历史:

?

当gitlab发生更改时jenkins也会同步更新:

这就需要一个触发器,当gitlab发生改动时,将会主动通知jenkins的触发器,进而触发jenkins的同步机制。

?

?

?

?

在gitlab上添加要通知的地址及token?

??

在jenkins界面保存后生效

?

在浏览器测试:在gitlab上发送一个通知,在jenkins界面上会自动更新项目

?在终端测试:

在gitlab客户端的项目下,新建一个文件并推送到gitlab中,检查jenkins自动同步。

3、jenkins的构建:

在jenkins主机上安装docker:

启动之前安装的harbor服务器<server1>

安装docker用到的镜像源已在<docker-ce.repo>和<Centos7.repo>中写好(参考之前的内容),可以直接安装,然后修改网桥策略,生效后启动docker。

设置解析。

复制证书。复制阿里云的加速器。

最后重启docker

   57  vim docker-ce.repo
   59  vim Centos7.repo
   60  yum install -y docker-ce-20.10.12-3.el7.x86_64
   61  vim /etc/sysctl.d/docker.conf                
            net.bridge.bridge-nf-call-iptables = 1
            net.bridge.bridge-nf-call-ip6tables = 1
   62  sysctl --system
   63  systemctl start docker

接着在jenkins网页中构建docker

分别表示:6——在harbor仓库中的项目名称;7——版本号升序(由第2步那个插件生成);8——本机下的docker套接字文件(unix://表示本机);9——harbor仓库地址(注意设置好解析)

?

这里的用户名和密码就是登录harbor仓库的用户名和密码。

?

更改gitlab的Dockerfile文件,令其自动触发给jenkins,查看构建过程如下:

?构建完成后,在jenkins的本地docker镜像中可以查看到镜像

在harbor仓库中也可以看到构建成功的镜像


目前未之,在终端中编辑完以后,可以通过gitlab联合jenkins将Dockerfile自动构建并上传镜像到harbor仓库中,这就是“集成”;下一步需要自动化部署镜像,也就是“交付”。

开发者上传代码——>jenkins自动构建——>在harbor中创建镜像——>部署到k8s集群


4、项目自动集成与交付:

在jenkins中新建项目:

?为项目docker_project_test添加一个触发器:当test项目完成后触发本项目运行

?

?

?

注意:必须给</var/run/docker.sock>满权限,否则构建时会因为无法访问而构建失败

?测试:在jenkins的客户端查看docker进程,已经部署成功??

截至当前,整套流程已经完毕,接下来测试让整套步骤自动运行

第一步:在gitlab客户端更改i项目文件并推送到gitlab中

git commit -a -m "update v1"            //提交并添加更改(-a是add的意思)
git push -uf origin main                //推送

查看gitlab上,更改完成

第二步:查看jenkins中test项目的构建历史,显示在gitlab发生更改时已经触发构建?

?

第三步:查看harbor中的镜像列表,jenkins最新的一次构建已经完成

?注意:

需要删除上一步实验中正在运行的容器,否则会因为名称冲突而无法运行新容器;还需要删除上一版本的镜像,否则镜像存在时,jenkins不会拉取新的镜像。

docker ps -a | grep webserver && docker rm -f webserver            //删除正在运行的容器
docker rmi reg.westos.org/library/webserver:latest                //删除上一版本的镜像
sleep 1                                                        //休眠1秒
docker run -d --name webserver -p 80:80 reg.westos.org/library/webserver:latest

?

第四步:查看jenkins的项目构建成功

?第五步:在本地测试

5、 分布式结构实现项目自动集成与交付:

实验需要四台虚拟机,分别为server1/2/3/4,server1为harbor仓库,server2为git客户端,server3为jenkins客户端,server4为待部署(交付)的远程主机

#在server3上
scp Centos7.repo docker-ce.repo root@172.25.254.4:/etc/yum.repos.d/        //复制docker源

scp /etc/sysctl.d/docker.conf root@172.25.254.4:/etc/sysctl.d/        //复制网桥配置

cp -r /etc/docker/certs.d/ /etc/docker/daemon.json root@172.25.254.4:/etc/docker/        //复制加速器及证书

#在server4上
yum install -y docker-ce-20.10.12-3.el7.x86_64        //安装docker
sysctl --system                            //载入网桥配置
vim /etc/hosts                                //设置harbor仓库解析
vim /etc/docker/daemon.json                 //更改仓库为本地仓库
systemctl start docker                        //启动docker
docker info 

在远端主机中部署就需要ssh,所以在jenkins中安装ssh插件,并添加ssh验证信息

?

?

?

?

?

?添加ssh认证:

?

?更改docker_project_test项目的构建命令:

?

结果测试:

在server2中重新更改文件,并再次推送到gitlab,查看远端主机的运行结果。

?

在浏览器访问server4的IP,在server终端查看docker运行情况。都自动构建好了。

?

四、本章总结


?梳理流程如下:

user --->? git push --->? gitlab ---> trigger ---> jenkins(test)?---> build and push image ---> harbor ---> trigger ---> jenkins(docker_project) ---> pull harbor image && docker run container

?


  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:37:43  更:2022-03-17 22:41:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:20:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码