CI & CD 持续集成部署

博客作者:联系请点击,搬运不易,希望请作者喝咖啡,可以点击联系博客作者

CI / CD 的优点是什么?

  • 集成: GitLab CI / CD是GitLab的一部分,支持从计划到部署(甚至更多)的单个对话
  • 开源: CI / CD是开源GitLab社区版和专有GitLab企业版的一部分
  • 易于学习: 请参阅GitLab的 快速入门 指南
  • 无缝: 是单个GitLab应用程序的一部分,具有出色的用户体验
  • 可扩展: 测试可以在单独的计算机上分布式运行,您可以根据需要添加任意数量的计算机
  • 更快的结果: 每个构建可以拆分为多个作业,这些作业可以在多台计算机上并行运行
  • 针对交付进行了优化: 多个阶段,手动部署门, 环境变量

特征

  • 多平台: 您可以在Unix,Windows,macOS和任何其他支持Go的平台上执行构建。
  • 多语言: 构建脚本是命令行驱动的,并且可以与Java,PHP,Ruby,C和任何其他语言一起使用。
  • 稳定: 您的构建在与GitLab不同的机器上运行。
  • 并行构建: GitLab CI / CD在多台机器上拆分构建,以实现快速执行。
  • 实时日志记录: 合并请求中的链接将您带到动态更新的当前构建日志。
  • 灵活的管道: 您可以在每个阶段定义多个并行作业,并且可以 触发其他构建
  • 版本管道: 一个 .gitlab-ci.yml文件 包含您的测试,整个过程的步骤,使每个人都能贡献更改,并确保每个分支获得所需的管道。
  • 自动缩放: 您可以 自动旋转虚拟机 ,以确保立即处理您的构建并将成本降至最低。
  • 构建工件: 您可以将二进制文件和其他构建工件上载到 GitLab并浏览和下载它们。
  • 本地测试多个执行程序 ,您可以 在本地复制测试
  • Docker支持: 您可以使用自定义Docker映像, 作为测试的一部分启动 服务构建新的Docker映像,甚至可以在Kubernetes上运行。
  • 容器注册表: 内置的容器注册表, 用于存储,共享和使用容器映像。
  • 受保护的变量: 在部署期间使用每个环境保护的变量安全地存储和使用机密信息
  • 环境: 定义多个环境,包括临时 Review Apps ,请参阅每个环境的部署历史记录。

一、Jenkins简介

Jenkins
Jenkins
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

二、GitLab简介

Iterate faster, innovate together
GitLab
GitLab是一个完整的DevOps平台,作为单个应用程序提供,从根本上改变了开发,安全和运营团队的协作方式。GitLab帮助团队将软件交付时间从数周缩短至数分钟,降低开发成本,并降低应用程序漏洞的风险,同时提高开发人员的生产率。

主机配置

三、GitLab环境部署

安装依赖包。

1
sudo yum install -y curl policycoreutils-python openssh-server
Copied!

设置SSH开机自启动并启动SSH服务。

1
sudo systemctl enable --now sshd
Copied!

安装Postfix来发送通知邮件。

1
sudo yum install postfix
Copied!

设置Postfix开机自启动。

1
sudo systemctl enable postfix
Copied!

启动Postfix服务

输入命令vim /etc/postfix/main.cf打开main.cf文件并找到下图内容:
1
vim /etc/postfix/main.cf
Copied!
将这行代码改为inet_interfaces = all,然后按Esc键,然后输入:wq并回车以保存并关闭main.cf文件。
输入命令sudo systemctl start postfix启动Postfix服务。
1
sudo systemctl start postfix
Copied!

四、添加GitLab软件包仓库。

1
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
Copied!

安装GitLab。

1
sudo EXTERNAL_URL="GitLab服务器的公网IP地址" yum install -y gitlab-ce
Copied!
这个是我gitlab公网ip
安装完成会出现如下图片:
说明已经自动启动getlab服务,如没有出现以上情况则说明硬件配置太低或输入systemctl restart gitlab-runsvdir.service 重启gitlab服务
1
systemctl restart gitlab-runsvdir.service
Copied!
其他操作命令:
1
sudo gitlab-ctl status #查看服务的状态
2
sudo gitlab-ctl start #启动
3
sudo gitlab-ctl stop #关闭
4
sudo gitlab-ctl restart #重启
Copied!
1
[[email protected] ~]# vim /etc/gitlab/gitlab.rb #gitlab配置文件
Copied!
如果修改了配置文件,需要执行 gitlab-ctl reconfigure 进行更新配置(只要修改了该文件,必须执行该命令才能生效)
1
gitlab-ctl reconfigure
Copied!
执行 gitlab-ctl restart 重启服务,我这里不做修改
1
gitlab-ctl restart
Copied!
服务启动成功后即可通过公网IP去访问,如果修改了端口,IP后面就要加上端口去访问
使用浏览器访问GitLab服务器的公网IP地址,显示如下页面,说明环境搭建成功
管理员默认为root用户,初始密码不能低于8位
把要克隆或要上传代码这台服务器的公钥cat /root/.ssh/id_rsa.pub打开公钥文件复制到gitlab服务器指定位置上
1
cat /root/.ssh/id_rsa.pub
Copied!

