GitLab Runner作为CI/CD

参考:gitlab ci cd 不完全指南_gitlab cicd-CSDN博客

GitLab Runner作为CI/CD 配合GitLab使用以在管道中运行作业的应用程序。GitLab Runner由Golang语言开发轻量而高效,本身只提供客户端任务执行,不提供任何图形界面,其管理界面可以只在GitLab界面集成(可过滤了大量危险脚本操作),从而极大保障了业务平台的安全性。

什么是 CI、CD

CI(Continuous Integration)持续集成,CD(Continuous Deployment)持续部署(也包含了持续交付的意思)。

 CD 指的是在我们 CI 流程通过之后,将代码自动发布到服务器的过程,这个过程也是自动化的。

在开发人员提交代码之后,会触发 gitlab 的 CI 流水线。也就是上图的 CI PIPELINE,也就是中间的部分。
在 CI 流水线中,我们可以配置多个任务。比如上图的 build、unit test、integration tests 等,也就是构建、单元测试、集成测试等。
在 CI 流水线都通过之后,会触发 CD 流水线。也就是上图的 CD PIPELINE,也就是右边的部分。
在 CD 流水线中,我们可以配置多个任务。比如上图的 staging、production 等,也就是部署到测试环境、部署到生产环境等。

 gitlab CI、CD 中的一些基本概念:

pipeline:流水线,也就是 CI、CD 的整个流程,包含了多个 stage,每个 stage 又包含了多个 job。
stage: 一个阶段,一个阶段中可以包含多个任务(job),这些任务会并行执行,但是下一个 stage 的 job 只有在上一个 stage 的 job 执行通过之后才会执行。
job:一个任务,这是 CI、CD 中最基本的概念,也是最小的执行单元。一个 stage 中可以包含多个 job,同时这些 job 会并行执行。
runner:执行器,也就是执行 job 的机器,runner 跟 gitlab 是分离的,runner 需要我们自己去安装,然后注册到 gitlab 上(不需要跟 gitlab
在同一个服务器上,这样有个好处就是可以很方便实现多个机器来同时处理 gitlab 的 CI、CD 的任务)。
tag: runner 和 job 都需要指定标签,job 可以指定一个或多个标签(必须指定,否则 job 不会被执行),这样 job 就只会在指定标签的 runner 上执行。
cache: 缓存,可以缓存一些文件,这样下次流水线执行的时候就不需要重新下载了,可以提高执行效率。
artifacts: 这代表这构建过程中所产生的一些文件,比如打包好的文件,这些文件可以在下一个 stage 中使用,也可以在 pipeline 执行结束之后下载下来。
variables:变量,可以在 pipeline 中定义一些变量,这些变量可以在 pipeline 的所有 stage 和 job 中使用。
services:服务,可以在 pipeline 中启动一些服务,比如 mysql、redis 等,这样我们就可以在 pipeline 中使用这些服务了(常常用在测试的时候模拟一个服务)。
script: 脚本,可以在 job 中定义一些脚本,这些脚本会在 job 执行的时候执行。

cache 在安装依赖的 job 中才需要使用默认的 policy,也就是 pull-push,在其他不需要安装依赖的 job 中使用 pull 就可以了,不需要上传缓存。
cache 的 key 可以指定多个文件,这样在指定的文件变动的时候,缓存会失效,这往往用在依赖相关的文件中。
可以使用 services 关键字来指定需要启动的服务,比如 mysql、redis 等,在 job 中可以连接到这些 services,从而方便进行测试。
可以使用 yaml 的 anchor 机制来复用一些配置片段,可以少写很多重复的配置。
一个 job 必须运行在某个 runner 上,job 和 runner 的关联是通过 tag 来指定的。

需要特别注意的是:cache 是跨流水线共享的,而 artifacts 只会在当前流水线的后续 stage 共享。

gitlab runner 和 executor

gitlab runner 在 CI/CD 中是一个非常重要的东西,因为我们写的 CI/CD 的配置就是在 runner 上运行的,如果我们想要执行 CI/CD 任务,我们必须先安装配置 gitlab-runner。

其中 runner 是一台执行 CI/CD 脚本的机器(也就是安装了 gitlab-runner 的机器)。这个机器可以部署在 gitlab 服务器以外的任意一台电脑上,当然也可以跟 gitlab 在同一台服务器。

而每一个 runner 会对应一种特定的 executor,executor 就是我们执行 CI/CD 里面 script 的环境。比如如果我们指定了 executor 类型为 docker,那么我们 CI/CD 脚本里面的 script 将会在一个独立的 docker 容器中执行。

runner是执行 CI/CD 脚本的机器,这个机器上有不同类型的 executor,一个 executor 代表着一个不同类型的命令行终端,最常见的是 shelldocker,当然也支持 widnows 的 powershell

gitlab 是通过 tags 来找到运行脚本的 runner 的,如果 job 的 tags 跟 runner 的 tags 匹配了,就可以将那个 job 放到 runner 上处理。

我们在两台机器上安装了 gitlab-runner,它们的 IP 是 192.168.2.123 和 192.168.2.234。
test-job 的 tags 中包含了 api 这个 tag,而 runner1 的 tags 也包含了 api 这个 tag,因此 test-job 会被 runner1 执行。
同理,npm-install 这个 job 会被 runner3 处理。

cache 是用来缓存依赖的,比如 node_modules 文件夹,它可以加快后续 pipeline 的执行流程,因为避免了重复的依赖安装。
artifacts 是用来缓存构建产物的,比如 build 之后生成的静态文件,它可以在后续的 stage 中使用。表示的是单个 pipeline 中的不同 stage 之间的共享。

CD - 如何同步代码到服务器
如果我们的项目需要部署到服务器上,那么我们还需要做一些额外的操作,比如同步代码到服务器上。
如果我们的 gitlab 是通过容器执行的(也就是说 gitlab 是通过 docker 启动的),或者我们的 runner 的 executor 是 docker,那么有一种比较常见的方法是通过 ssh 私钥来进行部署。

-------------------------------------------------------------------------------------------------------------------------

参考:github - Gitlab CI/CD - 个人文章 - SegmentFault 思否

  • ci(持续构建)
    代码提交后触发自动化的单元测试,代码预编译,构建镜像,上传镜像等.
  • cd(持续发布)
    持续发布则指将构建好的程序发布到各种环境,如预发布环境,正式环境.

gitlab ci/cd是由独立的runner程序完成,runner采用go语言编写,因此可以很好的进行跨平台,通常可以将runner部署到任何gitlab server之外的服务器,从而避免对gitlab server的影响.

gitlab ci/cd流程

gitlab通过在项目的根目录放置.gitlab-ci.yml文件来触发pipline,文件书写遵循yml语法,因此,概括来说gitlab ci/cd只需要两步,

  • 写好.gitlab-ci.yml文件,并放置到项目根目录
  • 配置好gitlab runner.

完成后,提交代码时会自动根据gitlab-ci.yml的触发条件进行执行相应的stage.

4.1 gitlab-ci.yml文件
# 定义项目的执行阶段
stages:
  # 测试阶段
  - test
  # 构建阶段
  - build
  # 部署阶段
  - deploy

# 测试作业
test:
  # 设置作业所在的阶段
  stage: test
  # 执行的脚本命令
  script: echo "Running tests"
  # 只对带标签的提交执行此作业
  only:
  - tags

# 构建作业
build:
  # 设置作业所在的阶段
  stage: build
  # 执行的脚本命令
  script: echo "Building the app"
  # 只对带标签的提交执行此作业
  only:
  - tags

# 部署到测试环境的作业
deploy_staging:
  # 设置作业所在的阶段
  stage: deploy
  # 执行的脚本命令
  script:
    - echo "Deploy to staging server"
  # 设置部署环境的名称和URL
  environment:
    name: staging
    url: https://staging.example.com
  # 只对带标签的提交执行此作业
  only:
  - tags

# 部署到生产环境的作业
deploy_prod:
  # 设置作业所在的阶段
  stage: deploy
  # 执行的脚本命令
  script:
    - echo "Deploy to production server"
  # 设置部署环境的名称和URL
  environment:
    name: production
    url: https://example.com
  # 设置为手动触发
  when: manual
  # 只对带标签的提交执行此作业
  only:
  - tags

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用GitLabCI/CD功能,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了GitLab Runner。你可以使用以下命令来安装GitLab Runner: ``` curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash sudo yum install gitlab-runner ``` 如果你在Ubuntu系统上使用,请使用`apt-get`命令来安装。 2. 安装完成后,你可以使用`gitlab-runner -v`命令来验证安装是否成功,并查看GitLab Runner的版本号。 3. 接下来,你需要将GitLab Runner注册到GitLab CI/CD Coordinator上。在终端中输入以下命令: ``` gitlab-runner register ``` 在提示中,你需要提供GitLab CI/CD Coordinator的URL(例如https://gitlab.com/),以及访问权限验证的Token。 4. 注册成功后,你可以配置`.gitlab-ci.yml`文件来定义CI/CD的流程。这个文件包含了一系列的任务(jobs)和阶段(stages),你可以根据自己的项目需求进行配置。具体的语法和配置参考可以在GitLab官方文档中找到。 5. 当你的代码提交到GitLab仓库时,GitLab CI/CD会自动触发流水线(pipeline)的执行。流水线中的任务会按照`.gitlab-ci.yml`文件中定义的顺序和规则进行执行。 总结:要使用GitLabCI/CD功能,你需要先安装GitLab Runner,并将其注册到GitLab CI/CD Coordinator上。然后,在项目中配置`.gitlab-ci.yml`文件来定义CI/CD流程。最后,当代码提交到GitLab仓库时,GitLab CI/CD会自动执行流水线中的任务。详细的使用方法和配置参考可以查阅GitLab官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值