zl程序教程

您现在的位置是:首页 >  后端

当前栏目

使用GitLab CI/CD自动化热部署SpringBoot项目

SpringBoot项目部署自动化 gitlab CI CD 使用
2023-09-27 14:26:40 时间

1. 引言

我们用java语言开发出项目后,往往会打成war包或jar包(其他语言可能打成其他包),然后拷贝到服务器上,再双击startup.bat或者运行sh startup.sh指令。

这对于单体应用还好,如果是微服务(分布式),那就比较麻烦。因而,我们需要考虑自动化部署项目。

自动化部署可以使用Jenkins部署,可以参考我的这篇文章:使用Jenkins实现自动化部署

当然,也可以使用gitlab ci/cd机制部署。接下来,我便以spring boot项目来说明如何使用GitLab CI/CD自动化热部署。

在这里插入图片描述

2. gitlab安装

使用如下指令安装gitlab-celinux服务器)

yum install gitlab-ce 

3. 配置ip地址

  1. 使用vi指令修改gitlab.rb文件
vi /etc/gitlab/gitlab.rb

进行如下修改gitlab的访问ipip用本机(若服务器分为内网IP和外网IP,则使用内网IP):

external_url 'http://192.168.2.134'
  1. 使用vi指令修改gitlab.xml文件
 vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.xml

在该文件中进行如下配置:

## GitLab settings
gitlab:
  ## Web server settings (note: host is the FQDN, do not include http://)
  #设置gitlab SSH和http克隆代码的地址(若服务器分为内网IP和外网IP,则使用内网IP)
  host: 192.168.2.134
  port: 80
  https: false
  1. 保存,重启gitlab
gitlab-ctl reconfigure

4. 安装gitlab-runner

  1. 载可执行文件
sudo wget -O/usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
  1. 设置执行权限
sudo chmod +x /usr/local/bin/gitlab-runner
  1. 创建GitLab CI账户并分到root
 useradd --comment 'GitLab Runner'--create-home gitlab-runner --shell /bin/bash

 usermod -g root gitlab-runner
  1. 运行服务
gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

gitlab-runner start

5. 注册gitlab-runner

  1. 打开gitlab项目 -> Settings -> CI / CD -> Runners settings

  2. 记下urltoken(如下图片中涂黑的部分),若服务器分为内网IP和外网IP,则url为服务器的内网IP地址。下面注册使用。

在这里插入图片描述

  1. 注册,登录gitlab所在服务器,在终端界面输入
sudo gitlab-runner register
(第一次注册可能需要输入服务器密码进行验证)

# 输入你的 GitLab URL
Please enter the gitlab-ci coordinator URL(e.g. https://gitlab.com )
https://192.168.2.134(输入上图的url,若服务器分为内网IP和外网IP,则url为服务器的内网IP地址)
 
# 输入 注册令牌 来注册 Runner
Please enter the gitlab-ci token forthis runner
xxx(输入上图的token)
 
# 输入 Runner 说明
Please enter the gitlab-ci description forthis runner
my-runner
 
# 输入 Runner 的 tags
Please enter the gitlab-ci tags forthisrunner(comma separated):
my-tag
 
# 输入 Runner 执行方式,这里选择shell
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell
 
#到这一步gitlab和gitlab-runner就配置好了

6. 配置SSH秘钥

6.1 服务器采用账号密码方式登录,请按照以下配置方式配置SSH

  1. 配置ssh,便于远程生产环境服务器部署项目,在终端界面输入。(切换以gitlab-runner身份登录)
sudo su - gitlab-runner
  1. 生成秘钥,在终端继续输入
ssh-keygen -t rsa

然后一直按回车即可。不要输入密码。

  1. gitlab所在服务器的/home/gitlab-runner/.ssh/目录会看到生成的秘钥对如图所示:

在这里插入图片描述

  1. id_rsa.pub公钥文件拷贝到生产环境服务器中,在终端输入:
cd /home/gitlab-runner/.ssh

ssh-copy-id root@192.168.0.5(此IP为生产环境服务器IP)
  1. 测试是否可以免密登录
ssh root@192.168.0.5
  1. 将私钥内容复制到gitlab中,在终端输入:
cat ~/.ssh/id_rsa

出现如下图所示:

在这里插入图片描述

  1. 拷贝一下红框里的内容,进入gitlab想要部署的项目中(没有项目可自行创建一个测试项目)。

  2. 选择用户设置->CI/CD->变量 ->Add Variable ,将秘钥填入后,点击Add Variable按钮,如下图所示:

在这里插入图片描述

至此,我们的配置就完成了。

6.2 若服务器采用秘钥文件方式登录,请按照以下配置方式配置SSH

  1. 将秘钥文件拷贝到gitlab所在服务器的/home/gitlab-runner/.ssh目录中即可。如图所示:

在这里插入图片描述

7. 安装jdk和maven

请自行在gitlab所在服务器安装jdkmaven。因为这里主要讲如何配置gitlab-ci/cd,所以jdkmaven安装请自行百度,非常简单,在此略过。

注意:安装完Maven后,要给mvn设置权限,否则会在执行打包时,报“权限不够”问题。使用chmod 777 路径/apache-maven-xx/bin/mvn

8. 编写gitlab-ci.yml文件

stages:
  - build
 
build:
  stage: build
  # gitlab-runner注册时自己定义的tags名称
  tags:
    - MYRUN
  variables:
    #服务在docker中的名称
    docker_compose_name: process_data
    #服务打包后的包名
    package_name : robot2_process_data-0.0.1-SNAPSHOT.jar
    #生产环境服务器登录用户名
    server_username : root
    #生产环境服务器IP地址
    server_ip : 159.110.10.91
    #生产环境jar包存放目录
    server_path : /home/robot/robot2_process_data
    #生产环境服务器登录密钥
    server_public_key: 159.110.10.91_Key.pem
 
  before_script:
    - echo "测试mvn权限"
    - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
  script:
    - mvn -Dmaven.test.skip=true clean package
  after_script:
    #####服务器为账号密码登录时,使用以下语句#####
    #将gitlab-runner生成的jar包文件拷贝到服务器生产环境中
    #- scp  $(cd `dirname $0`; pwd)/target/${package_name} ${server_username}@${server_ip}:${server_path}/${package_name}
    #到生产环境服务器执行启动指令,这里我使用的docker-compose,读者可自行定义。
    #- ssh  ${server_username}@${server_ip} "cd /home/robot; docker-compose stop $docker_compose_name; docker-compose --compatibility up -d  $docker_compose_name; exit"
 
    #####服务器为秘钥文件登录时,使用以下语句#####
    - chmod 700 /home/gitlab-runner/.ssh/${server_public_key}
    #将gitlab-runner生成的jar包文件拷贝到服务器生产环境中
    - scp  -i /home/gitlab-runner/.ssh/${server_public_key}  $(cd `dirname $0`; pwd)/target/${package_name} ${server_username}@${server_ip}:${server_path}/${package_name}
    #到生产环境服务器执行启动指令,这里我使用的docker-compose,读者可自行定义。
    - ssh  -i /home/gitlab-runner/.ssh/${server_public_key} ${server_username}@${server_ip} "cd /home/robot; docker-compose stop $docker_compose_name; docker-compose --compatibility up -d  $docker_compose_name; exit"

说明:

  1. scp $(cd dirname $0; pwd)/target/${package_name} ${server_username}@${server_ip}:${server_path}/${package_name} 意思是将gitlab打包后的文件拷贝到生产环境服务器中。

  2. ssh ${server_username}@${server_ip} "cd /home/robot; docker-compose stop $docker_compose_name; docker-compose --compatibility up -d $docker_compose_name; exit 意思是在服务器中重启我的项目。我用的是docker-compose方式部署的。如果读者用的是其他方式,那可以使用其他方式的命令来重启自己的项目。

9. 项目部署

1 .将项目传到gitlab中,进入gitlab自己的项目中,选择CI/CD,会看到如下图所示:

在这里插入图片描述

  1. 点对勾按钮 -> build,进入之后,如下图所示,会看到自己得项目已经热部署完毕。

在这里插入图片描述

在这里插入图片描述

10. 总结

gitlab ci/cd在开发中很有用,因而,不管是运维还是开发,应该需要掌握这个技能。