持续集成与持续交付(上)

目录

一、git工具的使用

       1、git简介

       2、本地git仓库部署

       3、远程git仓库搭建

二、搭建远程私有仓库gitlab

三、jenkins持续集成 

       1、jenkins简介

       2、jenkins安装

       3、jenkins插件源安装

       4、jenkins使用

           (1) jenkins创建项目

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

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

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

           (5) 添加docker交付任务    

一、git工具的使用

1、git简介

Git是一个开源的分布式版本控制系统,几乎所有开源软件用的都是分布式版本系统,其可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

git特点:

a、速度       

b、简单的设计     

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

d、完全分布式     

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

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

Git必看秘籍:https://git-scm.com/book/zh/v2

git 的三种状态

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

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

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

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

2、本地git仓库部署

获取 Git 仓库通常有两种方式:

a、将尚未进行版本控制的本地目录转换为 Git 仓库。

b、从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone

本地目录转化为git仓库

安装Git:# yum install -y git

新建demo目录,查看目录无内容 (包括隐藏文件)

初始化demo目录为代码库

再次查看目录 发现新建了.git隐藏目录 .git目录是git跟踪管理版本库的

在demo目录中新建代码文件readme.md       

git status并查看状态 加上-s表示简洁输出 代码前的??表示该文件不在版本库中 

使用git add 命令将代码文件添加到stage暂存区 查看文件状态 A表示已经添加到暂存区 HEAD指针指向当前正在操作的分支

检查当前文件状态 $ git status  

检查当前文件状态简化输出 $ git status -s  

跟踪新文件 $ git add README

默认在提交时会提交整个暂存区 提交时-m表示添加注释

提交更新 $ git commit    

跳过使用暂存区域 $ git commit -a -m 'added new benchmarks'

默认在提交的时候会告诉我们已什么身份进行提交 自己创建一个邮箱和用户名 方便审计

查看状态 重新进行提交  再次查看可以看到代码文件前无状态内容 无内容表示文件无变更

向代码文件中写入内容 再次查看文件状态可以看到在靠代码文件前出现了M 这表示目前代码文件的修改在工作区

使用git add命令将此代码文件添加到暂存区 再次查看状态可以看到M首列 表示修改提交到了暂存区  

然后进行提交 再次查看文件状态无内容 表示没有改动

在demo目录下创建.a .o 隐藏文件 创建env目录 在env目录下继续创建文件file1

查看状态  代码前的??表示这些文件不在版本库中  

编辑.gitignore忽略文件    .* 表示忽略所有隐藏文件 再次查看状态无内容

忽略文件 $ cat .gitignore

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

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

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

 

通过rm -rf删除代码文件 查看状态可以看到在靠代码文件前出现了D 表示删除的是工作区的内容

可以撤销防止勿删  使用checkout来撤销此次删除 然后查看文件内容 可以看到文件恢复

如果通过git rm 命令删除 查看状态显示为首列出现了D 表示删除了暂存区的内容 

使用git commit 来提交删除操作 这时可以看到readme.md文件被删除 

如果想要恢复可以使用回滚的方式来进行操作使用  通过git log查看提交历史  

使用git reflog 命令查看历史版本信息 然后选择需要回滚到的版本

使用git reset --hard版本id进行回滚

git相关命令 

git add README跟踪新文件 
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

版本回退

3 、远程git仓库搭建

可以使用github来新建远程仓库 但github访问速度较慢 这里我们使用阿里的gitee进行远程仓库的搭建

新建仓库demo

选择SSH连接访问方式 根据页面的提示信息推送本地仓库内容到gitee 第一次推送需要指定用户

一定要在仓库目录中添加远程仓库的地址 推送本地仓库内容至远程共有仓库时要指定分支master 推送失败 显示key不对 需要设置ssh免密认证

这里需要做ssh免密  使用ssh-keygen可用来生成ssh公钥认证所需的公钥和私钥文件  

复制生成的公钥 

在gitee中选择SSH公钥模块 将公钥粘贴进去  点击确定输入密码

重新推送  

推送仓库完毕后点击头像-仓库 查看本地仓库推送到远程git仓库 同步成功

在demo目录下创建test.txt 文件和file1 file2文件  查看状态 将它们添加到stage暂存区  提交暂存区到本地版本库

上传本地demo仓库到远程demo仓库 

刷新查看同步成功 

如果在本地不小心将demo代码文件删除 通过gitee远程仓库克隆 可以看到demo恢复 

二、搭建远程私有仓库gitlab 

 常用命令:

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

gitlab安装

官网:https://about.gitlab.com/install/

软件下载(官方下载慢,推荐使用国内镜像站点) https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/   

