当前位置:   article > 正文

Docker Gitlab CI Runner 搭建和使用_gitlab runner 镜像注册

gitlab runner 镜像注册

一、使用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时在镜像外打包编译部署

  1. # Dockerfile内容
  2. # 在容器外编译---job_compile job_build
  3. FROM openjdk:8-jdk
  4. COPY target/*.jar mytest.jar
  5. ENV PORT 5000
  6. EXPOSE $PORT
  7. ENTRYPOINT ["java","-Dserver.port=${PORT}","-jar","mytest.jar"]
  8. # .gitlab-ci.yml文件内容
  9. image: docker:stable #指定镜像不指定时默认使用runner注册时的镜像
  10. stages:
  11. - compile
  12. - build
  13. job_compile:
  14. image: maven:3-jdk-8-alpine
  15. stage: compile
  16. script:
  17. - mvn clean package -Dmaven.test.skip=true
  18. # only:#master指定git分支或tag
  19. # - develop
  20. tags:
  21. - test
  22. artifacts:#将本job的产物保留供下面的job使用
  23. expire_in: 5 mins
  24. paths:
  25. - target/*.jar
  26. job_build:
  27. stage: build
  28. script:
  29. - echo "deploy start..."
  30. - docker build -t my/test:v1 .
  31. - if [ $(docker ps -aq --filter name=mytest) ]; then docker rm -f mytest;fi
  32. - docker run -d --name mytest -p 5000:5000 my/test:v1
  33. - echo "deploy over..."
  34. # only:
  35. # - develop
  36. tags:
  37. - test

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

  1. # Dockerfile文件内容
  2. # 在容器中编译---job_deploy
  3. FROM maven:3-jdk-8-alpine
  4. WORKDIR /usr/src/app
  5. COPY . /usr/src/app
  6. RUN mvn clean package -Dmaven.test.skip=true
  7. ENV PORT 5000
  8. EXPOSE $PORT
  9. CMD [ "sh", "-c", "mvn -Dserver.port=${PORT} spring-boot:run" ]
  10. # .gitlab-ci.yml文件内容
  11. job_deploy:
  12. stage: deploy
  13. script:
  14. - echo "deploy start..."
  15. - docker build -t my/test:v1 .
  16. - if [ $(docker ps -aq --filter name=mytest) ]; then docker rm -f mytest;fi
  17. - docker run -d --name mytest -p 5000:5000 my/test:v1
  18. - echo "deploy over..."
  19. tags:
  20. - 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路径)

  1. # 制作docker maven 用于打包也可以使用宿主机maven打包(方式二配置)
  2. FROM maven:3-jdk-8-alpine
  3. 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
  4. RUN apk --no-cache add openssh-client git
  5. USER gitlab-runner
  6. COPY settings.xml /usr/share/maven/conf/
  7. # settings 内容
  8. <?xml version="1.0" encoding="UTF-8"?>
  9. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  10. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  11. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  12. <localRepository>/usr/share/maven/ref/repository</localRepository>
  13. <mirrors>
  14. <mirror>
  15. <id>alimaven</id>
  16. <name>aliyun maven</name>
  17. <url>https://maven.aliyun.com/repository/public</url>
  18. <mirrorOf>*</mirrorOf>
  19. </mirror>
  20. </mirrors>
  21. </settings>
  22. 制作docker build -t my/mavenbuild .
  23. # Dockerfile文件内容
  24. # 在容器中编译---job_test
  25. FROM openjdk:8-jdk
  26. COPY xxx/target/*.jar mytest.jar
  27. ENV PORT 5000
  28. EXPOSE $PORT
  29. ENTRYPOINT ["java","-jar","mytest.jar"]
  30. # docker-compose 文件内容
  31. version: '2'
  32. services:
  33. xxx_sys:
  34. build:
  35. context: ./
  36. dockerfile: ./Dockerfile
  37. restart: always
  38. ports:
  39. - 9999:9999
  40. logging:
  41. driver: "json-file"
  42. options:
  43. max-size: "500m"
  44. volumes:
  45. - /etc/localtime:/etc/localtime
  46. - /docker-services/logs/xxx_sys:/logs/:rw
  47. environment:
  48. spring.profiles.active: dev
  49. TZ=Asia/Shanghai
  50. container_name: xxx_sys
  51. hostname: xxx_sys
  52. image: xxx/xxx-sys:1.0.0
  53. # .gitlab-ci.yml文件内容
  54. # 使用ssh方式打包部署--适合在宿主机上直接打包运行(也可以用docker-compose)
  55. job_test:
  56. stage: test
  57. before_script:
  58. - pwd
  59. script:
  60. - echo "deploy start..."
  61. - mvn clean package -Dmaven.test.skip=true
  62. # - 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(方式二)
  63. # - docker rmi $(docker images -f "dangling=true" -q)(方式二清除none空dangling)
  64. - docker-compose down --rmi all -v
  65. - docker-compose up -d
  66. - echo "deploy over..."
  67. # - mvn test
  68. # only:
  69. # - develop
  70. after_script:
  71. - rm -rf ../*
  72. tags:
  73. - test_ssh
  74. # 方式三 runner直接调用宿主机sh(避免build镜像时产生none空dangling docker rmi $(docker images -f "dangling=true" -q)) 此方式和方式二类似也需要制作my/mavenbuild打包镜像
  75. # .gitlab-ci.yml文件内容
  76. # 使用ssh方式打包部署--适合在宿主机上直接打包运行(也可以用docker-compose)
  77. job_deploy:
  78. stage: deploy
  79. before_script:
  80. - pwd
  81. script:
  82. - echo "deploy start..."
  83. - sh /docker-services/services/xxx/build-deploy.sh "$(pwd)"
  84. - echo "deploy over..."
  85. # - mvn test
  86. only:
  87. - develop
  88. after_script:
  89. - rm -rf ../*
  90. tags:
  91. - wfzd_ssh
  92. # build-deploy.sh内容
  93. #!/bin/sh
  94. echo "start..."
  95. cd $1
  96. # cd /home/gitlab-runner/builds/M1CoryXr/0/xxx-group/xxx
  97. echo "----------maven build----------"
  98. 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
  99. echo "----------deploy----------"
  100. #走全局 docker-compose 时可以使用此方式
  101. #cd /docker-services
  102. #docker-compose stop xxx_sys
  103. #docker-compose rm -f xxx_sys
  104. #cd $1
  105. #docker rmi xxx/xxx-sys:1.0.0
  106. #docker built -t xxx/xxx-sys:1.0.0 .
  107. #cd /docker-services
  108. #docker-compose up -d xxx_sys
  109. #docker-compose logs xxx_sys
  110. #docker rm $(docker ps -a -q)
  111. #走全局 docker-compose 时可以使用此方式
  112. docker-compose stop xxx_sys
  113. docker-compose rm -f xxx_sys
  114. docker rmi xxx/xxx-sys:1.0.0
  115. docker-compose build xxx_sys
  116. docker-compose up -d xxx_sys
  117. docker-compose logs xxx_sys
  118. docker rm $(docker ps -a -q)
  119. echo "end"
  120. exit
  121. # 给build-deploy.sh分权限
  122. chown gitlab-runner:gitlab-runner build-deploy.sh

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/88014
推荐阅读
相关标签
  

闽ICP备14008679号