多模块的工程,可以在gitlab
上进行单个模块的自动化部署,不,这里是手动打包部署,应该叫做半自动化。这里只做参考,告诉大家gitlab
可以在多模块工程中实现单个模块的自动化部署。
两个服务器上的部署:
192.168.10.113:docker
、gitlab
、gitlab-runner
192.168.10.114:gateway
服务、web-demo
服务、maven
、git
、docker
提交子模块(比如只提交了web-demo的代码,这是gateway不用重新打包部署)到IP
在192.168.10.113
上的gitlab
,实现IP在192.168.10.114
中的当前子模块的手动打包部署。
gateway
和web-demo
两个服务都在同一个工程下,工程结构如下:
sakura-boot-demo
├─gateway
├─web-demo
如果使用我给的工程玩,需要注意,没有水平是玩不转的
1、需要在192.168.10.114
上装一个maven私服,将sakura-boot这个脚手架工程拉到本地,然后mvn deploy
上传到私服的maven仓库中
如果不想装maven私服,也将 sakura-boot 脚手架在本地mvn install
打包,将本地仓库的jar包上传到192.168.10.114
的maven
仓库中。
2、示例工程需要连nacos
以及mysql
,要在示例工程的配置改好你们自己的nacos和mysql地址,虽然我的文档写的还是很清楚明白的,新手一时半会应该玩不转。
3、最好还是使用你们自己写得demo、这篇博客只做一个参考,条条大路通罗马。
一步一步来,还是很简单的,期间如果遇到很多报错,那就排查错误,可以翻到这篇博客的最后,看我成功部署后截的图,增强一点点信心。
两台服务器都安装
1、查看是否安装了docker,没有就安装docker
docker version
2、安装yum-utils:
yum install -y yum-utils device-mapper-persistent-data lvm2
3、为yum源添加docker仓库位置
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4、安装docker
yum install docker-ce
5、启动docker
systemctl start docker
192.168.10.113上安装
1、拉取gitlab镜像
docker pull gitlab/gitlab-ce:latest
2、新建目录存放gitlab的配置、日志、数据文件
mkdir -p /mydata/gitlab/{config,logs,data}
3、启动gitlab
docker run --detach \
--publish 10443:443 --publish 80:80 --publish 1022:22 \
--name gitlab \
--restart always \
--volume /mydata/gitlab/config:/etc/gitlab \
--volume /mydata/gitlab/logs:/var/log/gitlab \
--volume /mydata/gitlab/data:/var/opt/gitlab \
-e GITLAB_ROOT_PASSWORD=12345678 \
--privileged=true \
gitlab/gitlab-ce:latest
4、修改配置/mydata/gitlab/config/gitlab.rb
,修改为你自己的ip
external_url 'http://192.168.10.113'
gitlab_rails['gitlab_ssh_host'] = '192.168.10.113'
gitlab_rails['gitlab_shell_ssh_port'] = 1022
5、成功启动后,访问gitlab所在的192.168.10.113
,账号/密码:root/12345678
192.168.10.113上安装
1、拉取gitlab-runner
镜像
docker pull gitlab/gitlab-runner:alpine-bleeding
2、运行
docker run --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /mydata/gitlab-runner:/etc/gitlab-runner \
-d gitlab/gitlab-runner:alpine-bleeding
3、进入容器内
docker exec -it gitlab-runner /bin/bash
4、在容器内使用如下命令注册runner
gitlab-runner register
5、输入注册地址、token、执行器类型等信息,ssh执行器能远程执行Linux命令,非常好用,推荐使用这个!
进入gitlab
中左侧的Settings
=>CI/CD
,再点击右侧Runners
=>Specific runners
,就能看到注册的URL和token了
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.10.113/
Enter the registration token:
GR1348941VZWTQHN4o_durs4EgMPw
Enter a description for the runner:
[5001feae67fd]: sakura-gateway
# 这个tag很重要,一个工程中有多个模块时,可以做到子模块单独打包部署
Enter tags for the runner (comma-separated):
sakura-gateway
Enter optional maintenance note for the runner:
sakura-gateway
# 使用ssh连接应用服务器
Registering runner... succeeded runner=GR1348941VZWTQHN4
Enter an executor: ssh, virtualbox, docker-ssh+machine, kubernetes, docker, parallels, shell, docker+machine, custom, docker-ssh:
ssh
# 执行.gitlab-ci.yml脚本的服务器,即打包部署应用的的服务器ip
Enter the SSH server address (for example, my.server.com):
192.168.10.114
# 打包部署应用服务器的ssh端口
Enter the SSH server port (for example, 22):
22
# 打包部署应用服务器的账号
Enter the SSH user (for example, root):
root
# 打包部署应用服务器的密码
Enter the SSH password (for example, docker.io):
yangfan
Enter the path to the SSH identity file (for example, /home/user/.ssh/id_rsa):
(回车即可)
web-demo
应用的runner
,设置tag时,设置为web-demo
,其他步骤一致,后面的自动化脚本需要用到这两个tag
来区分打包部署配置好后,在容器内/etc/gitlab-runner
就能看到config.toml
,里面有上面的的配置
192.168.10.114上安装
1、下载Maven的Linux安装包,下载地址:https://maven.apache.org/download.cgi
2、解压
tar -zxvf apache-maven-3.8.5-bin.tar.gz -C /usr/local
3、修改/etc/profile
文件,添加环境变量配置(版本注意一下,看你装的是哪一个)
export MAVEN_HOME=/usr/local/apache-maven-3.8.5
export PATH=$PATH:$MAVEN_HOME/bin
4、修改settings
配置文件中的镜像地址、以及仓库地址
192.168.10.114上安装
1、卸载centos7自带的jdk
rpm -qa | grep java | xargs rpm -e --nodeps
rpm -qa | grep jdk | xargs rpm -e --nodeps
2、下载JDK 8,下载地址:AdoptOpenJDK 清华大学开源软件镜像站
3、解压,注意jdk版本
tar -zxvf OpenJDK8U-jdk_x64_linux_xxx.tar.gz -C /usr/local
4、在/etc/profile
文件中添加环境变量JAVA_HOME
,注意修改jdk版本
export JAVA_HOME=/usr/local/jdk1.8.0_291
export JRE_HOME=/$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
5、使更改生效
source /etc/profile
192.168.10.114上安装
1、安装 centos7 WANDisco 仓库
yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm
2、安装git(如已安装低版本可以先卸载)
yum -y install git
3、查看版本
git --version
按照上面的配置后,两个示例应用会在192.168.10.114这台服务器上打包部署运行
应用服务器上新建必要文件夹
mkdir -p /mydata/build/{web,gateway}
.gitlab-ci.yml
脚本
stages:
- build
- deploy
# 打包任务
build-gateway:
stage: build
# 指定标签,只要具有该标签的runner才会执行(gitlab-runner注册时配置)
tags:
- sakura-gateway
script:
# 打包gateway,-am表示会将依赖的包也打进来,如果common包也作为这个项目的一个子模块
- mvn clean install -pl gateway -am install -Dmaven.test.skip=true
# 将jar包、Dockerfile、运行脚本复制到指定目录
# gateway模块
- cp gateway/target/*.jar /mydata/build/gateway/gateway.jar
- cp gateway/Dockerfile /mydata/build/gateway/Dockerfile
- cp gateway/run.sh /mydata/build/gateway/run.sh
# 每次提交代码到gitlab都不会自动打包部署,手动执行
when: manual
# 打包任务
build-web-demo:
stage: build
# 指定标签,只要具有该标签的runner才会执行(gitlab-runner注册时配置)
tags:
- web-demo
script:
# 打包web-demo,-am表示会将依赖的包也打进来,如果common包也作为这个项目的一个子模块
- mvn clean install -pl web-demo -am install -Dmaven.test.skip=true
# 将jar包、Dockerfile、运行脚本复制到指定目录
# web模块
- cp web-demo/target/*.jar /mydata/build/web/web.jar
- cp web-demo/Dockerfile /mydata/build/web/Dockerfile
- cp web-demo/run.sh /mydata/build/web/run.sh
# 每次提交代码到gitlab都不会自动打包部署,手动执行
when: manual
# 部署任务
deploy-gateway:
stage: deploy
tags:
- sakura-gateway
script:
# 进入指定目录并执行运行脚本
- cd /mydata/build/gateway
- chmod +x run.sh
- ./run.sh
# 每次提交代码到gitlab都不会自动打包部署,手动执行
when: manual
# 部署任务
deploy-web-demo:
stage: deploy
tags:
- web-demo
script:
# 进入指定目录并执行运行脚本
- cd /mydata/build/web
- chmod +x run.sh
- ./run.sh
# 每次提交代码到gitlab都不会自动打包部署,手动执行
when: manual
run.sh
和Dockerfile
在示例工程子模块的目录下,这里就不贴了
进入gitlab
,在sakura-boot-demo
工程的CI/CD
中的Pipelines
中,手动进行打包部署子模块,如图:(图其实并不重要,看到图会有种心理安慰,这种方案是可行的)
正常部署后,就可以正常在浏览器访问在114
上的应用。如图: