Linux企业运维——持续集成与持续交付(上)

Linux企业运维——持续集成与持续交付(上)

一、git工具使用

1.1、git版本控制系统简介

Git是一个开源的分布式版本控制系统,几乎所有开源软件用的都是分布式版本系统,其可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
在这里插入图片描述
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。

Git特点:

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

Git 有三种状态:

  • 已提交(committed):表示数据已经安全地保存在本地数据库中。

  • 已修改(modified):表示修改了文件,但还没保存到数据库中。

  • 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

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

1.2、本地git仓库部署

部署git有两种方式:
一是将本地目录转化为git仓库
二是克隆已有仓库,如git clone

下面介绍将本地目录转化为git仓库

真实主机使用yum install -y git安装git
在这里插入图片描述
在真实主机kiosk目录下新建demo目录,查看目录内无内容(包括隐藏文件)
在这里插入图片描述
初始化demo目录为代码库,再次查看目录,发现新建了.git隐藏目录,.git目录是git跟踪管理版本库的。
接着在demo目录中新建代码文件并查看其状态,-s表示简洁输出,代码文件前的??表示该文件不在版本库中。
使用git add命令将代码文件添加进入stage暂存区,查看文件状态看到A表示已添加到暂存区,HEAD指针指向当前正在操作的分支
在这里插入图片描述
默认在提交时会提交整个暂存区,提交时-m表示添加注释,提交时会默认创建邮箱和地址,这里也可以自己设置如果邮箱信息没有创建成功导致无法提交,可以根据提示指令创建用户和有效信息。
再次查看可以看到代码文件前无状态内容,无内容表示文件无变更
在这里插入图片描述
向代码文件中写入内容,再次查看文件状态可以看到右边出现了红色M,这表示目前代码文件的修改在工作区,使用git add命令后可以看到文件状态是左边绿色M,表示修改提交到了暂存区,然后提交
在这里插入图片描述
再次查看文件状态无内容,表示没有改动
向代码文件中追加写入内容,查看状态为右侧红色M,即在工作区进行了修改,根据提示信息可以知道在工作区的修改可以通过checkout命令来撤销
此时查看文件内容可以看到有两行,使用checkout命令撤销工作区的修改后,再次查看文件内容,追加的内容被撤销了
在这里插入图片描述
编辑代码文件,新追加一行内容,查看状态显示修改在工作区,使用git add将代码文件提交至暂存区。
继续追加一行内容,查看文件状态,显示两个M。左边绿色M表示我们上一步提交至暂存区的修改,右边红色M表示刚才追加内容的修改
再次添加文件至暂存区,查看状态可以看到只有绿色M,因为所有修改都已经被提交到了暂存区
在这里插入图片描述
如果不想提交这些更改,第一步可以使用reset撤销在暂存区的修改,此时查看文件状态可以看到修改处于工作区,第二步用checkout撤销在工作区的修改,此时查看文件内容只有一行内容
在这里插入图片描述
为了方便后续对仓库进行操作,可以声明用户信息,用户名为root,邮箱为root@westos.org,这一用户信息被保存在/.gitconfig这一隐藏文件里
在这里插入图片描述
回到demo目录下(必须回到代码仓库目录中,因为git命令必须在版本库当中执行),新建隐藏文件和隐藏目录,在隐藏目录中创建一个子文件,这时查看状态可以看到新建的隐藏文件和隐藏目录(目录中有文件,查看状态才可以看到隐藏目录),??表示并未在版本库中
在这里插入图片描述
在demo目录下新建并编辑.gitignore文件,像文件中写入.*表示忽略当前目录中的所有隐藏文件,此时查看状态就看不到刚才创建的隐藏文件了。
在这里插入图片描述
查看demo目录下的代码文件内容,只有一行,我们再追加一行并提交更改,-a参数相当于之前的add操作,不用分两次执行了。
查看状态无内容,这表示更改已经提交且无变更,此时通过rm -rf删除代码文件,查看状态可以看到右侧红色D,表示删除的是工作区的内容,可以撤销防止误删
在这里插入图片描述
使用checkout来撤销此次删除,然后查看文件内容,可以看到文件恢复
在这里插入图片描述
如果使用git rm 命令删除,查看状态显示为左边绿色的D,表示删除了暂存区的内容,想恢复的话可以使用reset
在这里插入图片描述
reset恢复暂存区的删除操作后,再执行checkout来恢复工作区的误删,这时可以看到文件被恢复了
在这里插入图片描述
如果使用git rm进行删除后,再使用commit提交了删除操作,可以使用回滚的方式恢复文件信息,使用git reflog命令查看历史版本信息,然后选择需要回滚到的版本,使用 git reset --hard 版本id进行回滚。
在这里插入图片描述
在这里插入图片描述

