多模块的工程,可以在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示例工程地址:sakura-boot-demo
如果使用我给的工程玩,需要注意,没有水平是玩不转的
1、需要在192.168.10.114上装一个maven私服,将sakura-boot这个脚手架工程拉到本地,然后mvn deploy上传到私服的maven仓库中
- 安装maven私服博客:maven私服仓库搭建、上传或者拉取jar包
如果不想装maven私服,也将 sakura-boot 脚手架在本地mvn install打包,将本地仓库的jar包上传到192.168.10.114的maven仓库中。
2、示例工程需要连nacos以及mysql,要在示例工程的配置改好你们自己的nacos和mysql地址,虽然我的文档写的还是很清楚明白的,新手一时半会应该玩不转。
3、最好还是使用你们自己写得demo、这篇博客只做一个参考,条条大路通罗马。
一步一步来,还是很简单的,期间如果遇到很多报错,那就排查错误,可以翻到这篇博客的最后,看我成功部署后截的图,增强一点点信心。
安装docker两台服务器都安装
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 dockergitlab安装
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
Gitlab Runner安装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,里面有上面的的配置
也可以在gitlab上看到,如图:
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配置文件中的镜像地址、以及仓库地址
安装jdk192.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安装高版本的git
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上的应用。如图:



