Docker Gitlab CI Runner 搭建和使用

8 篇文章 1 订阅
5 篇文章 0 订阅

一、使用Docker搭建Gitlab CI Runner

        1:拉去镜像

              docker pull gitlab/gitlab-runner:latest

        2:启动gitlab-runner容器

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

        3:为项目注册runner

              在Gitlab中打开项目->setting->CI/CD->找到Runners点击Expand

              执行注册命令 docker exec -it gitlab-runner gitlab-ci-multi-runner register

              URL和token输入第一步中Runners查看到的信息,description输入runner的描述,tags输入runner的标签(这个在构建文件中要用到),executor这个执行者选项有好多种本文介绍docker、shell和ssh,Docker image当executor为docker时需要指定docker使用的镜像名称(我是java项目所以使用了maven:3-jdk-8,可以根据不同的项目来选择)

              注册成功后在Runners下面会显示刚刚注册成功的runner信息,在这里也可以禁用和删除runner

         4:修改runner配置

              当executor为docker时挂载宿主机的docker和maven仓库

              vim /srv/gitlab-runner/config/config.toml 修改volumes并添加pull_policy

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

              extra_hosts=["localhost:127.0.0.1"]    可以指定docker中的host可以解决clone_url无法访问IP的问题

              重启 docker restart gitlab-runner

        5:获取日志

              docker logs gitlab-runner

        6:停止并删除runner容器

              docker stop gitlab-runner && docker rm gitlab-runner

二、使用gitlab-runner

       1:executor为docker时在镜像外打包编译部署