1.3、远程git仓库搭建

可以使用github来新建远程仓库,但github访问速度较慢,这里我们使用阿里的gitee进行远程仓库的搭建
首先注册gitee账户
在这里插入图片描述
为了方便后续操作,这里要做ssh免密
切换到.ssh目录下,使用ssh-keygen生成密钥文件
在这里插入图片描述
复制生成的公钥
在这里插入图片描述
在gitee中选择SSH keys模块,将公钥粘贴进去
在这里插入图片描述
添加ssh公钥成功后在右上角选择新建仓库
在这里插入图片描述
仓库名称为demo,设置为公开仓库
在这里插入图片描述
选择SSH连接访问方式,根据页面的提示信息推送本地仓库内容到gitee,第一次推送时需要指定用户
在这里插入图片描述
一定要在仓库目录中添加远程仓库的地址,推送本地仓库内容至远程共有仓库时要指定分支master
在这里插入图片描述
在本地将demo代码文件删除,通过gitee远程仓库克隆,可以看到demo恢复
在这里插入图片描述

二、搭建远程私有仓库gitlab

gitlab常用命令:

命令作用
gitlab-ctl start启动所有gitlab组件
gitlab-ctl stop停止所有gitlab组件
gitlab-ctl restart重启所有gitlab组件
gitlab-ctl status查看服务状态
gitlab-ctl reconfigure重载服务
gitlab-ctl tail查看日志

真实主机创建两个新的虚拟机
在这里插入图片描述
为server2分配至少4G内存
在这里插入图片描述
真实主机将gitlab镜像发送给server2
在这里插入图片描述
server2先安装相关依赖
在这里插入图片描述
安装gitlab包
在这里插入图片描述
安装完成后,server2切换到/etc/gitlab/目录下,编辑gitlab.rb配置文件,将external_url参数改为自己的ip
在这里插入图片描述
使用gitlab-ctl reconfigure命令重载服务
在这里插入图片描述
在/etc/gitlab/initial_root_password文件中可以看到初次登陆gitlab的密码
在这里插入图片描述
浏览器访问server2的地址进入登陆页面,复制密码,进行登录
在这里插入图片描述
点击右侧Preferences,修改登陆密码
在这里插入图片描述
修改完成后点击保存
在这里插入图片描述
server2生成ssh密钥
在这里插入图片描述
复制生成的公钥
在这里插入图片描述
将server2的公钥信息复制到gitlab仓库,完成ssh密钥的添加
在这里插入图片描述
新建项目
在这里插入图片描述
新建一个名为demo的项目,设置为私有,使用自述文件初始化仓库
在这里插入图片描述
server2安装git
在这里插入图片描述
通过ssh克隆该项目仓库
在这里插入图片描述
server2执行上图克隆命令,克隆demo仓库至本地,查看其内容
在这里插入图片描述
在这里插入图片描述

三、jenkins持续集成

3.1、jenkins简介

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测试阶段,更早的发现问题,这样解决问题的成本就会显著下降:持续集成缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间出现的等待时间;持续集成也意味着开发、集成、测试、部署得以持续。
Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
在这里插入图片描述
CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。
CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。
在这里插入图片描述

3.2、jenkins安装