实验准备 真实主机创建两个虚拟机 server12(4G)  server13   (2G)                                                   

wget https://omnibus.gitlab.cn/el/7/gitlab-jh-14.8.2-jh.0.el7.x86_64.rpm   下载软件包

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

yum install -y gitlab-jh-14.8.2-jh.0.el7.x86_64.rpm  安装gitlab包

cd /etc/gitlab/  安装完毕后切换到/etc/gitlab/目录下 

vim gitlab.rb    编辑gitlab.rb配置文件 将external_url参数修改为自己的ip

gitlab-ctl reconfigurere  使用gitlab-ctl reconfigure命令重载服务  在/etc/gitlab/initial_root_password 文件可以看到初次登录gitlab密码

gitlab-ctl status   查看服务状态

free -m 查看占用内存较多 

浏览器访问server12ip地址172.25.15.12进入登陆页面  

 

复制此密码进行登陆 

进入页面是英文显示  点击右侧Edit profile 修改语言为中文   

 

刷新后看到中文页面 点击密码修改登录密码 

退出后重新登陆成功 

server12生成ssh密钥  复制生成的公钥  

 将server12的公钥信息复制到gitlab仓库 完成ssh密钥的添加 

新建一个名为project1的项目 设置为私有 使用自述文件初始化仓库

 

server12安装git  yum install -y git  

通过ssh克隆该项目仓库 

server12执行上图克隆命令 克隆prodject1仓库至本地 查看prodject1内容

git remote -v | --verbose 列出详细信息,在每一个名字后面列出其远程url  显示对应的克隆地址

测试  创建index.html文件 添加到暂存区 提交到版本库然后上传 在远程git私有仓库可以查看到在本地刚刚创建的index.html文件  同步成功 

三、jenkins持续集成 

1、jenkins简介

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

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

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

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

2、jenkins安装 

为server13分配至少2G内存

软件下载:https://jenkins.io/zh/download/

国内镜像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

国内镜像站下载最新版本 jenkins安装包

真机将jenkins安装包发送到server13上 

Jankins是基于java8编写的软件,所以在安装之前需要在主机上安装Java8的运行环境。

先安装linux自带的openjdk 

 

再安装jenkins 

安装成功后启动 

 

开启成功后 可以看到8080端口开启 

测试访问172.25.15.13:8080 页面提示密码在/var/lib/jenkins/secrets/initialAdminPassword文件内 

登录成功后选择安装jenkins社区推荐的插件来进行安装 

跳过用户创建阶段 直接选择管理员admin账号登陆

jenkins访问url 保存继续  jenkins安装完毕

进去之后选择configure 设置登陆密码 

密码修改成功后 重新你登陆 

3、jenkins插件安装 

server12创建存放更新源CA证书目录 然后下载证书

设置证书文件的拥有者和组为jenkins 

 更新插件源 测试哪个插件元速度快  两次测试发现ustc插件元速度快并稳定 这里选择ustc

在更新中心中查找ustc插件源 https://cdn.jsdelivr.net/gh/lework/jenkins-update-centerhttps://cdn.jsdelivr.net/gh/lework/jenkins-update-center

复制ustc插件源地址 

  

网页中在dashboard界面中选择manage jenkins  点击Manage Plugins插件管理 

 选择advanes  这里要设置插件源地址

将插件源地址设置为ustc插件源地址 

4、jenkins使用

 (1)jenkins创建项目

输入任务名称test 点击构建一个自由风格的软件项目

编辑源码管理 选择git 将项目代码从gitlab拉过来

在gitlab上复制ssh克隆

在git仓库"请输入git仓库"粘贴 在gitlab上复制的SSH克隆    输入后会进行报错 无法连接仓库 

解决办法在server13上安装git

server13安装git

安装完毕后 又会出现一个报错 校验主机key失败 输入私有仓库地址 添加证书 

类型选择ssh 

server13jenkins主机生成ssh密钥 以便git和jenkins进行SSH免密连接  复制生成的公钥

进入gitlab project1项目里边 点击编辑个人资料  

选择左边的SSH密钥 将上述  复制生成的公钥粘贴至此处 点击添加密钥  

查看设置成功 

复制私钥 

配置test项目 进入源码管理界面 Source Code Management 输入私有仓库地址 添加证书 

在description中填写  gitlab ssh key  用户名填root 将上边复制的私钥粘贴在此处 

输入完毕后点击添加 

证书添加完成后 指定分支填写*/main 与gitlab中分支一致 

gitlab中查找分支名称  进入gitlab中 点击菜单 选择项目  点击您的项目  点击project1项目进去 即可查看到分支名称为main   将此分支名称填写到Source Code Management 

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

