让Concourse只在文件diff上构建新的docker容器而不是在commit

时间:2016-11-16 18:52:05

标签: git docker concourse

所以我有一个管道,可以从一个git仓库构建多个docker容器。它看起来像这样:

---
resources:
- name: resource-docker
  type: git
  source:
    uri: https://github.com/$MYUSER/$MYREPO.git
    branch: master

# docker-image resources
- name: first-container
  type: docker-image
  source:
    repository: $MYUSER/first-container

- name: second-container
  type: docker-image
  source:
    repository: $MYUSER/second-container

jobs:
# image-update jobs
- name: first-container-image-update
  public: true
  serial_groups:
    - serial_lock
  plan:
  - get: resource-docker
    serial: true
  - put: first-container
    params:
      build: resource-docker/first-container-path

- name: second-container-image-update
  public: true
  serial_groups:
    - serial_lock
  plan:
  - get: resource-docker
    serial: true
  - put: second-container
    params:
      build: resource-docker/second-container-path

问题是运行resource-docker任务占用了大部分系统资源,并在每次提交时从头开始重建容器到master(其中包含的代码多于docker容器)。

我想做这些任务,而不是比较用于构建容器的旧文件和新文件,如果文件中存在差异,则只重建容器。

注意:将文件分成不同的存储库是我想要避免的选项。

2 个答案:

答案 0 :(得分:3)

您的资源可以配置为仅在更新repo中的特定文件时触发新版本:

        var request = WebRequest.Create("http://api.fos.be/person/login.json?login=200100593&password=pass");
        request.Headers["Authorization"] = "Basic MYAUTHTOKEN";
        var response = await request.GetResponseAsync();

答案 1 :(得分:2)

如果Quintana的回答并不完全清楚,那么你可以定义多个指向同一个Git存储库的Git资源。每个资源都可以使用paths / ignore_paths来指定要查看的字段。