为server3虚拟机分配至少2G内存
在这里插入图片描述
真实主机将jdk和jenkins安装包发送给server3
在这里插入图片描述
server3中先安装jdk,再安装jenkins
在这里插入图片描述
开启jenkins,可以看到8080端口开启
在这里插入图片描述
测试访问虚拟机是否能够上网
在这里插入图片描述
server3安装wget
在这里插入图片描述
更新插件源,测试那个插件元速度快,这里选择清华
在这里插入图片描述
测试访问:172.25.33.3:8080,页面提示密码在/var/lib/jenkins/secrets/initialAdminPassword文件内
在这里插入图片描述
初始化数据都在/var/lib/jenkins,在server3中查看指定文件,得到登陆密码
在这里插入图片描述
登陆成功后,选择右边的自定义插件安装
在这里插入图片描述
快速进入jenkins:全不选插件,选择All | None,然后安装
在这里插入图片描述
跳过用户创建阶段,选择管理员账户登陆
在这里插入图片描述
选择configure
在这里插入图片描述
设置登陆密码和时区
在这里插入图片描述
server3创建存放更新源CA证书的目录,然后下载证书
在这里插入图片描述
将证书文件的拥有者和组由root改为jenkins
在这里插入图片描述

3.3、jenkins插件安装

网页中在dashboard界面中选择manage jenkins,点击插件管理
在这里插入图片描述
选择advanes,这里要设置插件源地址
在这里插入图片描述
先测试哪个源的速度比较快,可以看到清华的速度最快,腾讯也挺快
在这里插入图片描述
将插件源地址设置为清华的镜像
在这里插入图片描述
server3切换到/var/lib/jenkins目录下,查看hudson.model.UpdateCenter.xml文件内容,可以看到插件源已经修改成了清华的源
在这里插入图片描述
搜索中文插件并安装
在这里插入图片描述
安装pipeline流水线插件
在这里插入图片描述

3.4、jenkins使用

(1)jenkins创建项目

输入任务名称demo,点击构建一个自由风格的软件项目
在这里插入图片描述
安装gitlab插件,可以用来为项目配置git仓库
在这里插入图片描述
server3安装git
在这里插入图片描述
生成ssh密钥以便git和Jenkins进行SSH免密连接
在这里插入图片描述
复制生成的公钥
在这里插入图片描述
根据SSH密钥管理界面的信息提示将公钥粘贴在指定部分
在这里插入图片描述
复制私钥
在这里插入图片描述
配置demo项目,进入源码管理界面,输入私有仓库地址,添加证书
在这里插入图片描述
类型选择SSH
在这里插入图片描述
用户名填root,将刚才复制的私钥粘贴在此处
在这里插入图片描述
证书添加完成后,指定分支填写*/main,与gitlab中分支一致
在这里插入图片描述

(2)配置周期性检查gitlab变更

接下来的配置这里选择轮询SCM触发器类型,* * * * * 表示每分钟查看一次gitlab代码变化,执行的命令为ls -l
在这里插入图片描述
server3切换到/var/lib/jenkins/workspace目录下,选择demo项目并进入,可以看到README.md文件内容
在这里插入图片描述
server2新建一个index.html并写入内容,将修改提交,这里提示我们要配置邮箱和姓名
在这里插入图片描述
身份信息配置完成后提交改动并上传
在这里插入图片描述
在页面已经可以看到提交的内容了
在这里插入图片描述
在Dashboard的demo项目中,点击查看#6的修改历史
在这里插入图片描述
在控制台中可以看到操作成功的信息
在这里插入图片描述
在这里插入图片描述

(3)配置实时监控gitlab变更

首先生成秘密令牌
在这里插入图片描述
进入jenkins的构建触发器模块,取消轮询,选择只要有变动就上传至gitlab,复制这里的url地址
在这里插入图片描述
在gitlab的设置中找到webhooks,将url和秘密令牌粘贴在此
在这里插入图片描述
再进入菜单栏选择Admin
在这里插入图片描述
勾选 允许webhooks和服务对本地网络的请求
在这里插入图片描述
可以看到配置已经生效
在这里插入图片描述
下面我们进行测试,server2将新的内容写入到index.html中,然后提交改动并上传
在这里插入图片描述
server3的jenkins实现实时同步,可以看到改动
在这里插入图片描述
在页面中查看#7改动,可以看到控制台输出
在这里插入图片描述