定义轮询间隔,有更新时触发jinkens           

在Build Triggers配置中选择Poll SCM轮询SCM触发器类型  * * * * * 表示每分钟查看一次gitlab代码变化 

构建选择执行shell命令

ls -l *列出从gitlab仓库中拿到的内容 完毕后点击保存即可 

点击右侧播放键 手动构建   等待刷新  可看到构建成功  进入test项目中  查看#1(构建号)的构建历史 

在控制台输出中可以看到操作成功的信息 

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

 首先安装gitlab构建触发插件 直接安装不用重启

安装成功 返回页面 点击配置管理

进入jenkins的构建触发器模块 取消轮询 选择当我们修改了gitlab  gitlab webhook通过URL来进行触发 主动实时的来通知jenkins  复制url

在下方点击高级生成秘密令牌 复制此令牌 然后点击保存  

在gitlab的设置中找到webhooks,将url和秘密令牌粘贴于此 

然后点击下方启用SSL验证 

这时我们会发现报错  没有添加成功 请求在本地的网络不允许  

这时我们需要修改网络配置  点击菜单 选择管理员  

进去之后点击设置 选择网络 

找到Outbound requests出站请求 展开  在允许从web hooks和服务向本地网络发出请求前面打✓ 然后保存修改 

然后返回到weebhooks 重新添加网络和令牌 在添加 成功 

 

进行测试 点击push events

这时我们发现在test项目中 有构建2 

在server12中编辑Dockerfile文件 

 将Dockerfile文件添加到暂存区  提交并上传

在gitlab项目中查看提交上的Dockerfile文件  同步成功  

这时我们可以发现 在jenkins多了#3构建   

点击控制台输出进去查看  sucess 

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

 jenkins界面安装docker插件

选择通过dockerfile构建镜像并且上传到仓库   点击安装不用重启

server1启动仓库    

因为jenkins实时同步 server13安装docker   server1发送docker-ce.repo镜像源到server13 

server13安装docker失败 需要解决其依赖性  

server1发送centos源到server13

server13安装docker成功

server1将docker配置文件发送到server13 

server13修改内核参数并重新加载  启动docker

docker info 查看 启动成功 

server13添加仓库解析 

server1将仓库证书发送到server13的/etc/docker/目录下

 server1将阿里云加速器发送到server13的/etc/docker/目录下 

server13重启docker使之生效 

修改docker.sock文件权限 使jenkinds通过套接字使用docker 不然jenkins无法直接执行docker命令 

 删除执行shell    

 构建步骤选择Docker Build and Pubish 

设置仓库名称为library/webserver 标签动态获取 使用docker套接字 设置仓库地址 

镜象推送到仓库需要认证   需要添加jenkins凭据提供者

     

用户名密码为登陆harbor仓库的用户名和密码  describe为 "harbor admin auth"  然后点击add在Registry credentials注册表凭据中选择 admin  (admin/******(harbor admin auth)) 

取消强制拉取镜像 最后点击保存

测试 点击右边的播放键 手动触发立即构建 

查看控制台输出

拉取镜像成功 开始构建  打标签  上传镜像到本地仓库 

docker images查看镜像

数据文件在/var/lib/jenkins/workspace/test/目录下

在harbor仓库页面可以看到上传的镜像 

(5) 添加docker交付任务 

新建一个任务名为docker_project_test 选择自由风格 

构建触发器选择其他工程构建后触发 指定关注test项目 选择只有构建稳定时触发 

选择构建为执行shell  

编写触发时执行的shell命令 操作为运行容器 

查看正在构建 

查看控制台输出 

查看控制台输出 可以看到配置成功 

server13测试访问可以看到容器运行成功 

浏览器访问172.25.15.13

自动触发

编辑index.html文件  提交上传 

gitlabe可以查看到修改的index.html文件 

查看控制台输出

成功上传镜像 

查看镜像 

harbor仓库查看 

浏览器访问失败 没有更新

docker_project_test 项目报错  点击docker_project_test 项目

查看控制台输出 错误原因是触发构建后直接进行docker run  但是本机已经有这个容器  再次创建名称相同的容器  两者冲突  

解决方法 修改触发器执行命令 二次触发的话先过滤容器 如果存在webserver容器 先删除此容器  在删除此镜像  然后休眠1秒钟 重新拉取镜像运行容器 注:在shell脚本第2行和第3行中间再增加一行  命令为sleep 1  文中截图不全

查看控制台输出 成功  

浏览器访问 更新成功 

再次编辑index.html文件 提交上传 

gitlabe可以查看到修改的index.html文件

再次触发查看test项目控制台输出 

查看harbor仓库 镜像上传成功 

浏览器访问  更新成功 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值