持续集成(Continuous Integration,CI)是一种软件开发实践。在持续集成环节中,开发人员每人每天至少集成一次他们的开发成果。每次集成后会经过自动构建(包括静态扫描、安全扫描、自动测试等过程)的检验,以发现开发中的错误。这样做可以加快开发软件的速度和提升开发软件的效率
持续交付(Continuous Delivery)是指持续将开发好的软件新版本交付给质量团队或者用户进行评审,若评审通过了,代码即可进入生产阶段
持续部署(Continuous Deployment)是完成持续交付后的下一步,指的是开发的软件新版本通过评审以后,可以实现自动部署到生产环境中
准备三台Centos7虚拟机,设置IP地址和hostname,关闭防火墙和selinux,同步时间,修改IP地址和hostname的映射关系
hostname | ip |
---|---|
master | 192.168.29.132 |
bak | 192.168.29.138 |
gitlab | 192.168.29.140 |
在master中部署jenkins,gitlab机器中部署GitLab,而bak机器作为部署机器
安装openjdk
[root@master ~]# yum install java -y
[root@bak ~]# yum install java -y
[root@gitlab ~]# yum install java -y
SSH免密登陆
[root@master ~]# ssh-keygen
[root@bak ~]# ssh-keygen
[root@gitlab ~]# ssh-keygen
[root@master ~]# ssh-copy-id [email protected]
[root@master ~]# ssh-copy-id [email protected]
[root@bak ~]# ssh-copy-id [email protected]
[root@bak ~]# ssh-copy-id [email protected]
[root@gitlab ~]# ssh-copy-id [email protected]
[root@gitlab ~]# ssh-copy-id [email protected]
下载yum源
[root@master ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
[root@master ~]# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
[root@master ~]# yum install jenkins -y
#启动jenkis
[root@master ~]# systemctl start jenkins
#jenkins默认监听8080端口,若有冲突需要修改端口号或者停止其他服务
[root@master ~]# netstat -tnlp |grep 8080
tcp6 0 0 :::8080 :::* LISTEN 8597/java
#查看日志找初始化密码
[root@master ~]# 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
#安装依赖
[root@gitlab ~]# yum install -y curl openssh-server openssh-clients postfix policycoreutils
#下载GitLab的yum源
[root@gitlab ~]# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
#安装
[root@gitlab ~]# yum install -y gitlab-ce
#配置(时间较长)
[root@gitlab ~]# gitlab-ctl reconfigure
测试验证
访问http://ip,修改密码,通过root/password进行登录,自此GitLab部署完成
创建项目project1
在项目中添加文件和文件夹等内容
配置访问权限
设置settings中的SSH KEY
把master结点中的公钥拷贝到Key中,公钥结尾处需改为[email protected]
自此GitLab配置完成
查看是否存在Publish over SSH和Git插件,若没有需要安装,本机部署时安装的插件有
配置SSH设置
可以配置密码,也可以配置bak机器的SSH公钥,Test查看是否成功连接,能成功连接就保存SSH设置
配置连接GitLab的凭证
选择系统凭证中的全局凭证
添加凭证
选择SSH,填写Username,在Key中添加本机的私钥,点击ok
创建项目
进行项目的配置,选择Git源,填写GitLab机器的URL,选择刚配置的GitLab凭证
设置部署机器的信息
配置完成后点击Save进行保存
部署测试
终端输出可看见部署成功
观察部署机器的目标目录中是否产生GitLab项目中已存在的文件和文件夹
[root@bak ~]# ls /tmp/project1/
test test1 test2.txt test.sh test.txt
项目部署成功
持续集成与部署测试
在master中拉取GitLab项目进行开发,开发完成后进行上传
#下载文件
[root@master ~]# git config --global user.name "git"
[root@master ~]# git config --global user.email "[email protected]"
[root@master ~]# 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), 完成.
[root@master ~]# ls project1/
test test1 test2.txt test.sh test.txt
#模拟开发
[root@master ~]# echo hello > project1/hello.txt
[root@master ~]# ls project1/
hello.txt test test1 test2.txt test.sh test.txt
[root@master ~]# cat project1/hello.txt
hello
#上传开发后的项目
#定位到project1目录中
[root@master project1]# git init
重新初始化已存在的 Git 仓库于 /tmp/project1/.git/
[root@master project1]# git remote add origin [email protected]:root/project1.git
fatal: 远程 origin 已经存在。
[root@master project1]# git add .
[root@master project1]# git commit -m "first commit"
[master 58860da] first commit
1 file changed, 1 insertion(+)
create mode 100644 hello.txt
[root@master 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项目查看是否成功以及部署机器中是否出现hello.txt
[root@bak ~]# ls /tmp/project1/
hello.txt test test1 test2.txt test.sh test.txt
[root@bak ~]# cat /tmp/project1/hello.txt
hello
自此基于Jenkins和GitLab的持续集成和部署环境搭建成功