gitlab-runner持续集成spring boot项目

本文详细介绍了如何使用Docker和GitLab Runner搭建CI/CD环境,包括安装和配置GitLab Runner容器,设置Java和Maven环境,以及使用Docker Compose启动服务。此外,还提供了解决常见权限问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、安装gitlab-runner容器(包括安装maven环境以及java环境,因为是部署的java项目)(可直接复制)

FROM gitlab/gitlab-runner:v11.0.2

# 修改软件源
RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > /etc/apt/sources.list && \
    echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse' >> /etc/apt/sources.list && \
    echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse' >> /etc/apt/sources.list && \
    echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse' >> /etc/apt/sources.list && \
    apt-get update -y && \
    apt-get clean

# 安装 Docker (容器中也可以安装docker,但是需要将容器中的docker /var/run/docker.sock 关联到宿主机中的/var/run/docker.sock,这样就可以操作宿主机中的docker了)
RUN apt-get -y install apt-transport-https ca-certificates curl software-properties-common && \
    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add - && \
    add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && \
    apt-get update -y && \
    apt-get install -y docker-ce
COPY daemon.json /etc/docker/daemon.json

# 安装 Docker Compose
WORKDIR /usr/local/bin
RUN wget https://raw.githubusercontent.com/topsale/resources/master/docker/docker-compose
RUN chmod +x docker-compose

# 安装 Java(可以网上下载,也可以自己copy进容器安装)
RUN mkdir -p /usr/local/java
WORKDIR /usr/local/java
COPY jdk-8u152-linux-x64.tar.gz /usr/local/java
RUN tar -zxvf jdk-8u152-linux-x64.tar.gz && \
    rm -fr jdk-8u152-linux-x64.tar.gz

# 安装 Maven (可以网上下载,也可以自己copy进容器安装)
RUN mkdir -p /usr/local/maven
WORKDIR /usr/local/maven
RUN wget https://raw.githubusercontent.com/topsale/resources/master/maven/apache-maven-3.5.3-bin.tar.gz
# COPY apache-maven-3.5.3-bin.tar.gz /usr/local/maven
RUN tar -zxvf apache-maven-3.5.3-bin.tar.gz && \
    rm -fr apache-maven-3.5.3-bin.tar.gz
# COPY settings.xml /usr/local/maven/apache-maven-3.5.3/conf/settings.xml

# 配置环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_152
ENV MAVEN_HOME /usr/local/maven/apache-maven-3.5.3
ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

# 最后将工作目录转换会根目录
WORKDIR /

2、将daemon.json 关联上容器中的docker,用于配置加速器和仓库地址。

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ]
}

3、使用docker-compose来启动gitlab-runner服务

version: '3.1'
services:
  gitlab-runner:
    build: environment # build会去找environment路径下的Dockerfile文件来进行构建进行(或者直接使用镜像名)
    restart: always  #退出后重启
    container_name: gitlab-runner 
    privileged: true  # 以管理员的身份进行
    volumes:
      - /usr/local/docker/runner/config:/etc/gitlab-runner  # gitlba-runner的配置
      - /var/run/docker.sock:/var/run/docker.sock  # 挂载的是容器中的docker跟宿主机docker的配置 ,目的是让容器中也可以操作宿主机中的docker

4、注册runner

docker exec -it [容器id] gitlib-runner register

5、配置项目中的.gitlab-ci.yml

stages:
  - build
  - run
  - clean

build:
  stage: build
  script:
    - /usr/local/maven/apache-maven-3.6.1/bin/mvn clean package -Dmaven.test.skip=true -Dmaven.compile.fork=true  # 出现找不到mvn命令的情况,直接给绝对路径,打包可能会很慢 直接采用多线程打包
    - cp target/*.jar src/docker/  # 将打包好的jar移动到Dockerfile的路径下,打包镜像,因为每个阶段都是独立的,jar包被打包好就会删除
    - cd src/docker/
    - docker build -t app:v1.0 .  
run:
  stage: run
  script:
    - cd src/docker/       # 移动到docker-compose.yml文件夹下面
    - docker-compose down  # 先去关闭以up来运行的容器
    - docker-compose up -d # 启动容器

clean:
  stage: clean
  script:
    - docker rmi $(docker images -q -f dangling=true)   # 删除为none的虚悬镜像

6、使用Dockerfile 来将项目打包成镜像

FROM java:8

RUN mkdir -p /usr/local/app
WORKDIR /usr/local/app
COPY *.jar app.jar
EXPOSE 8011

ENTRYPOINT ["java","-jar","app.jar"]

7、使用docker-compose.yml来启动服务

version: '3.1'
services:
  scientific-server:  #服务名
    restart: always
    container_name: scientific #容器名称
    image: app:v1.0  #镜像名称
    ports:
      - 8011:8011

8、在此期间会遇到 gitlab调用容器执行docker没有权限的问题

因为gitlab会使用gitlab-runner用户来执行,所以在容器中执行docker时可以能会没有权限
宿主机:vim /etc/group 查看组有没有docker 。 如果没有 groupadd -g 1212 docker 重启docker  systemctl restart docker   然后需要将docker.sock 加入到docker组中 
docker容器中:给容器中的docker.sock 加入到组中  chgrp /var/run/docker.sock docker 并且将gitlab-runner加入到docker组中 usermod -a -G docker gitlab-runner
### 配置 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]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值