使用 Concourse 的 docker 资源获取要在 docker 撰写中使用的容器

Use Concourse's docker resource to fetch containers to be used in a docker compose

是否可以使用 concourse 的 docker 资源来获取要在 docker 组合任务中使用的容器?目前,我只是从我的私人 docker 注册表中获取用于我的集成测试的容器,但是这样做 connections/resources 不会出现在大厅 UI 中。有什么想法吗?

这是我目前的任务:

---
platform: linux
inputs:
- name: devops-repo
- name:client-repo
params:
  RUNNER_IMG:
  CLIENT_IMG:
  SERVER_IMG:
run:
  path: sh
  args:
  - -exc
  - |
    # "E2E testing:"
      - |
        # Export map the parameters to the dockerfile env.
        export docker-registry-protractor=${RUNNER_IMG}
        export docker-registry-client-dist=${CLIENT_IMG}
        export docker-registry-server-dist=${SERVER_IMG}

        export HOME=/protractor
        # Move to the Protractor test project folder
        mkdir $HOME
        # Get the docker compose file:
        cp devops-repo/my-pipeline/templates/e2e/docker-compose.yml $HOME/docker-compose.yml
        # Get the tests:
        cp client-repo/test/e2e/** $HOME
        cd $HOME

        # https://github.com/concourse/concourse/issues/324

        # Spin up the stack as described in docker-compose:
        docker daemon &
        docker-compose up

Dockerfile 使用在管道的前一步构建并上传到私有 docker 注册表的容器。

This repo 很好地介绍了如何 运行 docker 在大厅的 docker 中撰写 - 你最终做的是使用 docker 预装 docker compose 的图像,然后加载其他图像。使用 concourse 预取这些图像,然后在本地缓存它们确实有助于提高性能。

一个技巧是将 docker compose 文件放在获取的代码存储库中实际上更容易,而不是放在 concourse 配置中。

缩略语 yml:

  - name: integration
    plan:
      - aggregate:
        - get: code-from-git-resource
          params: {depth: 1}
          passed: [unit-tests]
          trigger: true
        - get: redis-docker-image
          params: {save: true}
        - get: busybox-docker-image
          params: {save: true}
      - task: Run integration tests
        privileged: true
        config:
          platform: linux
          image_resource:
            type: docker-image
            source:
              repository: amidos/dcind
          inputs:
            - name: code-from-git-resource
            - name: redis-docker-image
            - name: busybox-docker-image
          run:
            path: sh
            args:
              - -exc
              - |
                source /docker-lib.sh
                start_docker

                # Strictly speaking, preloading of images is not required.
                # However you might want to do it for a couple of reasons:
                # - If the image is from a private repository, it is much easier to let concourse pull it,
                #   and then pass it through to the task.
                # - When the image is passed to the task, Concourse can often get the image from its cache.
                docker load -i redis-docker-image/image
                docker tag "$(cat redis-docker-image/image-id)" "$(cat redis-docker-image/repository):$(cat redis-docker-image/tag)"

                docker load -i busybox-docker-image/image
                docker tag "$(cat busybox-docker-image/image-id)" "$(cat busybox-docker-image/repository):$(cat busybox-docker-image/tag)"

                # Run the tests container and its dependencies.
                docker-compose -f code-from-git-resource/example/integration.yml run tests