# Dockerfile内容
# 在容器外编译---job_compile job_build
FROM openjdk:8-jdk
COPY target/*.jar mytest.jar
ENV PORT 5000
EXPOSE $PORT
ENTRYPOINT ["java","-Dserver.port=${PORT}","-jar","mytest.jar"]


# .gitlab-ci.yml文件内容
image: docker:stable #指定镜像不指定时默认使用runner注册时的镜像
stages:
  - compile
  - build
job_compile:
  image: maven:3-jdk-8-alpine
  stage: compile
  script:
    - mvn clean package -Dmaven.test.skip=true
#  only:#master指定git分支或tag
#    - develop
  tags:
    - test
  artifacts:#将本job的产物保留供下面的job使用
    expire_in: 5 mins
    paths:
      - target/*.jar

job_build:
  stage: build
  script:
    - echo "deploy start..."
    - docker build -t my/test:v1 .
    - if [ $(docker ps -aq --filter name=mytest) ]; then docker rm -f mytest;fi
    - docker run -d --name mytest -p 5000:5000 my/test:v1
    - echo "deploy over..."
#  only:
#    - develop
  tags:
    - test

         2:executor为docker时在镜像内打包编译部署

# Dockerfile文件内容
# 在容器中编译---job_deploy
FROM maven:3-jdk-8-alpine

WORKDIR /usr/src/app

COPY . /usr/src/app
RUN mvn clean package -Dmaven.test.skip=true

ENV PORT 5000
EXPOSE $PORT
CMD [ "sh", "-c", "mvn -Dserver.port=${PORT} spring-boot:run" ]


# .gitlab-ci.yml文件内容
job_deploy:
  stage: deploy
  script:
    - echo "deploy start..."
    - docker build -t my/test:v1 .
    - if [ $(docker ps -aq --filter name=mytest) ]; then docker rm -f mytest;fi
    - docker run -d --name mytest -p 5000:5000 my/test:v1
    - echo "deploy over..."
  tags:
    - test

        3:executor为ssh时(gitlab-runner官方现在不推荐使用)打包部署,注册ssh的runner时最好使用非root用户(adduser gitlab-runner;passwd gitlab-runner;useradd -g gitlab-runner gitlab-runner;ssh gitlab-runner gitlab-runner@ip;ssh-keygen; 如果为非root用户可能无权限执行宿主机的有些命令需要给用户赋予对应权限,比如docker执行权限需要把用户添加到docker用户组中“usermod -G docker 用户名”)。这种方式的runner创建时需要指定ssh公钥路径(如果gitlab-runner是在宿主机上安装的那么路径为宿主机的.ssh/id_rsa路径,如果是docker安装的gitlab-runner填写的是容器中的.ssh/id_rsa路径)

# 制作docker maven 用于打包也可以使用宿主机maven打包(方式二配置)
FROM maven:3-jdk-8-alpine
RUN addgroup -S gitlab-runner && adduser -S gitlab-runner -G gitlab-runner && chown -R gitlab-runner:gitlab-runner /usr/share/maven/ref && chown -R gitlab-runner:gitlab-runner /root && mkdir /app && chown -R gitlab-runner:gitlab-runner /app
RUN apk --no-cache add openssh-client git
USER gitlab-runner
COPY settings.xml /usr/share/maven/conf/
# settings 内容
<?xml version="1.0" encoding="UTF-8"?>
  
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>/usr/share/maven/ref/repository</localRepository>
  <mirrors>
     <mirror>
                <id>alimaven</id>
                <name>aliyun maven</name>
                <url>https://maven.aliyun.com/repository/public</url>
                <mirrorOf>*</mirrorOf>
        </mirror>
  </mirrors>
</settings>
制作docker build -t my/mavenbuild .

# Dockerfile文件内容
# 在容器中编译---job_test
FROM openjdk:8-jdk
COPY xxx/target/*.jar mytest.jar
ENV PORT 5000
EXPOSE $PORT
ENTRYPOINT ["java","-jar","mytest.jar"]

# docker-compose 文件内容
version: '2'
services:
  xxx_sys:
    build:
      context: ./
      dockerfile: ./Dockerfile
    restart: always
    ports:
      - 9999:9999
    logging:
      driver: "json-file"
      options:
        max-size: "500m"
    volumes:
      - /etc/localtime:/etc/localtime
      - /docker-services/logs/xxx_sys:/logs/:rw
    environment:
      spring.profiles.active: dev
      TZ=Asia/Shanghai
    container_name: xxx_sys
    hostname: xxx_sys
    image: xxx/xxx-sys:1.0.0


# .gitlab-ci.yml文件内容
# 使用ssh方式打包部署--适合在宿主机上直接打包运行(也可以用docker-compose)
job_test:
  stage: test
  before_script:
    - pwd
  script:
    - echo "deploy start..."
    - mvn clean package -Dmaven.test.skip=true
    # - docker run -u 1000:1000 -i --rm -v "$(pwd)":/app -w /app -v /docker-services/mavendata/repository:/usr/share/maven/ref/repository my/mavenbuild mvn clean package -DskipTests=true(方式二)
    # - docker rmi $(docker images -f "dangling=true" -q)(方式二清除none空dangling)
    - docker-compose down --rmi all -v
    - docker-compose up -d
    - echo "deploy over..."
  #    - mvn test
  #  only:
  #    - develop
  after_script:
    - rm -rf ../*
  tags:
    - test_ssh

# 方式三 runner直接调用宿主机sh(避免build镜像时产生none空dangling docker rmi $(docker images -f "dangling=true" -q)) 此方式和方式二类似也需要制作my/mavenbuild打包镜像
# .gitlab-ci.yml文件内容
# 使用ssh方式打包部署--适合在宿主机上直接打包运行(也可以用docker-compose)
job_deploy:
  stage: deploy
  before_script:
    - pwd
  script:
    - echo "deploy start..."
    - sh /docker-services/services/xxx/build-deploy.sh "$(pwd)"
    - echo "deploy over..."
    #    - mvn test
  only:
    - develop
  after_script:
    - rm -rf ../*
  tags:
    - wfzd_ssh
# build-deploy.sh内容
#!/bin/sh
echo "start..."
cd $1
# cd /home/gitlab-runner/builds/M1CoryXr/0/xxx-group/xxx
echo "----------maven build----------"
docker run -u 1000:1000 -i --rm -v "$(pwd)":/app -w /app -v /docker-services/mavendata/repository:/usr/share/maven/ref/repository my/mavenbuild mvn clean package -DskipTests=true
echo "----------deploy----------"
#走全局 docker-compose 时可以使用此方式
#cd /docker-services
#docker-compose stop xxx_sys
#docker-compose rm -f xxx_sys
#cd $1
#docker rmi xxx/xxx-sys:1.0.0
#docker built -t xxx/xxx-sys:1.0.0 .
#cd /docker-services
#docker-compose up -d xxx_sys
#docker-compose logs xxx_sys
#docker rm $(docker ps -a -q)
#走全局 docker-compose 时可以使用此方式
docker-compose stop xxx_sys
docker-compose rm -f xxx_sys
docker rmi xxx/xxx-sys:1.0.0
docker-compose build xxx_sys
docker-compose up -d xxx_sys
docker-compose logs xxx_sys
docker rm $(docker ps -a -q)
echo "end"
exit
# 给build-deploy.sh分权限
chown gitlab-runner:gitlab-runner build-deploy.sh

         4:executor为shell,这种适合gitlab-runner安装在宿主机上使用,如果是docker中会有权限问题(比如docker-compose命令即使将宿主机的docker-compose挂载到容器也会出现权限问题,有人通过在before_script时在容器中安装docker-compose的方式来解决,个人感觉可以使用ssh方式来解决)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要配置Docker GitLab Runner,您需要遵循以下步骤: 1. 首先,您需要在Docker中安装GitLab Runner。您可以使用以下命令来安装: ``` docker run -d --name gitlab-runner --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ gitlab/gitlab-runner:latest ``` 这将在Docker中启动一个GitLab Runner容器,并将其命名为“gitlab-runner”。此命令还将挂载Docker守护程序的Unix套接字,以便GitLab Runner可以与Docker守护程序通信,并将GitLab Runner配置文件存储在本地路径“/srv/gitlab-runner/config”。 2. 接下来,您需要注册GitLab Runner。您可以使用以下命令来注册: ``` docker exec -it gitlab-runner gitlab-runner register ``` 此命令将启动一个交互式会话,要求您提供有关GitLab Runner的一些详细信息,例如GitLab实例的URL、Runner的名称和标签等。您应该根据您的需要进行配置。 3. 最后,您需要为项目设置GitLab Runner。在GitLab中,导航到您的项目的设置页面,并选择“CI / CD”选项卡。然后,选择“Runner”选项卡,并单击“启用自己托管的Runner”按钮。您需要提供GitLab Runner的URL、Token和标签等详细信息。您可以在GitLab Runner容器中的“/etc/gitlab-runner/config.toml”文件中找到这些详细信息。 完成上述步骤后,您的Docker GitLab Runner就设置好了。GitLab使用Runner来执行项目的CI / CD工作流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值