gitlab-ci docker maven 自动化流水线部署 springboot多模块项目

一、准备

首先 需要两台服务器(这里为了下面方便理解,我们约定这两台服务器地址、名称和系统)
1、gitlab 服务器 服务器A(地址10.10.10.7)(内存大于4g不然会一直死)( CentOS Linux 7 (Core))
2、springboot服务部署服务器 服务器B(地址10.10.10.8)( CentOS Linux 7 (Core))

二、配置gitlab服务器

这个比较简单,或者可以直接用官方的gitlab应该都是可以的
参考 https://www.jianshu.com/p/7e6ea273833d

添加yum源

cat> /etc/yum.repos.d/gitlab-ce.repo<< EOF
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/  
gpgcheck=0
enabled=1
EOF

安装依赖包

yum install curl policycoreutils-python openssh-server

安装

yum makecache    #清楚缓存
yum install gitlab-ce

更改访问地址

vim /etc/gitlab/gitlab.rb
external_url 'http://10.10.10.7:9001'

重新加载配置,启动gitlab-ce

[root@gitlab ~]# gitlab-ctl reconfigure
[root@gitlab ~]# gitlab-ctl start 

之后就可以直接打开上面的url http://10.10.10.7:9001 开始访问了,然后就是修改密码,创建项目等等了,在此不赘述了(开的哪个端口别忘记打开防火墙)

三、安装gitlab-runner、并注册

gitlab-runner是安装在你的应用服务器上帮你完成自动化部署的一个工具
我是基于docker安装的所以首先服务器上要有docker,这里就不写了,因为有脚本了很简单 参考 https://cloud.tencent.com/developer/article/2061665

