Concourse
Concourse是一个基于管道的连续做事者。
管道
围绕表示所有外部状态的 Resource
和 它们交互的 Jobs
构建。Concourse管道标识一个依赖流,有点像分布式 Makefile
的。管道被设计为自包含的,以最大限度地减少服务器范围的配置。最大限度地提高可移植性还可以降低风险,使项目更容易从 CI 灾难中恢复。
1. What's CD and CI( 什么是CI和CD )?
CI/CD是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。核心概念是持续集成、持续交付和持续部署。作为一个面向开发和运营团队的解决方案,CI/CD主要针对在集成新代码时所引发的问题(“集成地狱”)。
CI
始终持续集成,属于开发人员的自动化流成。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案可以解决在一次开发中又太多应用分支,从而导致相互冲突的问题。
CD
指的是持续交付或持续部署,这些相关概念有时会交叉使用。两者事关管道后续阶段的自动化,但它有时候也单独使用,用于说明自动化程度。
2. Pipeline 的 Resource Types
管道中的每个资源都有一个 type
。资源的类型确定检测到什么版本中,比特被取出时资源的 get
步骤运行,并且所发生的资源的当副作用 put
步骤运行。
一个 pipeline 资源类型被列在 resource_types里。
name(identifier)
:**必须的。**资源类型的名称。这个应该是简短的。该名称由同一管道中定义引用,并由管道中运行的任务使用。pipeline.resources task.image_resource
管道提供的资源类型可以通过指定相同的名称来覆盖核心资源类型。
type(resource_type.name | identifier)
:必须的。资源的类一般用作与提供了资源类型的容器镜像的资源类型。这是一个位的元。通常这个值会被registry-image
在一个容器镜像中作为资源类型是必须的。一个资源类型可以引用其他资源类型,也可以使用它覆盖的核心类型。这对于有引入或更新分叉的 registry-image
资源很有用。
source(config)
:必须的。资源类型的来源。这个值取决于资源的类型,而且对于Concourse是黑盒,不可见的,只有在运行期间,才会被加载。
privileged(boolean)
:非必须的。 布尔类型,默认值是 false
,如果被设置成 true,资源容器将会以完整功能进行运行,具体有运行任务的工作后端确定。对于基于 Linux 作为后端,通常确定容器是否将在单独的用户命名空间中运行,以及 root
用户是 实际root(如果设置了true),还是用户命名空间 root
(如果设置为 false,则为默认值)。这是一个安全漏洞,仅在资源类型需要时才配置它。这不取决于资源类型动态决定,以防止通过第三方资源类型漏洞进行提权。
params(config)
:非必须的。在运行 get
以获取资源类型的图像时传递的任意配置。
check_every(duration)
:非必须的。每次检查时长。默认是1分钟。这个每次去检测资源类型的新版本。可以接受的间隔选项由 time.ParseDuration
函数定义。
tags([String])
:非必须的。默认是[]。一堆字符串数组。用于确定将对那些工作人员执行检查的标签列表。例如,如果源位于工作人员网络的内部,将必须指定此项。
defaults(config)
:资源类型的默认配置。这个值由资源类型确定,而且对于concourse是黑盒的(不可见的)。重复字段被覆盖,合并并在运行时传递给资源。
在pipeline.yml
中的 resource_types
。
resource_types:
- name: gcs
type: registry-image
source:
repository: frodenas/gcs-resource
defaults:
json_key: ((default_key))
设置资源的默认配置
resource_types:
- name: gcs
type: registry-image
source:
repository: frodenas/gcs-resource
defaults:
json_key: ((default_key))
resources:
- name: bucket-a
type: gcs
source:
bucket: a
- name: bucket-b
type: gcs
source:
bucket: b
- name: bucket-c
type: gcs
source:
bucket: c
json_key: ((different_key))
覆盖资源的默认配置(由于可以覆盖基本资源类,因此它可用于在管道级别为资源提供默认值)
resource_types:
- name: registry-image
type: registry-image
source:
repository: concourse/registry-image-resource
defaults:
registry-mirror:
host: https://registry.mirror.example.com
resources:
- name: mirrored-image
type: registry-image
source:
repository: busybox
3.Pipeline 的 Jobs
Jobs在管道里定义了一些列的动作。它定义了资源如何通过,并且管道如何抽象化。最重要的一项职责是创建计划,作为 job.plan
定义。 它形象描述了如何一步步的执行这个工作。管道 jobs
配置在 pipeline.jobs
,包含了以下参数。
name(identifier)
:必须的。job 名称,这个应该是简单的,它将显示在URL中。
plan([step])
:必须的。一些列执行步骤。
old_name(identifier)
:非必须的。job的旧名称。如果配置,旧job的历史记录将被继承到新工作。设置管道后,可以传输构建时删除此字段。
可用于重命名作业而不会丢失其历史记录
jobs:
- name: new-name
old_name: current-name
plan: [get:10m]
设置管道后,由于构建已被继承,作业可以删除该字段
jobs:
- name: new-name
plan: [get: 10m]
serial
:非必须的。布尔类型 boolean,默认值为 false。如果设置 true,构建将会按顺序一个个执行,而不是并行去执行。
评论区