gitlab多模块工程单个模块实现自动化部署(CI/CD)

演示目的

多模块的工程,可以在gitlab上进行单个模块的自动化部署,不,这里是手动打包部署,应该叫做半自动化。这里只做参考,告诉大家gitlab可以在多模块工程中实现单个模块的自动化部署。

环境说明

两个服务器上的部署:

  • 192.168.10.113:dockergitlabgitlab-runner

  • 192.168.10.114:gateway服务、web-demo服务、mavengitdocker

需求

提交子模块(比如只提交了web-demo的代码,这是gateway不用重新打包部署)到IP192.168.10.113上的gitlab,实现IP在192.168.10.114中的当前子模块的手动打包部署。

gatewayweb-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.114maven仓库中。

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 docker

gitlab安装

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上看到,如图:
gitlab多模块工程单个模块实现自动化部署(CI/CD)_第1张图片

安装maven

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配置文件中的镜像地址、以及仓库地址

安装jdk

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

安装高版本的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.shDockerfile在示例工程子模块的目录下,这里就不贴了

打包部署

进入gitlab,在sakura-boot-demo工程的CI/CD中的Pipelines中,手动进行打包部署子模块,如图:(图其实并不重要,看到图会有种心理安慰,这种方案是可行的)

gitlab多模块工程单个模块实现自动化部署(CI/CD)_第2张图片

正常部署后,就可以正常在浏览器访问在114上的应用。如图:

gitlab多模块工程单个模块实现自动化部署(CI/CD)_第3张图片

你可能感兴趣的:(gitlab,docker,CI/CD)