用docker的话可以用一个非常好用的图形化管理工具Portainer,是docker官方的,安装非常简单 两步走
(参考 https://blog.youkuaiyun.com/asenseof/article/details/107895383)

docker pull portainer/portainer
docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /mnt/docker/portainer:/data portainer/portainer

然后访问服务器地址+上面映射的端口号了http://10.10.10.8:9000,就可以了
开始安装runner

也是非常简单
1、拉取镜像,启动容器

sudo docker pull gitlab/gitlab-runner
sudo docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest

2、进入容器

sudo docker exec -it gitlab-runner bash

3、注册runner
首先输入下面的命令开始注册

gitlab-runner register

输入Gitlab实例的地址
地址是你手动设置Runner区域里面的URL

> Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
http://xxx

输入token
token是你手动设置Runner区域里面的令牌

> Please enter the gitlab-ci token for this runner
xxx

输入Runner的描述

> Please enter the gitlab-ci description for this runner
[hostname] my-runner

输入与Runner关联的标签
标签是为了让后期在CI脚本中指定选择某个或者多个Runner

> Please enter the gitlab-ci tags for this runner (comma separated):
test

输入Runner的执行器
由于我们都是基于Docker,所以这里选择执行器为Docker

> Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker

设置执行器的版本

> Please enter the Docker image (eg. ruby:2.1):
alpine:latest

退出容器

exit

通过以上命令后,就创建成功runner啦,这时候我们去GitLab中我们创建Runner的区域刷新就能看到了

3、修改Runner配置文件

vim /srv/gitlab-runner/config/config.toml

找到volumes配置,修改结果为如下,分别是挂载了宿主机docker的sock文件和Maven的缓存,减少拉取Jar包的时间消耗,其中
"/home/gitlab-runner/.m2:/root/.m2"这块为Maven的Jar包存放地址,左边为宿主机目录,右边为容器内的Jar包存储路径,这个需要根据自己使用的Maven镜像而定,在volumes配置下方增加一行配置,防止Runner重复拉取镜像

pull_policy = "if-not-present"
volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock", "/home/gitlab-runner/.m2:/root/.m2"]

这个目录后面写ci文件的时候我们会讲到
最后重启Runner

docker restart gitlab-runner

四、编写.gitlab-ci.yml、docker文件

1、.gitlab-ci.yml文件的编写
.gitlab-ci.yml是在git的root目录下面的一个脚本文件,用来执行自动化部署的
在这里插入图片描述
这里放个例子

image: docker:stable
variables:
  TAG: root/app:v0.1
  MAVEN_OPTS: "-Dmaven.repo.local=/root/.m2/repository"
cache:
  key: dockerlayer-ci-cache
  paths:
    - .m2/repository
    - /dafeng-official/target/*.jar


stages:
  - package
  - deploy
maven-package:
  image: maven:3.5-jdk-8-alpine
  stage: package
  tags:
    - build_docker
  script:
    - mvn clean package -Dmaven.test.skip=true $MAVEN_OPTS --settings=/root/.m2/settings.xml
  cache:
    key: dockerlayer-ci-cache
    paths:
      - dafeng-official/target/official.jar

  only:
    - main
build-master:
  stage: deploy
  tags:
    - deploy_docker
  cache:
    key: dockerlayer-ci-cache
    paths:
      - .m2/repository/
      - dafeng-official/target/*.jar
  script:
    - cd dafeng-official
    - docker build -t $TAG .
    - docker rm -f ohmy || true
    - docker run -d --name ohmy -p 2200:2200 $TAG
  only:
    - main

这里注意我是用了自己的maven仓库和配置文件,这里要自己配置一下在自己的宿主机上面新建文件夹home->gitlab-runner->.m2 创建如下文件
在这里插入图片描述
2、docker文件的编写
我用来测试的这个项目使用了springboot 多模块的方式编写的
我的dockerfile 写在了子模块的根目录下
在这里插入图片描述
然后我的dockerfile内容为

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/official.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

五、测试使用

然后基本上就是提交代码到dev 合并到main分支上,触发流水线
在这里插入图片描述
显示上面的样式就是完成了

### 配置 GitLab Runner 使用 Docker 执行器 #### 修改Runner详细配置 为了使 GitLab Runner 能够使用 Docker 执行器,在 `/etc/gitlab-runner/config.toml` 文件中,需针对 `[runners.docker]` 进行设置。此部分允许指定用于构建作业的 Docker 映像以及其它参数,例如 `sysctls` 的调整[^1]。 ```toml [[runners]] name = "docker-runner" url = "https://gitlab.example.com/" token = "your_runner_token_here" executor = "docker" [runners.docker] tls_verify = false image = "alpine:latest" privileged = false disable_cache = false volumes = ["/cache"] shm_size = 0 sysctls = ["net.core.somaxconn=1024", "vm.max_map_count=262144"] # 设置内核参数 ``` 上述配置文件中的 `image` 字段定义了默认使用的 Docker 基础镜像;而 `volumes` 则指定了挂载到容器内的卷路径。对于某些特定需求的应用程序来说,可能还需要额外设定诸如内存共享区大小 (`shm_size`) 或者特权模式 (`privileged`) 等选项来满足其运行条件。 #### 注册Runner并进入容器创建Runner 当首次注册一个新的 runner 并打算采用 docker 作为执行器时,可以通过命令行工具完成这一过程: ```bash sudo gitlab-runner register \ --non-interactive \ --url https://gitlab.example.com/ \ --registration-token your_registration_token_here \ --executor docker \ --description "My Docker Runner" \ --docker-image alpine:latest ``` 这条指令会引导系统自动向 GitLab 实例报告新加入的 runner,并将其绑定至指定 URL 和令牌下工作。同时通过传递给 `--executor` 参数值为 `docker` 来表明希望该 runner 可以利用本地已有的 Docker 环境来进行 CI 流水线任务处理[^4]。 #### 创建Jenkinsfile简单示例 虽然提到的是 Jenkinsfile ,但在 GitLab 中同样适用类似的 `.gitlab-ci.yml` 文件来描述持续集成流程。下面是一个简单的 Spring Boot 应用程序对应的 CI 配置例子: ```yaml stages: - build - test - deploy variables: DOCKER_DRIVER: overlay2 build_app: stage: build script: - echo Building the application... - mvn clean package -DskipTests=true artifacts: paths: - target/*.jar test_app: stage: test script: - echo Running tests... - mvn test deploy_app: stage: deploy script: - echo Deploying to production environment... ``` 这段 YAML 格式的文档定义了一个三阶段的工作流——编译、测试和部署。它假设项目根目录存在 Maven 构建脚本(`pom.xml`),并且能够顺利打包成 JAR 文件供后续操作使用[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值