使用GitLab CI/CD自动化热部署SpringBoot项目
文章目录
1. 引言
我们用java
语言开发出项目后,往往会打成war
包或jar
包(其他语言可能打成其他包),然后拷贝到服务器上,再双击startup.bat
或者运行sh startup.sh
指令。
这对于单体应用还好,如果是微服务(分布式),那就比较麻烦。因而,我们需要考虑自动化部署项目。
自动化部署可以使用Jenkins
部署,可以参考我的这篇文章:使用Jenkins实现自动化部署。
当然,也可以使用gitlab ci/cd
机制部署。接下来,我便以spring boot
项目来说明如何使用GitLab CI/CD
自动化热部署。
2. gitlab安装
使用如下指令安装gitlab-ce
(linux
服务器)
yum install gitlab-ce
3. 配置ip地址
- 使用
vi
指令修改gitlab.rb
文件
vi /etc/gitlab/gitlab.rb
进行如下修改gitlab
的访问ip
,ip
用本机(若服务器分为内网IP
和外网IP
,则使用内网IP
):
external_url 'http://192.168.2.134'
- 使用
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
- 保存,重启
gitlab
gitlab-ctl reconfigure
4. 安装gitlab-runner
- 载可执行文件
sudo wget -O/usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
- 设置执行权限
sudo chmod +x /usr/local/bin/gitlab-runner
- 创建
GitLab CI
账户并分到root
组
useradd --comment 'GitLab Runner'--create-home gitlab-runner --shell /bin/bash
usermod -g root gitlab-runner
- 运行服务
gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
gitlab-runner start
5. 注册gitlab-runner
-
打开
gitlab
项目 ->Settings
->CI / CD
->Runners settings
。 -
记下
url
和token
(如下图片中涂黑的部分),若服务器分为内网IP
和外网IP
,则url
为服务器的内网IP
地址。下面注册使用。
- 注册,登录
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
- 配置
ssh
,便于远程生产环境服务器部署项目,在终端界面输入。(切换以gitlab-runner
身份登录)
sudo su - gitlab-runner
- 生成秘钥,在终端继续输入
ssh-keygen -t rsa
然后一直按回车即可。不要输入密码。
- 到
gitlab
所在服务器的/home/gitlab-runner/.ssh/目录
会看到生成的秘钥对如图所示:
- 将
id_rsa.pub
公钥文件拷贝到生产环境服务器中,在终端输入:
cd /home/gitlab-runner/.ssh
ssh-copy-id root@192.168.0.5(此IP为生产环境服务器IP)
- 测试是否可以免密登录
ssh root@192.168.0.5
- 将私钥内容复制到
gitlab
中,在终端输入:
cat ~/.ssh/id_rsa
出现如下图所示:
-
拷贝一下红框里的内容,进入
gitlab
想要部署的项目中(没有项目可自行创建一个测试项目)。 -
选择用户设置->CI/CD->变量 ->Add Variable ,将秘钥填入后,点击
Add Variable
按钮,如下图所示:
至此,我们的配置就完成了。
6.2 若服务器采用秘钥文件方式登录,请按照以下配置方式配置SSH
- 将秘钥文件拷贝到gitlab所在服务器的
/home/gitlab-runner/.ssh
目录中即可。如图所示:
7. 安装jdk和maven
请自行在gitlab
所在服务器安装jdk
和maven
。因为这里主要讲如何配置gitlab-ci/cd
,所以jdk
及maven
安装请自行百度,非常简单,在此略过。
注意:安装完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"
说明:
-
scp $(cd dirname $0; pwd)/target/${package_name} ${server_username}@${server_ip}:${server_path}/${package_name}
意思是将gitlab打包后的文件拷贝到生产环境服务器中。 -
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
,会看到如下图所示:
- 点对勾按钮 -> build,进入之后,如下图所示,会看到自己得项目已经热部署完毕。
10. 总结
gitlab ci/cd
在开发中很有用,因而,不管是运维还是开发,应该需要掌握这个技能。
相关文章
- 利用IDEA创建maven多模块项目(web模块采用springboot)
- SpringBoot 分布式session共享方案(并且可实现session在多个项目中共享)
- eclipse中的springBoot项目 执行maven build 和maven install 报错
- 精品springboot家政服务预订系统
- SpringBoot学习笔记-15:第十五章-SpringBoot 与部署
- React+SpringBoot项目部署
- SpringBoot项目如何进行打包部署
- SpringBoot项目maven 打包时跳过测试
- java springboot项目 相对路径获取
- 如何使用JRebel部署SpringBoot项目,神器介绍!
- springboot 项目部署后 404的问题
- 【项目精选】基于SpringBoot+Vue实现的仿掘金论坛系统(包含完整源码以及部署教程)
- 使用idea创建springboot的maven项目(jar)
- springboot cron表达式在线生成地址
- idea2020.2创建springboot项目打开卡死
- Springboot+vue 实现汽车租赁系统(毕业设计二)(前后端项目分离)
- 【SpringBoot项目实战+思维导图】瑞吉外卖⑤(新增套餐、套餐分页查询、删除套餐、短信发送、手机验证码登录)
- springboot项目中的普通Session和使用redis存储session
- Springboot项目修改html后不需要重启---springboot项目的热部署
- SpringBoot系列三:SpringBoot基本概念(统一父 pom 管理、SpringBoot 代码测试、启动注解分析、配置访问路径、使用内置对象、项目打包发布)
- 用Intellij IDEA创建第一个SpringBoot项目
- 查看springboot项目中初始化了哪些bean【actuator的简单使用】
- Wagon部署springboot项目读取配置文件错误问题
- 打造SpringBootTemplate(SpringBoot项目的模版)
- IDEA中Springboot项目部署到阿里云linux服务器
- 【Nginx】Nginx + Tomcat + SpringBoot 部署项目