经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » Git » 查看文章
Gitlab-Runner基础教程
来源:cnblogs  作者:亚瑟王987  时间:2019/6/14 9:27:34  对本文有异议

一、Intro

jenkinsrunner,作为主流自动化运维工具来说,两者的大思路其实是一样的,就是将我们提交到代码仓库的代码拉到jenkins或者runner运行的机器里,然后执行一系列的命令(这里通常是指打包和发布的命令,当然你想执行什么样的命令都是可以自己定义的)

二、Runner安装注册

准备工作 在gitlab创建个人项目,注意查看如下信息,在注册runner的时候会用到(必须是项目的管理员才能看到)

gitlab-runner提供windows和linux版本的安装客户端,我这边使用docker的方式安装举例

  1. docker pull gitlab/gitlab-runner

为了演示流水线的效果,这边会将整个过程分成2个阶段编译发布(中间可以根据自己的需要添加其他阶段,比如镜像打包上传到镜像仓库等)

注册对应的runner之前应该想清楚这个runner需要实现的目标是什么

  • 编译runner安装注册

    目标: 拉取对应项目的源码,编译项目,将编译后生成的文件保存到gitlab缓存中(这里可以想一下我们一般的在用CI自动化发布的时候是不是将编译阶段也放在Dockerfile里面,导致每次编译生成没有必要的镜像,其实这一步是不需要放在Dockerfile里面的,因为生成的镜像对我们是没有作用的)。

    分析: 确定拉目标之后,就可以根据目标注册对应的runner了,想一下我们上面的步骤需要编译netcore项目,那么在这个runner里面必须有netcore sdk的环境。

    实施:

    1. # 创建配置文件目录
    2. sudo mkdir -p runner/runnertest/builder
    3. # 运行runner
    4. sudo docker run -d --name runnertest-builder --restart always > -v /home/yasewang/runner/runnertest/builder:/etc/gitlab-runner > -v /var/run/docker.sock:/var/run/docker.sock > gitlab/gitlab-runner:latest
    5. # 注册runner
    6. sudo docker exec -it runnertest-builder gitlab-runner register
    7. # 配置runner
    8. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
    9. http://git.greedyint.com/
    10. Please enter the gitlab-ci token for this runner:
    11. _jooQZxyy6zCrs8HevDd
    12. Please enter the gitlab-ci description for this runner:
    13. [653f2eda5bfa]: runnertest-builder
    14. Please enter the gitlab-ci tags for this runner (comma separated):
    15. 109-runnertest-builder
    16. Registering runner... succeeded runner=9x8kWsU1
    17. Please enter the executor: docker-ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, shell, ssh, virtualbox:
    18. docker
    19. Please enter the default Docker image (e.g. ruby:2.1):
    20. microsoft/dotnet:latest #注意这里使用dotnet镜像,查看镜像https://hub.docker.com/

    映射/var/run/docker.sock这个文件是为了让容器可以通过/var/run/docker.sockDocker守护进程通信,管理其他Docker容器
    -v /srv/gitlab-runner/config:/etc/gitlab-runner是将runner的配置文件映射到宿主机/srv/gitlab-runner/config方便调整和查看配置

按照上面的顺序操作下来,如果顺利的话就会在gitlab项目的ci里面看到这个runner已经上线

  • 发布runner安装注册

    目标: 将上一步生成的待发布文件打包成镜像,并运行容器。

    分析: 确定拉目标之后,就可以根据目标注册对应的runner了,想一下我们上面的步骤需要生成docker镜像并运行容器,那么在这个runner里面必须能使用docker命令。

    实施: 采用参数赋值的方式直接注册

    1. # 创建配置文件目录
    2. sudo mkdir -p runner/runnertest/deploy
    3. # 运行runner
    4. sudo docker run -d --name runnertest-deploy --restart always > -v /home/yasewang/runner/runnertest/deploy:/etc/gitlab-runner > -v /var/run/docker.sock:/var/run/docker.sock > gitlab/gitlab-runner:latest
    5. # 注册runner
    6. sudo docker exec -it runnertest-deploy gitlab-runner register
    7. # 配置runner
    8. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
    9. http://git.greedyint.com/
    10. Please enter the gitlab-ci token for this runner:
    11. _jooQZxyy6zCrs8HevDd
    12. Please enter the gitlab-ci description for this runner:
    13. [653f2eda5bfa]: runnertest-deploy
    14. Please enter the gitlab-ci tags for this runner (comma separated):
    15. 109-runnertest-deploy
    16. Registering runner... succeeded runner=9x8kWsU1
    17. Please enter the executor: docker-ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, shell, ssh, virtualbox:
    18. docker
    19. Please enter the default Docker image (e.g. ruby:2.1):
    20. docker:stable # 一定要指定,才能正常使用docker命令

