目录
一、git工具使用
•Git特点:
三种状态
将尚未进行版本控制的本地目录转换为 Git 仓库
远程操作
二、gitlab代码仓库
三、Jenkins持续集成
jenkins简介
jenkins安装
先安装jdk
安装Jenkins
加速处理,更新插件源
整合jenkins和getlab
新建一个自由风格任务
gitlab上克隆
在server3节点上先安装git
粘贴到源码管理
添加访问git仓库的私钥到Jenkins或者添加server3公钥到git仓库
查看更改项目分支
构建触发器
构建
设置完成保存,观察现象
右击#1控制台输出
gitlab自动触发jenkins
Jenkins的自动构建
镜像测试
整体流程运行
过程总结
分布式结构实现项目自动集成与交付
具体来说,CI/CD可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务统称为“CI/CD管道”,由开发和运维团队协同支持。
随着DevOps的兴起,出现了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法。传统的软件开发和交付方法正在迅速变得过时。从历史上看,在敏捷时代,大多数公司会每月,每季度,每两年甚至每年发布部署/发布软件。然而,现在,在DevOps时代,每周,每天,甚至每天多次是常态。当SaaS正在占领世界时,尤其如此,您可以轻松地动态更新应用程序,而无需强迫客户下载新组件。很多时候,他们甚至都不会意识到正在发生变化。开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期,大多数团队都有自动化流程来检查代码并部署到新环境。今天,我们将介绍什么是CI / CD / CD,以及现代软件公司如何使用工具将部署代码的流程自动化。
持续集成的重点是将各个开发人员的工作集合到一个代码仓库中。通常,每天都要进行几次,主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
持续交付的目的是最小化部署或释放过程中固有的摩擦。它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。
持续部署是一种更高程度的自动化,无论何时对代码进行重大更改,都会自动进行构建/部署。
Git必看秘籍 :https://git-scm.com/book/zh/v2
现在请注意,如果你希望后面的学习更顺利,请记住下面这些关于 Git 的概念。 Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。
获取 Git 仓库通常有两种方式:
从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone
将尚未进行版本控制的本地目录转换为 Git 仓库。我们下面完成第二种。
创建一台干净的虚拟机server2
初始化版本库:git目录是git跟踪管理版本库的,没事别瞎溜达
??代表刚刚创建还没进版本库,还没开始追踪。
A代表添加进了暂存区。
第一次添加失败,需要书写提交者的用户信息
再次提交,查看状态为空,说明提交成功。
当对文件进行修改以后,由于之前已将提交到版本库,就会有一个追踪。
只是修改,会在工作区M在右边,add以后进入暂存区,M在左边。我们提交时,只会提交暂存区的,不会提交工作区的。
忽略文件
cat .gitignore
查看已暂存和未暂存的修改
$ git diff
提交更新
$ git commit
跳过使用暂存区域(但是不支持新建的,只支持已经存在的)
$ git commit -a -m 'added new benchmarks'
移除文件
$ git rm PROJECTS.md
$ git rm --cached README
撤消对文件的修改
$ git checkout -- README.md
重命名文件
$ 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
让虚拟机可以联网,然后访问gitee,注册账号,并新建一个仓库:
推送本地仓库内容到github:
$ git remote add origin https://github.com/westos007/git.git //关联远程仓库
使用https方式推送每次需要输入用户名和密码,如果不想麻烦的话采用ssh方式
生成本地密钥,并上传公钥到github
$ git push -u origin master //第一次推送需要加 -u参数
查看,gitee已经上传
更改上传
本机删除了,可以克隆
克隆远程仓库:$ git clone [email protected]:westos007/gittest.git
代码仓库的重要性不容质疑,而单纯的Git服务器与命令行对工程师们十分不友好,也不方便项目与代码的管理,可视化代码仓库的出现便很好地解决了这些问题。
常见可视化代码仓库有 Github、Coding等,但是这些都是第三方的代码仓库,除了需要收费外,还有诸多限制,由于安全性与保密性,很多时候技术团队是不允许使用它们,唯一的解决方式就是自建代码仓库。Gitlab是开源的、优质的可视化代码仓库。
下面构建自己的Gitlab代码仓库。
官网 : https://about.gitlab.com/install/(目前为极狐版)软件下载(官方下载慢,推荐使用国内镜像站点)https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/(为开源ce版)
从官网下载rpm包。
拷贝到server2,由于具有依赖性,按照官网提示yum install
• 常用命令:• gitlab-ctl start # 启动所有 gitlab 组件•• gitlab-ctl stop # 停止所有 gitlab 组件•• gitlab-ctl restart # 重启所有 gitlab 组件•• gitlab-ctl status # 查看服务状态•• gitlab-ctl reconfigure # 重载 服务•• gitlab-ctl tail # 查看日志
更改配置文件,并利用指令重置。
查看状态及密码(首次登录要用)
访问172.25.254.2用户名为root,密码为上图选中部分
进来以后更改语言和密码
添加ssh密钥:将之前免密时生成的公钥,粘贴过来
测试
然后新建仓库
克隆
上传
jenkins是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。本文以 CentOS7 环境为例,总结了 Jenkins 的安装与配置。
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。
CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。
主要特色功能:
我们新开一台干净的虚拟机server3.
• 软件下载 : https://jenkins.io/ zh /download/• 国内镜像站: https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
安装系统自带的java-open.jdk
rpm -ivh jenkins-2.338-1.1.noarch.rpm
保证虚拟机联网的情况下,启动服务,因为启动需要从网上下载插件。
systemctl start jenkins
启动以后查看端口,8080已经起来。
然后浏览器访问172.25.254.3出现一下页面。该过程等待的时间会比较长。
由于比较慢,我们可以通过更新插件源的形式,提高速度。
curl -sSL https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/speed-test.sh | bash #查看更新源
从中查看哪个下载速度是最快的。(可以多次测量选一个相对稳定的)
浏览器访问 https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/
点击uodates,从中选择刚刚测试最快的链路。
复制其链接(删掉连接中的@master)将其同步到下面的位置
下载证书
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
重启服务会较快的进来
cat /var/lib/jenkins/secrets/initialAdminPassword #将生成的密码复制到浏览器的页面管理员密码中
直接使用右下角admin登录即可。然后点击保存并完成。开始使用Jenkins
进来以后先更改密码
设置——password——新密码——保存——重新登录
因为是以git形式拉取的,所以节点需要先安装git
添加server3公钥到git仓库
添加访问git仓库的私钥
一分钟后
添加gitlab插件
勾选插件——直接安装——安装成功后——点进项目——配置——构建触发器——勾选——高级——生成秘钥 ——保存
此时有报错
菜单——管理员——设置——网络——勾选——保存修改——重新填写上图的网址和令牌——添加
测试
此时会主动通知Jenkins,此时查看Jenkins项目test,会有一个#2
此时在server2写一个dockerfile,并上传到gitlab
Jenkins端
管理Jenkins——插件管理——可选插件——搜索docker——勾选合适插件——安装——完成
该插件构建并推送
点击配置——构建——去掉之前的执行shell——选择docker build and publish——启动仓库
因为要构建,所以server3要安装docker
配置yum源(我们直接使用阿里云的yum源)
安装docker引擎,才能构建后面的dockerfile
将server1上的docker.conf拷贝到server3的指定目录当中
使之生效,然后启动docker
域名解析不能少
设置一个阿里云的加速器,这样下东西快
自此docker引擎就设置成功了
选择仓库名称;
版本号需要自动更改填写变量;
填写连接的主机docker的套接字文件,unix://为本地的意思连接本机不需要证书,连接其他主机是需要证书的。
docker仓库正常填写,注意hosts文件要有解析,上面做过了。
认证需要添加,填写登录Huber仓库的用户密码,之后添加
点击高级,去掉强行拉去,本地有的就不用再强行拉取了。
设置完了,点击保存。
测试
点击右侧箭头
查看harbor上传成功
我们将dockerfile文件push到gitlab并触发jenkins自动构建将其上传到habor仓库,接下来对镜像做一个测试,运行一下docker,看有没有问题。
测试一下端口映射成功
jenkins构建修改,避免冲突
查看index已经发生变更
此时会主动出发test
user 先git push项目到gitlab,然后触发jenkins的test项目 build and push 镜像 harbor,然后触发jenkins另一个项目 docker_project_test ,来拉取镜像 并运行容器。
所有的功能在一台主机不安全,因此我们采用分布式,将交付测试任务重新放到server4主机。
新建虚拟机server4,server1为harbor仓库,server2为git客户端,server3为jenkins客户端(还要做构建用),server4为待部署(交付)的远程主机(做测试用)。
server4安装docker引擎。 进行域名解析等配置。
测试一下,成功后保存。
更改docker_project_test的设置:
删除之前的镜像
测试
刷新页面
设置成功