添加公钥

#克隆代码仓库,然后测试是否能够上传代码到gitlab
1
yum -y install git #安装git
2
git clone [email protected]:root/test.git #克隆远程仓库
3
cd test/
4
echo 11111 > 1.txt
5
git add .
6
git commit -m "add 1.txt"
7
git push
Copied!

五、Jenkins环境部署

系统要求

最低推荐配置:

256MB可用内存
1GB可用磁盘空间(作为一个Docker容器运行jenkins的话推荐10GB)为小团队推荐的硬件配置:
1GB+可用内存
50 GB+ 可用磁盘空间

软件配置:

Java 8—​无论是Java运行时环境(JRE)还是Java开发工具包(JDK)都可以。

安装JDK

1
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
Copied!

安装tomcat

1
[[email protected] ~]# tar -xf apache-tomcat-9.0.6.tar.gz
2
[[email protected] ~]# mv apache-tomcat-9.0.6 /usr/local/tomcat
Copied!
访问jenkins官网 下载Jenkins
Jenkins
Jenkins

六、下载Jenkins

1
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
Copied!
两种方式使用其中一种就可以下载了
2
apache-tomcat-9.0.6.tar.gz baidu.html index.html jenkins.war
3
[[email protected] ~]# cd /usr/local/tomcat/ #切换到tomcat目录
4
[[email protected] tomcat]# pwd
5
/usr/local/tomcat
6
[[email protected] tomcat]# rm -rf webapps/* #删除tomcat根目录下其他默认文件
7
[[email protected] tomcat]# ls webapps/
8
[[email protected] tomcat]# mv /root/jenkins.war /usr/local/tomcat/webapps/ #移动下载好的jenkins.war包到tomcat网页根目录下
9
[[email protected] tomcat]# ls
10
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
11
[[email protected] tomcat]# ./bin/startup.sh #启动tomcat服务
12
Using CATALINA_BASE: /usr/local/tomcat
13
Using CATALINA_HOME: /usr/local/tomcat
14
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
15
Using JRE_HOME: /usr
16
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
17
Tomcat started.
18
[[email protected] tomcat]# ls webapps/ #tomcat服务启动会自动解jenkins.war包
19
jenkins jenkins.war
Copied!
然后访问http://139.159.189.191:8080/jenkins 见到如下图片就说明安装成功:

插件安装:

注意:

打×的插件是由于网络传输导致的安装失败,后面再重新安装即可。

插件安装可以自定义,可以用社区推荐安装,工作需要的插件一定要安装上

安装完成出现如下页面:

如果插件没安装完会出现如下页面,点纠正安装相关插件就好了:
必须需要添加的6个插件:Gitlab Hook、Build Authorization Token Root、Publish Over SSH、Gitlab Authentication、Gitlab、Git Parameter

七、配置Jenkins

进来系统设置如下图,然后鼠标往下滑:

部署密钥:

#添加主机:系统管理 - 系统设置 找到Publish over SSH
开始添加要部署代码的主机,注意一定是要能够ssh登陆的用户。
这里要注意的是要先把jenkins服务器的公钥传送给要部署代码的那台机然后再点测试
#添加完主机之后,新建一个项目,开始配置构建操作
添加完后,选择root或git用户进行认证没有任何提示表示成功

构建触发器

这里一定要勾上

八、配置Gitlab,当有代码提交时,触发Jenkins的部署操作

测试提交代码是否会部署到远程主机

#再次克隆仓库
1
git clone [email protected]:root/test.git
2
cd test/
3
echo '测试Jenkins' > index.html
4
git add .
5
git commit -m 'add index.html'
6
git push
Copied!
#提交之后去Jenkins页面看看

九、查看部署好的web服务器

访问web测试页面

访问成功

十、总结

小坑:

错误提示:

#很多朋友使用最新版本的gitlab做自动部署时,在增加web钩子那一步,
#点击test push events时会报错:Url is blocked: Requests to the local network are not allowed

解决方法:

#这是因为新版的gitlab为了安全默认禁止了本地局域网地址调用web hook
#我们在设置里允许就行,具体步骤如下: