什么是持续集成?
持续集成 Continuous Integration
简单来说就是在开发过程当中,可以频繁地将代码部署到主干上。
持续交付 Continuous Delivery
指的是在持续集成的环境基础上,将代码部署到预发环境。
持续部署 Continuous Deoloyment
在持续交付的基础上,将代码部署到生产环境的自动化。
gitlab简介
GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源,可通过 Web界面来进行管理git仓库。
jenkins简介
Jenkins是一个开源的、且基于JAVA代码开发的持续集成系统,用于监控持续重复的工作,旨在
提供一个开放易用的软件平台,使软件的持续集成变成可能。
搭建gitlab
[root@gitlab ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix policycoreutils-python #安装所需组件
[root@gitlab ~]# systemctl start postfix #开启postfix邮件服务
[root@gitlab ~]# systemctl enable postfix
[root@gitlab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm #安装gitlab
[root@gitlab ~]# rpm -ivh gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb #配置访问路径,第十三行红色部分配置成本机ip地址,也可以改为自定义的域名
[root@gitlab ~]# gitlab-ctl reconfigure #重置gitlab
http://192.168.100.102 #访问gitlab
使用gitlab
gitlab-ctl stop #关闭gitlab
gitlab-ctl start #启动gitlab
gitlab-ctl restart #重启gitlab
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb #主配置文件
/var/log/gitlab #日志地址
gitlab-ctl reconfigure #慎用!!!
gitlab设置中文页面如下↓
配置邮件报警
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com" #SMTP服务器
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "2468154124@qq.com" #邮箱账号
gitlab_rails['smtp_password'] = "deuyzxdrnlvdecdf" #这个授权码要去qq邮箱里面才可以得到
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '2468154124@qq.com' #邮箱账号
[root@gitlab ~]# gitlab-ctl reconfigure #重载gitlab
[root@gitlab ~]# gitlab-rails console #登录控制台发送测试邮件
irb(main):001:0> Notify.test_email('2468154124@qq.com', 'test', 'biubiubiu').deliver_now
#标题内容
#进邮箱可以看到刚刚编辑的邮件已经送到。
修改邮箱默认为admin@example.com,修改成我们自己的创建组时会发送邮件警告
创建一个群组
##来邮件了
##添加新成员
将用户test1添加到刚刚创建的test组里
Gitlab用户在组中有五种权限:
Guest、Reporter、Developer、Master、Owner
Guest:可以创建issue、发表评论,不能读写版本库
Reporter:可以克隆代码,不能提交,QA(测试人员)、PM(主管或者产品经理)可以赋予这个权限
Developer:可以克隆代码、开发、提交、push,RD(研发人员)可以赋予这个权限
Master:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限
Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限
##去网易邮箱设置密码
##使用新账号登录gitlab
可以看到我们设置的测试组。
##创建项目
##在项目中新建一个
[root@gitlab ~]# ssh-keygen -t rsa ##配置密钥,一直回车即可
[root@gitlab ~]# cat .ssh/id_rsa.pub ##查看公钥
将公钥上传到gitlab上
[root@gitlab ~]# yum -y install git ##安装git
[root@gitlab ~]# git clone git@192.168.100.102:test1/prod1.git 测试免密,从下图可以看到从gitlab克隆到本地不需要密码。
搭建jenkins
##因为jenkins是java写的,所以我们需要先安装jdk。
[root@jenkins ~]# tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/ ##解压jdk
[root@jenkins ~]# mv /usr/local/jdk1.8.0_171/ /usr/local/java/
[root@jenkins ~]# vim /etc/profile
##配置jdk环境变量
[root@jenkins ~]# source /etc/profile ##使环境变量生效
##查看java版本
[root@jenkins ~]# wget https://pkg.jenkins.io/redhat-stable/jenkins-2.222.4-1.1.noarch.rpm ##安装jenkins
[root@jenkins ~]# rpm -ivh jenkins-2.222.4-1.1.noarch.rpm
[root@jenkins ~]# vim /etc/sysconfig/jenkins
创建软链并启动jenkins
##jenkins默认使用8080端口
访问jenkins并安装相关插件
http://192.168.100.108:8080
安装jenkins所需插件
Credentials # 签名证书管理插件
Gitlab # 安装后从 GitLab 获取代码
Git 和 Git Client # 用于 Jenkins 在 GitLab 中拉取源码
GitLab Hook # GitLab 触发 Jenkins 构建项目
Gitlab Authentication # GitLab 和 Jenkins 认证插件
SSH Plugin # 进程执行 Shell 脚本
Publish Over SSH # 用于通过 SSH 部署应用
将jenkins公钥上传到gitlab上
[root@jenkins ~]# ssh-keygen -t rsa
[root@jenkins ~]# cat .ssh/id_rsa #将私钥上传到jenkins上
##在jenkins上新建一个项目
##保存配置,下载一下代码
##蓝色代表成功,红色则失败
部署apache服务器
[root@httpd ~]# yum -y install httpd
[root@httpd ~]# systemctl start httpd
[root@jenkins ~]# ssh-copy-id root@192.168.100.103 ##jenkins配置与httpd免密
创建脚本
调用脚本
##验证
在jenkins服务器上生成 Token,openssl rand 生成随机密码
注:-hex:输出结果为16进制数据; 数字12是指定生成的随机字符为12字节,即24个 16 进制个数。
##在jenkins上构建触发器
当我们配置好触发器后,只要我们在gitlab上修改代码,gitlab自动通知Jenkins构建任务并把它部署到对应的服务器上。