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是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。

Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

二、GitLab简介

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

主机配置

三、GitLab环境部署

安装依赖包。

sudo yum install -y curl policycoreutils-python openssh-server

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

sudo systemctl enable --now sshd

安装Postfix来发送通知邮件。

sudo yum install postfix

设置Postfix开机自启动。

sudo systemctl enable postfix

启动Postfix服务

输入命令vim /etc/postfix/main.cf打开main.cf文件并找到下图内容:

vim /etc/postfix/main.cf

将这行代码改为inet_interfaces = all,然后按Esc键,然后输入:wq并回车以保存并关闭main.cf文件。

输入命令sudo systemctl start postfix启动Postfix服务。

sudo systemctl start postfix

四、添加GitLab软件包仓库。

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

安装GitLab。

sudo EXTERNAL_URL="GitLab服务器的公网IP地址" yum install -y gitlab-ce

这个是我gitlab公网ip

安装完成会出现如下图片:

说明已经自动启动getlab服务,如没有出现以上情况则说明硬件配置太低或输入systemctl restart gitlab-runsvdir.service 重启gitlab服务

systemctl restart gitlab-runsvdir.service 

其他操作命令:

sudo gitlab-ctl status      #查看服务的状态
sudo gitlab-ctl start       #启动
sudo gitlab-ctl stop        #关闭
sudo gitlab-ctl restart     #重启
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb     #gitlab配置文件

如果修改了配置文件,需要执行 gitlab-ctl reconfigure 进行更新配置(只要修改了该文件,必须执行该命令才能生效)

gitlab-ctl reconfigure

执行 gitlab-ctl restart 重启服务,我这里不做修改

gitlab-ctl restart

服务启动成功后即可通过公网IP去访问,如果修改了端口,IP后面就要加上端口去访问

使用浏览器访问GitLab服务器的公网IP地址,显示如下页面,说明环境搭建成功

管理员默认为root用户,初始密码不能低于8位

把要克隆或要上传代码这台服务器的公钥cat /root/.ssh/id_rsa.pub打开公钥文件复制到gitlab服务器指定位置上

cat /root/.ssh/id_rsa.pub

添加公钥

#克隆代码仓库,然后测试是否能够上传代码到gitlab

yum -y install git                         #安装git
git clone git@139.9.91.82:root/test.git    #克隆远程仓库
cd test/
echo 11111 > 1.txt
git add .
git commit -m "add 1.txt"
git push

五、Jenkins环境部署

系统要求

最低推荐配置:

256MB可用内存

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

1GB+可用内存

50 GB+ 可用磁盘空间

软件配置:

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

安装JDK

yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

安装tomcat

[root@jenkins ~]# tar -xf apache-tomcat-9.0.6.tar.gz
[root@jenkins ~]# mv apache-tomcat-9.0.6 /usr/local/tomcat

访问jenkins官网 下载Jenkins

六、下载Jenkins

wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

两种方式使用其中一种就可以下载了

[root@jenkins ~]# ls
apache-tomcat-9.0.6.tar.gz baidu.html index.html jenkins.war
[root@jenkins ~]# cd /usr/local/tomcat/         #切换到tomcat目录
[root@jenkins tomcat]# pwd
/usr/local/tomcat
[root@jenkins tomcat]# rm -rf webapps/*         #删除tomcat根目录下其他默认文件
[root@jenkins tomcat]# ls webapps/
[root@jenkins tomcat]# mv /root/jenkins.war /usr/local/tomcat/webapps/ #移动下载好的jenkins.war包到tomcat网页根目录下
[root@jenkins tomcat]# ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
[root@jenkins tomcat]# ./bin/startup.sh         #启动tomcat服务
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@jenkins tomcat]# ls webapps/              #tomcat服务启动会自动解jenkins.war包
jenkins jenkins.war

然后访问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的部署操作

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

#再次克隆仓库

git clone git@139.9.91.82:root/test.git
cd test/
echo '测试Jenkins' > index.html
git add .
git commit -m 'add index.html'
git push

#提交之后去Jenkins页面看看

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

访问web测试页面

访问成功

十、总结

小坑:

错误提示:

#很多朋友使用最新版本的gitlab做自动部署时,在增加web钩子那一步,

#点击test push events时会报错:Url is blocked: Requests to the local network are not allowed

解决方法:

#这是因为新版的gitlab为了安全默认禁止了本地局域网地址调用web hook

#我们在设置里允许就行,具体步骤如下:

最后更新于