基于Jenkins和Gitlab的持续集成与部署
持续集成(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
[ ~]# 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
安装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
在项目中添加文件和文件夹等内容
配置访问权限
设置settings中的SSH KEY
配置Jenkins
查看是否存在Publish over SSH插件,若没有需要安装,本次部署安装的插件有
配置SSH设置
可以配置密码,也可以配置bak机器的SSH公钥,Test查看是否成功连接,能成功连接就保存SSH设置
配置连接GitLab的凭证
选择系统凭证中的全局凭证
添加凭证
选择SSH,填写Username,在Key中添加本机的私钥,点击ok
创建项目
进行项目的配置,选择Git源,填写GitLab机器的URL,选择刚配置的GitLab凭证
设置部署机器的信息
配置完成后点击Save进行保存
测试验证
部署测试
终端输出可看见部署成功
观察部署机器的目标目录中是否产生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项目查看是否成功以及部署机器中是否出现hello.txt
[[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的持续集成和部署环境搭建成功