springboot项目基于Docker的gitlab-runner的CI/CD实践,实操问题记录并解决办法

1. 项目以容器方式构建

1.1. 在项目中添加dockerFile【springboot项目的根目录下】

FROM mcr.microsoft.com/java/jdk:11-zulu-alpine
RUN adduser --disabled-password --gecos '' xxx
USER xxx
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} /main/program/hxl-test/test.jar
ENTRYPOINT ["java","-jar","/main/program/hxl-test/test.jar"] 

1.2. maven中集成docker镜像构建: 添加spotify的dockerFile maven 插件

【踩坑:原来的spring-boot-maven-plugin不要移除,否则会启动找不到main文件】

 <!-- 使用Maven插件直接将应用打包为一个Docker镜像 -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <executions>
                    <execution>
                        <id>build</id>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>tag-latest</id>
                        <goals>
                            <goal>tag</goal>
                        </goals>
                        <configuration>
                            <tag>latest</tag>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <repository>${docker.image.prefix}/${project.name}</repository> //设置镜像名
                    <tag>${project.version}</tag> //设置tag号
                    <dockerfile>${project.basedir}/Dockerfile</dockerfile> //指定Dockerfile路径,根据Dockerfile创建镜像
                    <retryCount>${docker.build.retry.count}</retryCount>
                </configuration>
            </plugin>

1.3. 使用docker-compose在开发和测试环境中编排容器

在项目根目录创建docker-compose文件夹,并创建编写docker-compose.yml

version: '1.0'
services:
  redis:
    image: redis:alpine
    container_name: hxl_redis
    ports:
      - "12300:12300"
    restart: always
    command: redis-server --port 12300 --requirepass yourPwd #创建一个包含密码的redis容器

  hxl-test:
    image: hxl-test/testci:1.0.0
    restart: always
    entrypoint:
      - java
      - -XX:+UseShenandoahGC
      - -Xms256m
      - -XX:+UnlockExperimentalVMOptions
      - -XX:ShenandoahUncommitDelay=1000
      - -XX:ShenandoahGuaranteedGCInterval=10000
      - -jar
      - /main/program/hxl-test/test.jar
    ports:
      - "12400:12200" #前面的是对外开放的端口,后面的容器启动端口
    volumes:
      - /main/program/hxl-test/logs2:/main/program/hxl-test/logs #前面的是宿主机目录,后面的容器中的目录
    depends_on:
      - redis

1.4. 添加 gitlab-runner 流水线

这里的安装,均可参照docker官网以及gitlab-runner的官方文档:

docker:https://docs.docker.com/engine/install/centos/
docker-compose:https://docs.docker.com/compose/install/
gitlab-runner:https://docs.gitlab.com/runner/install/linux-manually.html

1.4.1. 安装Docker Engine - Community
检查docker是否安装以及版本

$ sudo docker version

1.4.2. 安装docker-compose

1.4.3. 安装Gitlab-runner
安装git maven

sudo yum install git maven

修改启动用户,文件:/etc/systemd/system/gitlab-runner.service。

1.4.4. 注册runner并编写.gitlab-ci.yml
【这里gitlab-runner方式选的shell方式即可】

1.4.5. 在项目根目录下创建编写 .gitlab-ci.yml

stages:
  - build
  - deploy-dev

build:
  stage: build
  tags:
    - master
  only:
    refs:
      - master
  script:
    - mvn clean package -Dmaven.test.skip=true

deploy-dev:
  stage: deploy-dev
  tags:
    - master
  only:
    refs:
      - master
  script:
    - sudo -u xxx whoami
    - sudo -u xxx mkdir -p /main/program/hxl-test
    - sudo -u xxx cp -r ./docker-compose/. /main/program/hxl-test #复制当前项目的docker-compose下的文件到/main/program/hxl-test目录,即docker-compose.yml文件
    - cd /main/program/hxl-test
    - sudo -u xxx sudo docker-compose up -d #启动容器
  needs:
    - job: build

2.操作过程中遇到的错误及解决办法

1.管道第一步跑失败:

百度说是git版本过低,但是同一个环境中另一个项目可成功运行,所以排除,最后发现修改项目的如下配置即可:
在这里插入图片描述

解决办法:在项目的设置中,找到流水线通用设置,从git fetch----》 git clone
在这里插入图片描述

2.部署到服务器时,docker-compose启动找不到对应的镜像

在这里插入图片描述

解决办法
镜像的tag没有对应上,项目中的docker-compose.yml中的镜像名为:
在这里插入图片描述

但是由于我在.gitlab-ci.yml中配置了这个命令,将会覆盖我在pom中设置的tag,采用maven自己创建的tag号,取消这行代码,再次上传,管道即可通过
在这里插入图片描述

3.日志没有按照预想中的打印在某个文件夹下

解决办法
查看容器的日志挂载信息:

 docker inspect -f "{{.Mounts}}" 33ddaa88da36
[{bind  /main/program/hxl-test/logs /main/program/hxl-test/logs  rw true rprivate}]

//或者使用命令:

 docker inspect hxl-test_hxl-test_1 | grep Mounts -A 10
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/main/program/hxl-test/logs",
                "Destination": "/main/program/hxl-test/logs",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        "Config": {

具体解决办法
修改配置,日志输出文件为:

logging.file.name=/main/program/hxl-test/logs/hxl-test.log

修改挂载信息:

volumes:前面的是宿主机的路径,后面的是容器中的目录
ports:前面的是对外开放的端口,后面的是容器中的端口

volumes:
  - /main/program/hxl-test/logs:/main/program/hxl-test/logs

最后重新运行,查看指定挂载目录的日志文件映射成功:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
GitLab-RunnerGitLab提供的一个开源工具,可以用于在GitLab上运行CI/CD任务。通过GitLab-Runner,可以方便地实现自动化的构建、测试、集成和部署等任务。 下面是一些使用GitLab-Runner打造锋利的CI/CD的方法: 1. GitLab-Runner安装和配置:首先需要安装GitLab-Runner,并将其配置到GitLab服务器上。可以通过Docker容器、二进制包或源码编译的方式安装GitLab-Runner,然后在GitLab服务器上注册Runner,并设置Runner的执行环境和权限等参数。 2. 编写CI/CD脚本:在GitLab上创建项目,并在项目中编写CI/CD脚本,定义任务的执行流程和步骤。可以使用GitLab提供的CI/CD工具和插件,也可以使用第三方工具和脚本库。 3. 构建、测试和集成:通过GitLab-Runner执行CI/CD任务,自动化构建、测试和集成代码,并生成测试报告和代码覆盖率报告等文档。可以使用各种编程语言和框架,如Java、Python、Ruby、Node.js等。 4. 部署和发布:通过GitLab-Runner将代码部署到目标服务器上,并执行自动化发布流程。可以使用容器化技术、配置管理工具、自动化部署工具等实现高效、可靠的部署和发布。 5. 监控和反馈:通过GitLab的监控和反馈机制,及时发现和解决CI/CD任务中的问题和错误,并持续优化任务的执行效率和稳定性。可以使用各种监控工具和日志分析工具,如Prometheus、Grafana、ELK等。 总之,使用GitLab-Runner打造锋利的CI/CD,可以提高开发和运维的效率和质量,降低项目的风险和成本,实现持续交付和快速迭代的目标。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值