三、CICD项目实战

  1. 新建webapi项目:dotnet new webapi -n runnertest --no-https
  2. 添加镜像检测删除脚本(后续ci构建脚本会用到):

    1. # check-dev.sh
    2. if [ $(docker ps -a --format {{.Names}} | grep runnertest-dev) ]
    3. then
    4. docker rm -f runnertest-dev
    5. docker rmi runnertest-dev
    6. fi
    7. # check-master.sh
    8. if [ $(docker ps -a --format {{.Names}} | grep runnertest-master) ]
    9. then
    10. docker rm -f runnertest-master
    11. docker rmi runnertest-master
    12. fi
  3. 添加Dockerfile文件

    1. FROM mcr.microsoft.com/dotnet/core/aspnet
    2. WORKDIR /app
    3. COPY out/ /app
    4. ENTRYPOINT [ "dotnet", "/app/runnertest.dll" ]

gitlab-ci.yml常用参数

  1. stagespipeline的阶段列表。定义整个pipeline的阶段
  2. stage:定义某个job的所在阶段。参考#1
  3. script:(唯一一个必须写的参数)job执行过程中的命令列表
  4. only/except:触发类型/限制job的创建条件。参考可用的选项
  5. tags:指定runnertag,只有拥有指定tagrunner才会接收到这个任务
  6. cache:缓存。可选部分目录或未被 git 追踪的文件进行缓存,参考
  7. environment:指定部署相关任务的环境,并非真实环境,是对要部署到某环境的任务的归类。方便在gitlab上聚合以便进行回滚和重新部署操作,参考
  8. artifacts:保留文档。在每次 job 之前runner会清除未被 git 跟踪的文件。为了让编译或其他操作后的产物可以留存到后续使用,添加该参数并设置保留的目录,保留时间等。被保留的文件将被上传到gitlab以备后续使用。参考
  9. dependencies:任务依赖。指定job的前置job。添加该参数后,可以获取到前置jobartifacts。注意如果前置 job 执行失败,导致没能生成artifacts,则 job 也会直接失败。

yml阶段构建脚本(.gitlab-ci.yml)

  1. stages:
  2. - build
  3. - deploy-dev
  4. - deploy-master
  5. # 构建
  6. build-job:
  7. stage: build
  8. only:
  9. - develop
  10. - master
  11. cache:
  12. untracked: true
  13. script:
  14. - dotnet restore
  15. - dotnet publish -o ./out -c Release
  16. artifacts:
  17. # 可以缓存在gitlab的流水线记录中,供直接下载
  18. expire_in: 30 days
  19. paths:
  20. - out/
  21. tags:
  22. - 109-runnertest-builder
  23. # 发布测试
  24. deploy-dev-job:
  25. stage: deploy-dev
  26. only:
  27. - develop
  28. dependencies:
  29. - build-job # 这里一定要依赖build-job,不然dockerfile里面的out目录无法使用
  30. script:
  31. - ls out/
  32. - sh ./check-dev.sh
  33. - docker build -t runnertest-dev .
  34. # 这里可以添加将生成好的image上传到dockerhub或者docker本地仓库
  35. ### 如果生成的镜像需要统一上传到仓库管理,则后面的逻辑可以分离到另外一个runner去执行
  36. # 这里可以添加从dockerhub或本地仓库拉取指定镜像
  37. - docker run -d --name runnertest-dev -p 10001:80 runnertest-dev
  38. tags:
  39. - 109-runnertest-deploy
  40. # 发布正式
  41. deploy-master-job:
  42. stage: deploy-master
  43. only:
  44. - master
  45. dependencies:
  46. - build-job # 这里一定要依赖build-job,不然dockerfile里面的out目录无法使用
  47. script:
  48. - ls out/
  49. - sh ./check-master.sh
  50. - docker build -t runnertest-master .
  51. # 这里可以添加将生成好的image上传到dockerhub或者docker本地仓库
  52. ### 如果生成的镜像需要统一上传到仓库管理,则后面的逻辑可以分离到另外一个runner去执行
  53. # 这里可以添加从dockerhub或本地仓库拉取指定镜像
  54. - docker run -d --name runnertest-master -p 10000:80 runnertest-master
  55. when: manual
  56. tags:
  57. - 109-runnertest-deploy

其他

做完上面的工作之后,将代码提交到gitlab的develop或者master分支就会自动触发构建任务了(第一次运行会比较慢,因为要拉取netcoredocker镜像,所以在没开始学习这个教程之前可以将几个镜像都准备好)。

各个阶段效果图如下:

  1. 构建

  1. 发布

服务器运行之后docker容器状态:

网页访问api效果图:

整个过程走下来会发现其实耗时的操作都是拉取镜像,这个情况只有第一次的时候才会出现,后续构建就不会有这个问题了。

原文链接:http://www.cnblogs.com/hzgod/p/ci_gitlab-runner-1.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号