编写流程定义 daocloud.yml 文件
我们推荐用户使用 DaoCloud Services 界面进行项目的流程定义,比较简单易用。
你也可以选择使用在代码中添加 daocloud.yml 文件来描述流程定义,以下为 daocloud.yml 文件的结构说明。
version: 3.0 image: golang:1.7.4 env: - LANGUAGE=go stages: - test - build - deploy test_api: stage: test image: ubuntu:16.04 env: - password=admin services: - redis - mysql script: - echo hello pull_request: false only: branches: - master tags: - v1* except: tags: - v1.0 test_api2: stage: test env: - password=admin script: - env pull_request: false only: branches: - master tags: - v1* except: tags: - v1.0 docker_image: stage: build job_type: image_build dockerfile_path: /Dockerfile build_dir: / build_args: - http_proxy=http://10.0.0.1 only: branches: - master tags: - v1 deploy_to_k8s: label: prod-env image: alpine stage: deploy script: - curl http://xxxxx.com:80/deploy dev-deploy: label: dev-env job_type: DCS_deploy stage: deploy app_name: xxxxxxx cluster_id: tttttttttttt only: branches: - master tags: - v1
keywords
字段 | 必填 | 描述 |
---|---|---|
version | 是 | 版本号 |
image | 否 | 全局镜像 |
env | 否 | 全局环境变量 |
stages | 否 | 定义任务的执行阶段 |
version
daocloud.yml 的版本号,最新为 3.0 。
image
自定义的 Docker 镜像,是默认的任务环境,任务域内的 Docker 镜像优先于默认任务环境。
env
全局环境变量,会注入到每个测试、默认任务中,任务域内的环境变量优先于全局环境变量。
stages
stages
用于定义任务的执行阶段。
- 同一个执行阶段下的任务会被并行执行,
- 不同阶段的任务需要上一个阶段的所有任务执行成功后执行。
例如:
stages: - test - build - deploy
- 首先会并行执行所有 test 阶段的任务。
- 如果所有 test 阶段的任务执行成功,则接着并行执行所有 build 阶段的任务。
- 如果所有 build 阶段的任务执行成功,则接着并行执行所有 deploy 阶段的任务。
- 如果某个阶段的任务执行失败,其后执行阶段的所有任务将会被略过。
此段不填,则默认按 test
,build
,deploy
三执行阶段顺序执行。
任务
每个任务都是独立不重名的执行单元,拥有独立的执行环境,每个任务的行为都由一系列参数来指定。任务具有不同的 job_type
类型,目前我们提供 default
、test
、image_build
、lite_image_build
、DCS_deploy
、DCE_deploy
、DCS_test_deploy
七种类型的任务。
1. 默认任务
job_type
: default
。
默认任务只需指定基础镜像和几行 shell 命令即可执行。
未指定任务类型时,使用默认的任务类别。代码的根目录为当前任务的工作目录。
job_name: label: staging job_type: default stage: test image: go:1.8.0 env: - password=admin script: - go get ./... - go test -v ./... pull_request: false only: branches: - master tags: - v1* except: tag: - v1.0 allow_failure: true
字段 | 必填 | 描述 |
---|---|---|
job_type | 否 | 任务类型,默认为 default |
stage | 否 | 执行阶段名称 |
image | 否 | 任务执行环境 |
env | 否 | 任务的环境变量 |
script | 是 | 任务执行脚本 |
pull_request | 否 | 在代码源发起 pull request 时是否执行该任务 |
only | 否 | 仅当某些分支或者代码标签下执行 |
except | 否 | 不在某些分支或者代码标签下执行 |
allow_failure | 否 | 是否允许失败 |
label | 否 | 标识 |
stage
指定执行阶段名称。相同 stage
的任务为一组并行执行。如不填写,默认为 default
。
job image 和 job env
image
任务运行时的 docker 镜像,优先级高于全局镜像,不填时则使用全局镜像。 env
任务运行时的环境变量,优先级高于全局环境变量,执行任务时会自动注入全局环境变量。
script
script
指定任务执行的脚本,该脚本会被放在任务环境中的代码根目录下使用 bash 运行。
pull_request、only 和 except
pull_request
:在代码源发起 pull request 时是否执行该任务。默认不执行。only
和except
都有参数branches
、tags
。only
指定仅当某些分支或者代码标签下执行,except
指定不在某些分支或者代码标签下执行。值可以是一个正则表达式。except
的优先级高于only
。- 如果不填写
only
和except
则在所有分支和代码标签下,都会执行该任务。
allow_failure
allow_failure
允许任务失败,这样当任务失败时,该任务的执行阶段会被标记为 Warning
,并且不影响下个执行阶段的执行。默认不允许失败。
label
label
任务的标识,可以成组显示,一般用于表示特定的运行或者发布环境。
2. 测试任务
job_type
: test
测试任务主要用于执行一些单元测试或者集成测试,可以配置数据库服务。
job_name: label: staging job_type: test stage: test image: go:1.8.0 env: - password=admin services: - redis - mysql script: - go get ./... - go test -v ./... pull_request: false only: branches: - master tags: - v1* except: tag: - v1.0 allow_failure: true
字段 | 必填 | 描述 |
---|---|---|
job_type | 是 | 任务类型 test |
stage | 否 | 执行阶段名称 |
image | 否 | 任务执行环境 |
env | 否 | 任务的环境变量 |
services | 否 | 任务使用的服务列表 |
install | 否 | 安装脚本 |
before_script | 否 | 测试之前的脚本 |
script | 是 | 任务执行脚本 |
pull_request | 否 | 在代码源发起 pull request 时是否执行该任务 |
only | 否 | 仅当某些分支或者代码标签下执行 |
except | 否 | 不在某些分支或者代码标签下执行 |
allow_failure | 否 | 是否允许失败 |
label | 否 | 标识 |
services
任务可以使用一系列由我们提供的服务,如 redis,mysql,postgre 等。
install
安装脚本,用于安装一些必要软件
before_script
测试之前的脚本,预备动作。
3. 标准构建
job_type
:image_build
标准构建流程,是 Docker 原生构建方式,包含一个操作:从 Dockerfile 构建镜像。
job_name: stage: build job_type: image_build dockerfile_path: /Dockerfile build_dir: app/ build_args: - http_proxy=http://10.0.0.1 only: branches: - master tags: - v1 dependencies: - test_api
字段 | 必填 | 描述 |
---|---|---|
stage | 否 | 执行阶段名称 |
job_type | 是 | image_build |
args | 否 | 任务的构建变量列表 |
dockerfile_path | 是 | Dockerfile 路径 |
build_dir | 是 | 构建路径 |
cache | 否 | 是否启用镜像缓存 |
only | 否 | 仅当某些分支或者代码标签下执行 |
except | 否 | 不在某些分支或者代码标签下执行 |
allow_failure | 否 | 是否允许失败 |
label | 否 | 标签 |
build_args
任务的构建变量列表,该变量列表会被注入到镜像内,注意在此谨慎使用敏感信息。
cache
开启缓存会把最近的一次构建过程缓存起来,从而获得更快的构建体验。如果需要使用一个干净的构建环境可以关闭缓存。
dockerfilepath 和 builddir
dockerfile_path
为 Dockerfile 路径, build_dir
为 构建路径。 注意:build_dir
必须为 dockerfile_path
的父目录。
4. 安全构建
job_type
: lite_image_build
安全镜像构建流程包含三个步骤:代码编译、文件提取、打包镜像。通过分离编译和打包,产生一个安全、精巧、不含源代码的生产级别镜像。
docker_image: stage: build label: prod job_type: lite_image_build compile: dockerfile_path: Dockerfile.compile build_dir: / cache: true build_args: - https_proxy=http://10.0.0.1 extract: - /usr/bin/application package: dockerfile_path: Dockerfile.package build_dir: / cache: true build_args: - http_proxy=http://10.0.0.1 only: branches: - master tags: - v1
字段 | 必填 | 描述 |
---|---|---|
stage | 否 | 执行阶段名称 |
job_type | 是 | lite_image_build |
compile | 是 | 任务编译环节 |
extract | 是 | 任务提取环节 |
package | 是 | 打包镜像环节 |
only | 否 | 仅当某些分支或者代码标签下执行 |
except | 否 | 不在某些分支或者代码标签下执行 |
allow_failure | 否 | 是否允许失败 |
label | 否 | 标识 |
compile
任务编译环节,通过指定镜像构建过程,从源代码构建出可执行文件。 包含以下字段:
字段 | 必填 | 描述 |
---|---|---|
args | 否 | 任务的构建变量列表 |
dockerfile_path | 是 | Dockerfile 路径 |
build_dir | 是 | 构建路径 |
cache | 否 | 是否启用镜像缓存 |
extract
从“编译”步骤中生成的 Docker 镜像中,提取某些文件,一般是可执行文件。
package
将“文件提取”步骤中获得的文件打包至新的镜像,生成安全,精巧的生产级别镜像。 字段与 compile 相同。
5. 发布到自有主机、发布到 DCE、发布到测试环境
DCS_deploy
:发布到自有主机,将上个任务构建出的镜像发布到您的自有主机上,自动升级您的应用。
DCE_deploy
:发布到 DCE,将上个任务构建出的镜像发布到您的 DCE 集群上,自动升级您的服务。
DCS_test_deploy
:发布到测试环境,将上个任务构建出的镜像发布到云端测试环境,即刻开始您的应用测试。
dev-deploy: job_type: DCS_deploy stage: deploy app_name: 2048 cluster_id: tttttttttttt only: branches: - master tags: - v1
字段 | 必填 | 描述 |
---|---|---|
job_type | 是 | 必填,如 DCS_deploy 、DCE_deploy 、DCS_test_deploy |
stage | 否 | 执行阶段名称 |
app_name | 是 | 部署任务的应用名称 |
cluster_id | 否 | 应用的集群 ID |
only | 否 | 仅当某些分支或者代码标签下执行 |
except | 否 | 不在某些分支或者代码标签下执行 |
allow_failure | 否 | 是否允许失败 |
label | 否 | 标识 |
app_name
app_name
部署任务的应用名称,在 DCE 环境中则为服务名。
cluster_id
cluster_id
为应用的集群 ID,当使用 DCE 环境时,此项为必填。