基于 GitLab CI/CD 的自动化构建、发布实践

什么是 Gitlab CI/CD

持续集成 CI(Continuous Integration):在源代码变更后,触发自动检测、构建和测试的过程。在代码提交后,会自动进行构建和测试,并反馈结果。当结果符合预期时,再将代码集成到主干。持续集成的目标是快速确保当前变更是可用的。

持续交付 CD(Continuous Delivery):是基于持续集成基础上,将集成后的代码自动化部署到各个环境测试,确定可以发布生产版本。

持续部署 CD(Continuous Deployment):是基于持续交付的基础上,将在各个环境经过测试的应用自动化部署到生产环境。其实各个环境的发布过程都是一样的。应用发布到生产环境后,我们需要对应用进行健康检查、添加应用的监控项、 应用日志管理。

我们先来看一看没有自动化的项目开发部署的流程:

首先是开发人员完成代码开发
然后进行代码构建
构建完成后打包静态文件
将打包后的文件上传到发布服务器中,填写相关信息进行发布

我们会发现,每次的发布部署都需要重复的进行上述操作,而 CI/CD 的理念就是将这一重复性操作进行自动化处理。

基于 GitLab CI/CD 的自动化构建、发布实践_第1张图片

如上图所示,在提交代码到 gitlab 中时,满足指定条件时,就会触发 pipeline 进行代码的自动构建、测试和发布。

Gitlab CI/CD 整体流程

gitlab-ci 的 Pipline 具体流程和操作,是在项目根目录下的 .gitlab-ci.yml 文件中配置声明的。触发 Pipline 运行之后,gitlab-runner 会根据配置的 .gitlab-ci.yml 文件进行执行,执行结果会显示在 gitlab 中。

.gitlab-ci.yml:用于定义 CI/CD 流程分为几个阶段,每个阶段需要执行哪些任务

gitlab-runner: 是 CI 的执行环境

.gitlab-ci.yml 配置说明

KEYWORD REQUIRED DESCRIPTION
script yes CI/CD 过程需要执行的shell脚本
stage no 一个job流程,默认test
variables no 定义变量
only no 指定当前job适用的git refs(分支、Tag)列表
except no 与only相反
tags no 通过标签管理或匹配runner
allow_failure no 指定当前job是否容错,正常job失败会跳过后续job流程
before_script no 在当前job执行前执行的shell脚本
after_script no 在当前job执行后执行的shell脚本
when no 依赖的上一个job执行什么状态后执行当前job, on_success on_failure always manual 默认on_success
dependencies no 指定依赖的job列表,默认顺序执行

gitlab-runner

  • Runner是一个执行任务的进程。
  • Runner可以放在不同的用户、服务器,甚至本地机器上。
  • 每个Runner可以处于以下状态中的其中一种:
  • active Runner已启用,随时可以处理新作业
  • paused Runner已暂停,暂时不会接受新的作业
  • 要开始使用作业,可以向项目添加特定的运行器或使用共享的运行器。
  • 可以设置 专用Runner共享Runner群组Runner

Shared Runner是所有项目都可以使用的,而Specific Runner只能针对特定项目运行。

Shared Runner默认基于Docker运行,没有提前装配的执行Pipeline的环境,例如Node等。而Specific Runner你可以自由选择平台,可以是各种类型的机器,如Linux/Windows等,并在上面装配必需的运行环境,当然也可以选择Docker/Kubernetes等。

  • 手动设置专用Runner的步骤:
  • 安装 GitLab Runner
  • 在Runner设置时指定URL
  • 在Runner设置时使用注册令牌
  • 启动Runner
  • GiTLab Runner就是运行器,类似于Jenkins,可以为我们执行一些CI持续集成、构建的脚本任务,运行器具有执行脚本、调度、协调的工作能力。

Gitlab CI/CD 实践

新建项目

我们在 gitlab 仓库中新建一个项目用于测试

gitlab-runner 配置 —— 当前采用 docker 环境

1) 拉取 gitlab-runner 镜像

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
  1. 注册 gitlab-runner

在进行注册前,需进入 gitlab 项目中 ——> settings ——> CI/CD ——> Runner 中获取 url 及 token。(此处配置专用 runner)

注意:gitlab 项目的 CI/CD 需要具有管理员权限才可以进行配置。

基于 GitLab CI/CD 的自动化构建、发布实践_第2张图片

gitlab-runner register

执行命令后,会提示输入内容 url、token 描述及其他信息,我们按照实际配置即可。

[root@server ~]# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=25074 revision=3001a600 version=11.10.0
Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlab.com/
Please enter the gitlab-ci token for this runner:
any_hDMpZ8W4yMLwMJV1
Please enter the gitlab-ci description for this runner:
[server.hopewait]: project runner
Please enter the gitlab-ci tags for this runner (comma separated):
test-project-tag
Registering runner... succeeded                     runner=any_hDMp
Please enter the executor: docker, docker-ssh+machine, kubernetes, docker-ssh, parallels, shell, ssh, virtualbox, docker+machine:
docker
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
[root@server ~]#

启动成功之后,可在项目 runner 配置处看到:

基于 GitLab CI/CD 的自动化构建、发布实践_第3张图片

一些相关命令:

gitlab-runner verify —— 检查 gitlab-runner 运行情况

gitlab-runner start —— 开启 gitlab-runner

gitlab-runner stop —— 关闭 gitlab-runner

gitlab-runner --version —— 查看 gitlab-runner 信息

.gitlab-ci.yml 配置

我们在项目根目录下,新建文件 .gitlab-ci.yml。

image: node:latest

# 设置缓存
cache:
  paths:
    - build/
    - node_modules/

# 定义 stages
stages:
  - install
  - eslint
  - build
  - deploy

# 定义 job: 
intall:
  stage: install
  script:
    - yarn

# 定义 job: 进行代码格式化和lint检查
eslint:
  stage: eslint
  script:
    - yarn lint

# 定义 job:build 阶段
build:
  stage: build
  script:
    - yarn build
    - echo "build success..."

# 定义 job:部署阶段,把刚才bulid阶段生成的代码,部署到服务器上
deploy:
  stage: deploy
  before_script:
    - eval $(ssh-agent -s)
    # $SSH_PRIVATE_KEY 在 gitlab CI/CD 中配置
    - echo "$SSH_PRIVATE_KEY" | ssh-add - > ~/.ssh/id_rsa
    # 创建~/.ssh目录,并配置权限(非root运行的runner)
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
  script:
    - chmod a+x ./deploy.sh
    - sh ./deploy.sh

./deploy.sh

#!/bin/bash

rsync -avz --delete dist/* [email protected]:/home/project/dist

在 CI/CD 中,我们点击 CI Lint, 可检查脚本配置是否正确。

基于 GitLab CI/CD 的自动化构建、发布实践_第4张图片

编写完成之后,提交代码,触发 Pipline。

你可能感兴趣的:(实战)