基于Jenkins和Gitlab的持续集成与部署

CI/CD

持续集成(Continuous Integration,CI)是一种软件开发实践。在持续集成环节中,开发人员每人每天至少集成一次他们的开发成果。每次集成后会经过自动构建(包括静态扫描、安全扫描、自动测试等过程)的检验,以发现开发中的错误。这样做可以加快开发软件的速度和提升开发软件的效率
持续交付(Continuous Delivery)是指持续将开发好的软件新版本交付给质量团队或者用户进行评审,若评审通过了,代码即可进入生产阶段
持续部署(Continuous Deployment)是完成持续交付后的下一步,指的是开发的软件新版本通过评审以后,可以实现自动部署到生产环境中

前期准备

准备三台Centos7虚拟机,设置IP地址和hostname,关闭防火墙和selinux,同步时间,修改IP地址和hostname的映射关系

hostnameip
master192.168.29.132
bak192.168.29.138
gitlab192.168.29.140

在master中部署jenkins,gitlab机器中部署GitLab,而bak机器作为部署机器
安装openjdk

[ ~]# yum install java -y
[ ~]# yum install java -y
[ ~]# yum install java -y

SSH免密登陆

[ ~]# ssh-keygen
[ ~]# ssh-keygen
[ ~]# ssh-keygen
[ ~]# ssh-copy-id 
[ ~]# ssh-copy-id 
[ ~]# ssh-copy-id 
[ ~]# ssh-copy-id 
[ ~]# ssh-copy-id 
[ ~]# ssh-copy-id

部署Jenkins

下载yum源

[ ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
[ ~]# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
[ ~]# yum install jenkins -y
#启动jenkis
[ ~]# systemctl start jenkins
#jenkins默认监听8080端口,若有冲突需要修改端口号或者停止其他服务
[ ~]# netstat -tnlp |grep 8080
tcp6       0      0 :::10086                :::*                    LISTEN      8597/java
#查看日志找初始化密码
[ ~]# cat /var/log/jenkins/jenkins.log |grep  -A2 Please
Please use the following password to proceed to installation:

653fde4a04864f5589949d61f2b82415 #初始化密码

测试验证
访问ip:8080,按照引导流程安装推荐的插件和设置管理员等信息后可进入主页
若插件安装不成功,可自行下载相应插件并手动配置
Manage Jenkins->Manage Plugins->Advanced->Upload Plugin->Upload
基于Jenkins和Gitlab的持续集成与部署
基于Jenkins和Gitlab的持续集成与部署
基于Jenkins和Gitlab的持续集成与部署
基于Jenkins和Gitlab的持续集成与部署
自此Jenkins部署成功

部署GitLab

安装GitLab

#安装依赖
[ ~]# yum install -y curl openssh-server openssh-clients postfix policycoreutils
#下载GitLab的yum源
[ ~]# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
#安装
[ ~]# yum install -y gitlab-ce
#配置(时间较长)
[ ~]# gitlab-ctl reconfigure

测试验证
访问http://ip,修改密码,通过root/password进行登录,自此GitLab部署完成

部署项目

配置GitLab

创建项目project1
基于Jenkins和Gitlab的持续集成与部署基于Jenkins和Gitlab的持续集成与部署
在项目中添加文件和文件夹等内容
基于Jenkins和Gitlab的持续集成与部署
基于Jenkins和Gitlab的持续集成与部署
配置访问权限
设置settings中的SSH KEY

配置Jenkins

查看是否存在Publish over SSH插件,若没有需要安装,本次部署安装的插件有
基于Jenkins和Gitlab的持续集成与部署
配置SSH设置
基于Jenkins和Gitlab的持续集成与部署
基于Jenkins和Gitlab的持续集成与部署
可以配置密码,也可以配置bak机器的SSH公钥,Test查看是否成功连接,能成功连接就保存SSH设置
基于Jenkins和Gitlab的持续集成与部署
配置连接GitLab的凭证
选择系统凭证中的全局凭证
基于Jenkins和Gitlab的持续集成与部署
添加凭证
基于Jenkins和Gitlab的持续集成与部署
选择SSH,填写Username,在Key中添加本机的私钥,点击ok
基于Jenkins和Gitlab的持续集成与部署
创建项目
基于Jenkins和Gitlab的持续集成与部署
基于Jenkins和Gitlab的持续集成与部署
进行项目的配置,选择Git源,填写GitLab机器的URL,选择刚配置的GitLab凭证
基于Jenkins和Gitlab的持续集成与部署
设置部署机器的信息
基于Jenkins和Gitlab的持续集成与部署
配置完成后点击Save进行保存

测试验证

部署测试
基于Jenkins和Gitlab的持续集成与部署
终端输出可看见部署成功
基于Jenkins和Gitlab的持续集成与部署
观察部署机器的目标目录中是否产生GitLab项目中已存在的文件和文件夹

[[email protected] ~]# ls /tmp/project1/
test  test1  test2.txt  test.sh  test.txt

项目部署成功
持续集成与部署测试
在master中拉取GitLab项目进行开发,开发完成后进行上传

#下载文件
[[email protected] ~]# git config --global user.name "git"
[[email protected] ~]# git config --global user.email "[email protected]"
[[email protected] ~]# git clone [email protected]:root/project1.git
正克隆到 ‘project1‘...
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 15 (delta 2), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (15/15), 完成.
处理 delta 中: 100% (2/2), 完成.
[[email protected] ~]# ls project1/
test  test1  test2.txt  test.sh  test.txt

#模拟开发
[[email protected] ~]# echo hello > project1/hello.txt
[[email protected] ~]# ls project1/
hello.txt  test  test1  test2.txt  test.sh  test.txt
[[email protected] ~]# cat project1/hello.txt 
hello

#上传开发后的项目
#定位到project1目录中
[[email protected] project1]# git init
重新初始化已存在的 Git 仓库于 /tmp/project1/.git/
[[email protected] project1]# git remote add origin [email protected]:root/project1.git
fatal: 远程 origin 已经存在。
[[email protected] project1]# git add .
[[email protected] project1]# git commit -m "first commit"
[master 58860da] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 hello.txt
[[email protected] project1]# git push -u origin master
枚举对象: 3, 完成.
对象计数中: 100% (3/3), 完成.
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (2/2), 251 bytes | 251.00 KiB/s, 完成.
Total 2 (delta 1), reused 0 (delta 0)
To 192.168.29.140:root/project1.git
   7a7a1a4..58860da  master -> master
分支 ‘master‘ 设置为跟踪来自 ‘origin‘ 的远程分支 ‘master‘

查看GitLab中的项目情况,hello.txt已存在
基于Jenkins和Gitlab的持续集成与部署
执行Jenkins项目查看是否成功以及部署机器中是否出现hello.txt
基于Jenkins和Gitlab的持续集成与部署
基于Jenkins和Gitlab的持续集成与部署

[[email protected] ~]# ls /tmp/project1/
hello.txt  test  test1  test2.txt  test.sh  test.txt
[[email protected] ~]# cat /tmp/project1/hello.txt 
hello

自此基于Jenkins和GitLab的持续集成和部署环境搭建成功