个人学习笔记LDY

让找资料更简单

把我所学所懂记录下来以及收集网络上优秀的文章分享给大家,俗话说:“好记性不如烂笔头”。

如何使用gitlab-runner的docker模式

发布,2757 人读过

如何使用gitlab-runner的docker模式

使用Gitlab-Runner docker模式

说明:runner服务器需要安装docker服务
  • 使用docker安装gitlab-runner

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
  • Gitlab-runner 注册

docker exec gitlab-runner gitlab-runner register -n \
       --url http://192.168.88.3/ \
       --registration-token JBsEnXPs7zEuLQj91aC5 \
       --tag-list runInDk \
       --executor docker \
       --docker-image docker \
       --docker-volumes /root/.m2:/root/.m2 \
       --docker-volumes /root/.npm:/root/.npm \
       --docker-volumes /var/run/docker.sock:/var/run/docker.sock \
       --description "runInDk"
说明:
1. executor,使用docker。
2. 通过docker-image指定一个docker镜像。这里使用的是docker:latest。
3. 通过docker-volumns挂载本地目录:
    挂载docker.sock是为了docker:latest镜像操控runner服务器的docker服务;
    挂载.m2文件夹,是为了避免maven每次编译项目时都重新下载jar包。(后面.gitlab-ci.yml文件中使用了maven镜像)
  • gitlab-ci.yml示例(maven)

stages: 
  - package
  - build
  - deploy
my_package:
  image: maven:3.6.0-jdk-8-alpine
  stage: package
  script:
    - mvn clean package -DskipTests
    - cp Dockerfile target/Dockerfile
  cache:
    key: ${CI_PIPELINE_ID}
    paths: 
      - target/
  only:
    - master
  tags:
   - lvTest
my_build:
  stage: build
  cache:
    key: ${CI_PIPELINE_ID}
    paths: 
      - target/
  script:
    - cd target
    - docker build -t 192.168.88.4:5000/${CI_PROJECT_NAME}:${CI_PIPELINE_ID} .
    - docker push 192.168.88.4:5000/${CI_PROJECT_NAME}:${CI_PIPELINE_ID}
  tags:
    - lvTest
my_deploy:
  stage: deploy
  script:
    - docker stop lxwtest && docker rm lxwtest
    - docker run -d -p 8888:8080 --restart=always --name=lxwtest 192.168.88.4:5000/${CI_PROJECT_NAME}:${CI_PIPELINE_ID}
  tags:
    - lvTest
说明:
有两点特殊的配置需要说明。
1. image,启用docker模式后,在任务中可以使用docker镜像作为工具。指定镜像后,该任务的所有命令都是在该镜像内进行。
2. cache,runner提供的缓存功能。该功能可以将任务1生成的文件缓存起来,任务2直接将缓存文件下载到工作路径使用。
    其中key指定一个唯一标识,创建和使用缓存时,提供key识别。缓存可以跨任务、甚至pipline使用。
    paths,指定要缓存的文件路径。是一个数组,可以指定多个。
  • vue项目ci文件示例

stages: 
  - package
  - build
  - deploy
my_package:
  image: 192.168.100.150/tools/node-git:10-alpine
  stage: package
  script:
    - npm install --registry=https://registry.npm.taobao.org
    - npm run build:prod
    - cp Dockerfile dist/Dockerfile
  cache:
    key: ${CI_PIPELINE_ID}
    paths: 
      - dist/
  only:
    - master
  tags:
   - runInDk
my_build:
  stage: build
  cache:
    key: ${CI_PIPELINE_ID}
    paths: 
      - dist/
  script:
    - cd dist
    - docker build -t 192.168.88.4:5000/${CI_PROJECT_NAME}:${CI_PIPELINE_ID} .
    - docker push 192.168.88.4:5000/${CI_PROJECT_NAME}:${CI_PIPELINE_ID}
  tags:
    - runInDk
my_deploy:
  stage: deploy
  script:
    - docker stop ${CI_PROJECT_NAME} && docker rm ${CI_PROJECT_NAME}
    - docker run -d -p 8080:80 --restart=always --name=${CI_PROJECT_NAME} 192.168.88.4:5000/${CI_PROJECT_NAME}:${CI_PIPELINE_ID}
  tags:
    - runInDk