部署Gitlab 以及配置CICD自动部署到服务器

徐隐水
2023-12-01

部署Gitlab 以及配置CI/CD自动部署到服务器

1、安装GIT

1.1 使用yum安装工具

#利用URL规则在命令行下工作的文件传输工具
yum -y install curl-devel
#expat就是SAX2模型的解析器 xml解析器
yum -y install expat-devel
#gettext是一种国际化与本地化系统,可以进行编程和翻译的操作
yum -y install gettext-devel
#众多的密码算法、公钥基础设施标准以及SSL协议
yum -y install openssl-devel
#zlib 适用于数据压缩的函式库
yum -y install zlib-devel

#全部安装
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

#安装git
yum -y install git-core

#查看git版本
git --verion

关于xml解析器的说明

目前的xml解析器一般有两种解析的形式.一种是DOM模型的,一种是SAX2模型的.DOM模型是讲xml文件中的结构解析成一棵树,然后再进行各种操作;而SAX2模型是类似与事件处理的方式从头到位解析xml文件.两种方式各有优劣,不过在嵌入式设备上用DOM模型的解析器似乎太耗内存,所以一般都用SAX2的解析器。

2、安装GITLAB

2.1 安装依赖,配置系统防火墙,把HTTP和SSH端口开放

sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

安装postfix发送通知邮件,如果想要使用另一种解决方案来发送电子邮件,则跳过该步骤,GitLab已安装后配置外部SMTP服务器。

sudo yum install postfix 
sudo systemctl enable postfix 
sudo systemctl start postfix

在/usr目录下创建一个git文件夹,将给gitlab和gitlab-runner的安装依赖上传到该目录下,然后进入到该目录下。

rpm -i gitlab-ce-12.6.1-ce.0.el7.x86_64.rpm   

安装成功后会出现一个狐狸的头像

GitLab安装完成后,修改GitLab的配置文件

vi /etc/gitlab/gitlab.rb

1、修改external_url ‘http://20.201.35.219’(自己的IP地址就行,我选的本机的ip)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t3RUFyGU-1632292364490)(F:/SunlineResourse/md文档/CICD_img/wps2.png)]

2、修改gitlab-rails[“backup_path”] = “/app/gitlab/backups”,大约在447行

3、修改gitlab-rails[“backup_keep_time”]= 604800,大约在455行

4、修改gitlab仓库目录,去掉注释,大约在501行

git_data_dirs({
	"default"=> {
	 "path" => "/app/gitlab/gitData"
	}
})

GitLab安装完成后需要初始化 GitLab

gitlab-ctl reconfigure

这一步等待的时间有点长,慢慢等待即可。

启动gitlab

gitlab-ctl start

查看GitLab启动状态

gitlab-ctl status

GitLab验证安装服务是否正确启动运行

gitlab-rake gitlab:check

定时任务备份

# 查看定时任务列表
crontab -l
# 编辑定时任务列表
crontab -e
# 重启定时任务
systemctl restart crond

定义执行计划

0 4 * * * /opt/gitlab/bin/gitlab-rake gitlab:bakup:create CRON=1
30 17 * * * /bin/bash /app/gitlab/bakups/auto_delete

auto_delete 脚本

find "/app/gitlab/backups" -ctime +1 -name "*.tar" -type f -exec rm -Rf {} \;

2.2 登录gitlab

在浏览器中输入直接IP地址(20.201.35.219)------登录地址是上面设置的url或者默认的url

第一次访问,会提示提示输入密码,此时的用户名是root。密码设置 完成后,自动跳转到登录界面

3、安装GITLAB_RUNNER

3.1 安装编译环境

3.1.1 安装jdk和maven

解压安装包

#安装jdk
mkdir –p /usr/java
# 将jdk-8u161-linux-x64.tar.gz上传到java目录下并解压
tar -zxvf jdk-8u161-linux-x64.tar.gz
#安装maven
cd /app/
# 将apache-maven-3.5.2.tar.gz上传到/app目录下并解压
tar -zxvf apache-maven-3.5.2.tar.gz 

修改环境变量

