目录
前言
随着公司业务量的增大,以及我们的项目的迭代更新,这时我们就需要快速的部署相关项目代码。因此在我们的测试环境中,可以使用这种方式来实现自动拉取代码并部署,起到自动拉取代码的关键在于 webhook 配置,通过 webhook ,也就是我们所说的网络钩子,它会探测到 Gitlab 代码托管平台上有代码的提交,进而钩取相关的代码到对应的服务器,实现一种自动化部署,无需手动操作,极大地提升了我们的工作效率。接下来就来介绍一下这一套自动化部署的工作流程。
一、Jenkins 简介
1.1 什么是 Jenkins
Jenkins 是一个独立的开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。前身是 Hudson,是一个可扩展的持续集成引擎。可用于自动化各种任务,如构建,测试和部署软件。Jenkins 可以通过本机系统包 Docke 安装,甚至可以通过安装Java Runtime Environment 的任何机器独立运行。
1.2 应用场景
- 用于持续、自动地构建/测试软件项目。
- 监控一些定时执行的任务。
- 用于测试环境中快速自动部署。
1.3 Jenkins 特点
- 开源免费;
- 支持跨平台;
- master/slave 支持分布式的 build;
- 安装配置简单;
- 丰富的插件支持;
- 自动构建。
二、Gitlab 简介
2.1 什么是 Gitlab
GitLab是一个基于Git的平台,它集成了许多用于软件开发和部署以及项目管理的基本工具 。
2.2 Git/Github/Gitlab 区别
Git 是版本控制系统,Github是在线的基于Git的代码托管服务。 GitHub是2008年由Ruby on Rails编写而成。GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开的代码仓库,只有付费账户可以创建私有的代码仓库。 Gitlab解决了这个问题,可以在上面创建免费的私人repo。 2018年GitHub被微软收购后,为免费用户也开启了创建私人repo。
2.3 Gitlab 应用场景
- 使用版本控制在存储库中托管代码 ;
- 代码审核,合并请求;
- 使用内置构建,测试和部署,实现持续集成;
- Gitlab + docker 的应用等。
2.4 Gitlab 特点
- 可以作为git代码仓库;
- 方便进行CI,有灵活的配置脚本;
- 可通过docker可以快速部署。
三、服务部署
3.1 部署规划
-
服务器规划
服务器 配置 对外端口 用途 159.75.80.161(CentOS7.6) 4C/8G 22/8080 Jenkins 服务 159.75.80.46(CentOS7.6) 4C/8G 22/80 Gitlab 服务、web 服务 注意:
部署CICD的服务器的配置需要给的高一点,否则在构建过程中会出现内存溢出
的现象,导致无法构建成功。如在生产环境中给8C/16G的配置,这里仅做实验。还有就是:如果你们公司使用的是云服务器进行部署的CICD,那在构建部署到远程服务器时尽量通过内网
的方式进行,否则会占用大量外网带宽,导致服务器卡顿甚至奔溃的现象。 -
Gitlab-ce
版本:13.7.1
资源包(国内):https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ -
Jenkins
版本:2.263.1
资源包(官方):http://updates.jenkins-ci.org/download/war/2.263.1/jenkins.war
注意:
Jenkins为周更新版本,最好下载稳定版的。 -
JDK
版本:1.8.0
资源包(官方):https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html
资源包(国内):https://mirrors.huaweicloud.com/java/jdk/ -
Tomcat
版本:8.5.61
资源包(官方):https://tomcat.apache.org/ -
maven
版本:3.6.3
资源包(官方):https://maven.apache.org/ -
nodejs
版本:14.15.4
资源包(官方):https://nodejs.org/zh-cn/ -
git
版本:1.8.3
本次采用yum方式安装(版本不可控),可根据实际情况进行安装指定版本(比如使用编译安装)
资源包(官方):https://git-scm.com/
3.2 Gitlab 安装
1、添加 Gitlab-ce 的 yum 源
vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
gpgcheck=0
Enabled=1
Gpgkey=https://packages.gitlab.com/gpg.key
2、yum 安装
yum -y install gitlab-ce-13.7.1
3、查看安装的 Gitlab 版本
head -1 /opt/gitlab/version-manifest.txt
gitlab-ce 13.7.1
4、编辑配置文件
vim /etc/gitlab/gitlab.rb
external_url 'http://159.75.80.46' # 此处修改为本机IP或域名(如果有域名)
5、初始化
gitlab-ctl reconfigure
至此 Gitlab 已经安装完成,并已经启动。
6、验证
浏览器URL栏输入http://159.75.80.46/
,看到如下界面证明安装成功,接下来就是具体操作,其使用方方法在我前面的博客中有具体写到,感兴趣的朋友可以去看看Gitlab Server部署及代码提交处理流程。
3.3 Jenkins 安装
由于 Jenkins 版本是周更新的,所以我们可以根据需求选择稳定版进行安装。
1、安装环境
# Java
tar xzf jdk-8u261-linux-x64.tar.gz -C /usr/local/
mv /usr/local/jdk1.8.0_261/ java
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
# maven
tar xzf apache-maven-3.6.3-bin.tar.gz -C /usr/local/
mv /usr/local/apache-maven-3.6.3/ maven
vim /etc/profile.d/maven.sh
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
# nodejs
tar xf node-v14.15.4-linux-x64.tar.xz -C /usr/local/
mv /usr/local/node-v14.15.4-linux-x64/ nodejs
vim /etc/profile.d/nodejs.sh
export NODE_HOME=/usr/local/nodejs
export PATH=$PATH:$NODE_HOME/bin
2、安装 Tomcat
tar xzf apache-tomcat-8.5.61.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-8.5.61/ tomcat
3、下载资源包
wget http://updates.jenkins-ci.org/download/war/2.263.1/jenkins.war
4、部署 Jenkins
方式一:
cd /usr/local/tomcat/webapps/
rm -rf ./*
mv /root/jenkins.war . # 无需手动解压,本次采用此方式
/usr/local/tomcat/bin/startup.sh # 启动Tomcat
方式二:
cd /usr/local/tomcat/webapps/ROOT/
rm -rf ./*
mv /root/jenkins.war /usr/local/tomcat/webapps/ROOT/
jar -xf /usr/local/tomcat/webapps/ROOT/jenkins.war # 需手动解压
/usr/local/tomcat/bin/startup.sh # 启动Tomcat
5、验证
浏览器URL栏输入http://159.75.80.161:8080/jenkins/
,如果是方式二,则输入http://159.75.80.161:8080/
即可。然后cat一下页面红色方框中的内容即可得到初始管理员密码,复制粘贴即可。
忘记截图了。。。哈哈(很简单的)
四、项目构建与部署
4.1 Jenkins 基础配置
1、插件
nodejs # 构建前端项目
maven integration # 构建后端项目
webhook # 自动化构建(网络钩子)
gitlab # 基础配置
git plugin # 基础git
publish over ssh # 连接远程服务器
....
2、全局配置
3、系统配置
4.2 前端项目构建
1、新建工程/配置
Jenkins凭据说明:
2、构建
以上配置都完成后,点击立即构建,等待构建结果。以下为构建成功的实例:
3、验证
去我们的远程web服务器上去看看是否执行成功:
到这里可能有人会有疑问:webhook的效果怎么展现呢?
实际上我上面的结果是我进行的第二次构建,第一次构建是没有推送代码的手动构建;
第二次构建时代码推送后触发webhook进行自动构建的结果。
到此,前端项目构建完成!!
4.3 后端项目构建
1、新建工程/配置
2、构建
以上配置都完成后,点击立即构建,等待构建结果。以下为构建成功的实例:
3、验证
去我们的远程web服务器上去看看是否执行成功:
同样,和前端构建一样,我这里也是第二次进行构建了,所以webhook的效果就无法体现了,大家可以去亲自体验一下。
到此,后端项目构建完成!!
总结
从上面的两个实例不难看出,Jenkins + gitlab使我们的工作效率得到了很大的提升,没有部署CICD之前,打包构建都需要开发手动进行,然后再把数据包发给我们运维人员进行上线,相对于自动化构建来说还是比较麻烦的,有了CICD之后,开发人员只需要向gitlab服务提交代码,就可实现前后端项目自动化构建。更多资料大家可以参照gitlab、Jenkins官方文档,里面讲得很详细。