(4)自动构建docker镜像并上传至本地仓库

server2编写dockerfile文件并添加提交上传
在这里插入图片描述
因为jenkins实时同步server3也看到dockerfile,server3安装docker
在这里插入图片描述
server1将docker配置文件发送给server3
在这里插入图片描述
server3修改内核参数并重载
在这里插入图片描述
server1将自己docker目录下的cert.d发送至server3的docker目录
在这里插入图片描述
server3修改仓库镜像地址并重启docker服务,为docker.sock文件设置权限,使jenkins通过套接字使用docker,然后添加本地域名解析
在这里插入图片描述
真实主机将myapp.tar发送给server1
在这里插入图片描述
server1拉起myapp镜像
在这里插入图片描述
为myapp:v1和myapp:v2添加标签
在这里插入图片描述
server1将myapp:v1和myapp:v2上传至仓库
在这里插入图片描述
jenkins界面安装docker插件
在这里插入图片描述
构建步骤选择Docker Build and Pubish
在这里插入图片描述
仓库名称为library/demo,标签动态获取,使用docker套接字,设定仓库地址
在这里插入图片描述
添加jenkins凭据提供者
在这里插入图片描述
如图填写相关信息
在这里插入图片描述
取消强制pull
在这里插入图片描述
在jenkins的demo仓库信息中点击最后的图标
在这里插入图片描述
可以看到控制台输出信息
在这里插入图片描述
上传镜像至本地demo仓库
在这里插入图片描述
为镜像设置标签然后再上传至本地仓库
在这里插入图片描述
在harbor页面我们可以看到上传的镜像
在这里插入图片描述

(5)添加docker交付任务

新建一个任务名为docker,选择自由风格
在这里插入图片描述
触发器选择其他工程构建后触发,指定关注demo项目,选择构建稳定时触发
在这里插入图片描述
编写触发时执行的shell命令,操作为运行容器
在这里插入图片描述
控制台可以看到配置成功
在这里插入图片描述
server3测试访问可以看到myapp正在运行
在这里插入图片描述
我们将触发器执行的命令修改为下图,即如果已经存在myapp的容器,先删除,休眠1秒后重新拉起在这里插入图片描述
server2编辑dockerfile,添加提交并上传
在这里插入图片描述
gitlab中可以看到刚上传的dockerfile
在这里插入图片描述
查看控制台输出可以看到myapp:v2
在这里插入图片描述
成功push镜像
在这里插入图片描述
查看控制台输出可以看到触发器触发,执行了我们配置好的指令
在这里插入图片描述
server3测试访问,证明容器正常运行
在这里插入图片描述

(6)拉取harbor仓库镜像

真实主机开启虚拟机server4
在这里插入图片描述
server4配置本地域名解析
在这里插入图片描述server3将本机的docker.repo发送给server4
在这里插入图片描述
server4安装docker
在这里插入图片描述
server3再将本机的docker.conf配置文件发送给server4
在这里插入图片描述
server4修改内核参数并重载,启动docker
在这里插入图片描述
server3将certs.d和daemon.json发送给server4
在这里插入图片描述
server4重启docker服务
在这里插入图片描述
在daemon.json文件中将镜像源进行修改
在这里插入图片描述
下载安装ssh的插件用于远程ssh方式访问
在这里插入图片描述
点击系统配置设置ssh连接的主机
在这里插入图片描述
将server4的信息填入,添加jenkins凭据
在这里插入图片描述
凭证类型选择用户名和密码,输入ssh登陆操作的服务器的账号和密码
在这里插入图片描述
凭证配置完成
在这里插入图片描述
配置docker项目,填入ssh连接的目标和指令
在这里插入图片描述
查看docker项目的控制台输出可以看到#4显示镜像拉取成功
在这里插入图片描述
server4测试访问本地容器正常运行,查看镜像信息
在这里插入图片描述
将执行命令改为删除以前的镜像,再删除拉取到的最新的镜像,然后运行最新版本的镜像
在这里插入图片描述
可以看到控制台显示找不到镜像
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值