vi /etc/profile
#输入以下参数
export JAVA_HOME=/usr/java/jdk1.8.0_161
export JAVA_HOME=/app/apache-maven-3.5.2
export PATH=$HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

检查java 和 maven版本

java -version
mvn -version

3.2 rpm安装

rpm -ivh gitlab-runner-12.6.0-1.x86_64.rpm 

等待安装完成后重启服务

systemctl daemon-reload 
systemctl enable gitlab-runner
systemctl restart gitlab-runner

3.3 gitlab-runner注册

gitlab-runner register

首先需要输入自己的IP地址:[http://20.201.35.219/]

然后输入:token,token在登录gitlab界面可以在管理中心中的runner里获得

然后输入名称:devops

然后输入tags:jdk1.8,这里我们写jdk1.8就可以了

注:这是一个标签用于分支管理

在需要测试的文件配置中修改tags的信息

然后输入:shell

注册成功后,刷新gitlab页面会显示runner节点

案例:

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://20.201.35.219
Please enter the gitlab-ci token for this runner:
KzRUYhCA3b3hLZcsqrQn
Please enter the gitlab-ci description for this runner:
[bob-k8s3]: runner-1
Please enter the gitlab-ci tags for this runner (comma separated):
mytag
Registering runner... succeeded                     runner=KzRUYhCA
Please enter the executor: virtualbox, docker+machine, docker, parallels, shell, ssh, docker-ssh, docker-ssh+machine, kubernetes:
shell

gitlab-runner配置

vi /etc/gitlab-runner/config.toml

配置文件如下所示:

concurrent = 8
check_interval = 0

[session_server」
session_timeout = 1800
[[runners]]
name ="gitlab-runner取名”
url="http://20.201.35.219/*
token ="Gitlab上的令牌"
executor ="shell”
output_limit = 40960
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs」

注:output_limit:日志输出上限大小,默认40960

concurren限制了整个GitLab Runner能并发处理job的数量,0并不意味着无限

check_interval 设置检查job时的时间间隔为多少秒,值为0,默认3秒

limit:限制这个runner可以同时处理多少个作业,0(默认)意味着不限制

修改pipeline文件传输大小限制

4、流水线配置

官网链接 https://docs.gitlab.com/ee/ci/examples/#gitlab-cicd-examples

官网CI链接 https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates

variables:
	GIT_STARTEGY: clone
	env: normal
#场景
stages:
  - build
  - deploy
  - package

build-code-job:
  stage: build
  script:
    - echo "开始构建项目"
    - mvn clean compile -U
  expect:
  	- release
  tags:
  	- gitlab-runner-tag

job-deploy:
  stage: deploy
  script:
  	- echo "上传jar到私服"
    - mvn clean deploy -U


job-pavkage:
  stage: package
  script:
    - echo "打包项目"
    - mvn clean install -U
    - mvn install -Pdist

variables: 定义变量

GIT_STARTEGY: clone 流水线的Git策略,选择克隆(git clone)或拉取 (git fetcn)

stages:定义流水线所有的阶段

stage: 定义作业所处流水线的阶段(默认test阶段)

script:必须参数,运行器需要执行的脚本

expect:限制作业在什么时候创建

only:限制作业在什么时候不创建

tags: 作用使用的Runner运行器的标签列表

基本参数说明博客

https://www.cnblogs.com/wangshuyang/p/14110065.html

5、CI/CD自动部署到应用服务器实例

5.1 建立GITLAB_RUNNER服务器与应用服务器之间的互信

1、登录gitlab-runner服务器,建立公钥和私钥,执行命令后,回车三次

ssh-keygen -t rsa 

2、使用ssh-copy-id命令

ssh-copy-id -i .ssh/id_rsa.pub  user@192.168.xx.xx

如果没有这个命令,尝试使用

yum install openssh-clients*

3、如果安装不了ssh-copy-id,尝试使用

cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh"

输入密码后,即可尝试免密登录

ssh user@host 

5.2 编写ci文件,配置脚本部署springboot应用

gitlab-ci.yml

variables:
	GIT_STARTEGY: clone
	env: normal
#场景
stages:
  - build
  - deploy-jar
  - install

build-code-job:
  stage: build
  script:
    - echo "开始构建项目"
    - mvn clean compile -U
  expect:
  	- master
  tags:
  	- gitlab-runner-tag

job-deploy:
  stage: deploy
  script:
  	- echo "上传jar到私服"
    - mvn clean deploy -U
  only:
  	- master
  tags:
  	- gitlab-runner-tag

job-install:
  stage: install
  script:
    - echo "部署应用"
    - pwd
    - mvn clean install -U
    - pakageName=$(ls ./target/<test-1.0.0-SNAPSHOT.jar>)
    - scp -r $pakageName sunrise@192.168.31.166:/tmp/
    - scp -r ./start.sh sunrise@192.168.31.166:/tmp/
    - chmod +x install-to-server.sh
    - sh install-to-server.sh
  only:
	- master
  tags:
  	- gitlab-runner-tag
  dependencies:
  	- job-deploy

PS:

dependencies :当前作业依赖的其他作业,你可以使用依赖作业的归档文件

start.sh springboot项目启动脚本,位于项目的根目录

#!/bin/bash

nohup java -Dcom.sun.management.jmxremote.port=8888 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.ssl=false -Xloggc:./gc.log -verbose:dc -XX:-TraceClassUnloading
-XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCApplicationConcurrentTime -XX: +PrintGCTimeStamps 
-XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError
-jar /home/<user>/test-1.0.0-SNAPSHOT.jar &

install-to-server.sh 执行部署程序脚本,位于项目的根目录

#!/bin/bash

echo "停止应用程序"
ssh -t sunrise@192.168.31.166 "sh /home/sunrise/stop.sh && sleep 2"
echo "检查应用运行状态"
ssh -t sunrise@192.168.31.166 "ps aus | grep <ProjectName>"
echo "移除jar包和启动脚本"
ssh -t sunrise@192.168.31.166  "rm -r /home/sunrise/test-1.0.0-SNAPSHOT.jar && sleep 2"
ssh -t sunrise@192.168.31.166  "rm -r /home/sunrise/test-1.0.0-SNAPSHOT.jar"
ssh -t sunrise@192.168.31.166  "mv /tmp/start.sh /home/sunrise/ && sleep 1"
ssh -t sunrise@192.168.31.166  "mv /tmp/test-1.0.0-SNAPSHOT.jar /home/sunrise/ && sleep 1"
ssh -t sunrise@192.168.31.166  "chmod +x /home/sunrise/start.sh && sleep 1"
ssh -t sunrise@192.168.31.166 "nphup /home/sunrise/start.sh>test.log && sleep 8"
echo "查看应用程序启动日志"
ssh -t sunrise@192.168.31.166 "cat /home/sunrise/test.log"
ssh -t sunrise@192.168.31.166 "ps aux | grep test"

stop.sh 停止应用脚本,提前放到应用服务器即可

#!/bin/bash
ps aux | grep test-* | grep -v grep | awk '{print $2}' | xargs kill

基本的流程为

1、项目编译,打包

2、将jar包和启动脚本传输到应用服务器的tmp目录

3、停止应用,移除原来位置的jar包(当然也可以进行备份)

4、从tmp目录复制jar包到原来部署应用的路径下,给启动脚本增加执行权限

5、启动程序,查看应用启动日志

该博客只用于个人项目测试,不适用的企业级的项目。

art.sh>test.log && sleep 8"
echo “查看应用程序启动日志”
ssh -t sunrise@192.168.31.166 “cat /home/sunrise/test.log”
ssh -t sunrise@192.168.31.166 “ps aux | grep test”


**stop.sh 停止应用脚本,提前放到应用服务器即可**

```shell
#!/bin/bash
ps aux | grep test-* | grep -v grep | awk '{print $2}' | xargs kill

基本的流程为

1、项目编译,打包

2、将jar包和启动脚本传输到应用服务器的tmp目录

3、停止应用,移除原来位置的jar包(当然也可以进行备份)

4、从tmp目录复制jar包到原来部署应用的路径下,给启动脚本增加执行权限

5、启动程序,查看应用启动日志

该博客只用于个人项目测试,不适用的企业级的项目。

 类似资料: