衷于栖
  • 衷于栖
  • 首页
  • 归档
  • 关于

Image
Profile Picture

衷于栖

自由开发者

分类目录

三维技术4 介绍2 应用1 异常1 技术笔记17 游戏2 源码解读3 管理5 读书笔记3 车联网3 转载11 随笔3

热门标签

  • GIT
  • 工作流指南
  • docker
  • SCRUM
  • JT808
  • 百度地图
  • 狼人杀
  • 模型数据结构
  • 敏捷
  • 扩展
  • 学习WEBGL系列
  • 可维护
  • GlTF
  • CentOS
  • 高德地图
  • 集中式
  • 郭麒麟
  • 郭德纲
  • 进阶
  • 路由节点编辑器

微信订阅

Image

友情链接

王海达博客 Steve Yegge Debug 客栈 Codelei's Blog 笛卡尔积 Java九点半课堂 薛定喵君

【Gitlab】gitlab-ci速成

2020-05-01     技术笔记


要使用 Gitlab 提供的 CI/CD 功能,需要在仓库根目录创建一个文件 .gitlab-ci.yml,这样 Gitlab 每次提交都会运行这个配置文件。在 Gitlab 中基础的 CI/CD 单元是作业(job)。一个作业代表运行在一个特殊提交上下文里的 bash 脚本。你可能有一个作业用来运行测试,另一个运行构建或者部署。在这个配置文件中,作业应该放在顶层映射,当然要排除 Gitlab CI/CD 保留的顶层映射。

下面是一部分保留的顶层映射:

  • image(作业运行的 docker 映像)
  • services(其他需要在作业运行期间启动的docker映像)
  • before_script(在script之前运行)
  • after_script(在script之后运行)
  • stages(定义阶段名称和顺序)
  • variables(所有job共享的变量)
  • cache(控制在CICD运行时的数据缓存)

每一个作业必须从属于一个阶段(stages)(如果没有,默认是 test)。阶段运行在队列里,默认的阶段队列是: build、test、deploy。每一个作业都有before_script、after_script、variables、cache。在作业级别定义这些内容将会覆盖顶层配置,最终要的是变量,变量定义是一系列键值对。使用变量的语法和 bash 雷同。

下面是一些使用变量的限制:

  • 变量不支持 bash 变量的扩展、置换、预设等。
  • 变量不能递归或者具有赋值顺序。顶层的变量可以用于作业级别。

不能再同一个级别引用变量:

1
2
3
4
# 不能这样做
variables:
PROD_STAGE_NAME: prod
PROD_URL: https://thisismywebsite.com/${PROD\_STAGE\_NAME}

不能递归使用:

1
2
3
4
5
6
7
8
# 不能这样做
variables:
CURRENT\_STAGE: PROD
PROD\_STAGE\_NAME: prod

my\_job:
variables:
STAGE\_NAME: ${${CURRENT\_STAGE}\_STAGE\_NAME}

可以在作业中引用顶层变量:

1
2
3
4
5
6
7
# 可以这样做
variables:
PROD\_STAGE\_NAME: prod

my\_job:
variables:
STAGE\_NAME: ${PROD_STAGE_NAME}

之前提到过,作业就是在上下文中运行一个 bash 脚本。所以每个作业必须有一个 script。默认情况下,作业会在每次提交之后运行。使用 only、except、when 可以控制运行的时机。

only 和 except 支持以下选项:

  • 分支名称列表 例如:master 或者 develop
  • 标签名称列表
  • js 类型的正则表达式匹配分支和标签名称
  • 特殊关键字: api、branches、external、tags、pushes、schedules、triggers、web
  • 特殊的:使用 only 时,使用 branches 和 tags 设置分支或者标签,因为如果没有配置作业会在每一个分支和标签运行
  • 仓库路径过滤器处理仓库forks

重要的事情:由点开始的作业会直接禁止运行。

下面是一个配置实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
variables:
PROD_ACCOUNT: "1234567890"
PROD_STAGE_NAME: prod
PROD1_REGION: us-east-1
PROD2_REGION: us-west-2
STAGING_ACCOUNT: "0987654321"
STAGING_STAGE_NAME: staging
STAGING_REGION: us-east-1

.deployment_script: &deployment_script
stage: deploy
script: |
# assume ${DEPLOYMENT\_ROLE} in AWS
# install dependencies
# run serverless deployment with ${STAGE_NAME}, ${REGION}, and ${ACCOUNT}

.production_variables
DEPLOYMENT_ROLE: "arn:aws:iam::${PROD\_ACCOUNT}:role/gitlab-ci-deployment"
STAGE\_NAME: ${PROD_STAGE_NAME}
ACCOUNT: ${PROD\_ACCOUNT}
PRODUCTION: "true"

deploy:production\_1: &deploy\_production
<<: *deployment\_script
variables:
<<: *production\_variables
REGION: ${PROD1_REGION}
only:
- tags

deploy:production_2:
<<: *deploy_production
variables:
<<: *production_variables
REGION: ${PROD2\_REGION}

deploy:staging:
<<: *deployment\_script
variables:
DEPLOYMENT\_ROLE: "arn:aws:iam::${STAGING_ACCOUNT}:role/gitlab-ci-deployment"
STAGE_NAME: ${STAGING\_STAGE\_NAME}
REGION: ${STAGING_REGION}
ACCOUNT: ${STAGING\_ACCOUNT}
only:
- master

引用

  • 原文引用
  • 更详细的配置信息
#Gitlab #CI/CD

Copyright © 2021 zhoyq.com. All rights reserved.

京ICP备 17068495号-1