Linux企业运维——持续集成与持续交付(上)
Posted 是大姚呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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测试访问本地容器正常运行,查看镜像信息
将执行命令改为删除以前的镜像,再删除拉取到的最新的镜像,然后运行最新版本的镜像
可以看到控制台显示找不到镜像
以上是关于Linux企业运维——持续集成与持续交付(上)的主要内容,如果未能解决你的问题,请参考以下文章
Linux企业运维——持续集成与持续交付(下)jenkins节点与用户管理jenkins结合ansible
Linux企业运维——持续集成与持续交付(下)jenkins节点与用户管理jenkins结合ansible