Concourse CI 是一款 CI/CD 工具,它的魅力在于极简设计,被广泛应用于 Cloud Foundry 各个模块的 CI/CD。Concourse CI 官方提供了标准的 Docker 镜像,您可以通过阿里云容器服务快速部署一套 Concourse CI 应用。

如果您还不了解 Concourse CI 这款工具,您可以先了解一下 Concourse 的原理。请参见 concourse 官网


创建 Swarm 集群

登录 容器服务管理控制台 创建一个集群。本示例中以包含 1 个节点,网络类型为 VPC 的 swarm 集群为例进行说明。

关于如何创建集群,请参见 创建集群

Note 在创建容器集群时,请保留 EIP 。因为需要为 Concourse 配置外部 URL 地址,让您从本机访问 concourse 的 web 服务。


配置安全组规则

Concourse 的组件 ATC 默认监听 8080 端口,因此您需要为集群的安全组配置 8080 端口的入网权限。

  1. 容器服务管理控制台 的 swarm 集群列表页面,选择前面创建的集群并单击右侧的管理,进入集群详情页面。
  2. 在集群的基本信息中,单击安全组的ID,跳转到集群的安全组页面。


  3. 单击左侧导航栏中的安全组规则,并单击页面右上角的添加安全组规则


  4. 为安全组配置 8080 端口的入网权限并单击确定


在 ECS 节点上创建 key

为了安全运行 Concourse,您需要生成 3 个私有 key。

  1. 登录到 ECS 节点上,在根目录下,创建目录 keys/web keys/worker 。您可以执行以下命令,快速创建这两个目录。
    mkdir -p keys/web keys/worker
  2. 执行以下命令,生成 3 个私有 key。
    ssh-keygen -t rsa -f tsa_host_key -N ''
    ssh-keygen -t rsa -f worker_key -N ''
    ssh-keygen -t rsa -f session_signing_key -N ''
  3. 将证书拷贝到相应的目录下。
    cp ./keys/worker/worker_key.pub ./keys/web/authorized_worker_keys
    cp ./keys/web/tsa_host_key.pub ./keys/worker

部署 Concourse CI

  1. 登录 容器服务管理控制台
  2. 在 Swarm 菜单下,单击左侧导航栏中的 配置项,创建配置文件,变量名称为 CONCOURSE_EXTERNAL_URL,变量值为 http://your-ecs-public-ip:8080


  3. 单击左侧导航栏的 应用,选择本示例中使用的集群,并单击 创建应用
  4. 填写应用的基本信息,并选择 使用编排模板创建应用。模板如下。
    version: '2'
     services:
       concourse-db:
         image: postgres:9.5
         privileged: true
         environment:
           POSTGRES_DB: concourse
           POSTGRES_USER: concourse
           POSTGRES_PASSWORD: changeme
           PGDATA: /database
       concourse-web:
         image: concourse/concourse
         links: [concourse-db]
         command: web
         privileged: true
         depends_on: [concourse-db]
         ports: ["8080:8080"]              
         volumes: ["/root/keys/web:/concourse-keys"]   
         restart: unless-stopped # required so that it retries until conocurse-db comes up
         environment:
           CONCOURSE_BASIC_AUTH_USERNAME: concourse
           CONCOURSE_BASIC_AUTH_PASSWORD: changeme
           CONCOURSE_EXTERNAL_URL: "${CONCOURSE_EXTERNAL_URL}"
           CONCOURSE_POSTGRES_HOST: concourse-db
           CONCOURSE_POSTGRES_USER: concourse
           CONCOURSE_POSTGRES_PASSWORD: changeme
           CONCOURSE_POSTGRES_DATABASE: concourse
       concourse-worker:
         image: concourse/concourse
         privileged: true
         links: [concourse-web]
         depends_on: [concourse-web]
         command: worker
         volumes: ["/keys/worker:/concourse-keys"]
         environment:
           CONCOURSE_TSA_HOST: concourse-web
         dns: 8.8.8.8
  5. 单击创建并部署时,会提示您配置模板参数,您需要选择关联配置文件,再单击使用配置文件变量


    应用创建之后会启动如下 3 个服务。


    至此,Concourse CI 部署完成,在浏览器输入 http://your-ecs-public-ip:8080 即可进行访问。


运行 CI 任务(Hello world)

  1. 在上一步浏览器中下载对应您操作系统的 CLI,然后安装 CLI 客户端,本例以 ECS(Ubuntu16.04)为例。
  2. 针对 Linux 和 Mac OS X 系统,首先需要给下载的 FLY CLI 文件添加执行权限,然后安装到系统并添加到 $PATH中:
    chmod +x fly
     install fly /usr/local/bin/fly
  3. 安装之后可以查看一下版本。
    $fly -v
     3.4.0
  4. 连接 Target,用户名和密码默认是 concourse 和 changeme。
    $ fly -t lite login -c http://your-ecs-public-ip:8080
     in to team 'main'
     username: concourse
     password:
     saved
  5. 将下面的配置模板保存为 hello.yml
    jobs:
     - name: hello-world
       plan:
       - task: say-hello
         config:
           platform: linux
           image_resource:
             type: docker-image
             source: {repository: ubuntu}
           run:
             path: echo
             args: ["Hello, world!"]
  6. 注册任务。
    fly -t lite set-pipeline -p hello-world -c hello.yml
  7. 启动任务。
    fly -t lite unpause-pipeline -p hello-world
    成功执行的界面如下。


更多关于 Concourse CI 的特性,请参见 Concourse CI 项目