Circleci 2.0 Build on Dockerfile

时间:2018-04-19 20:12:45

标签: docker circleci

我有一个Node.JS应用程序,我想使用CircleCI和Amazon ECR构建和测试。有关如何从存储库中的Dockerfile构建映像的文档不明确。我看过这里:https://circleci.com/docs/2.0/building-docker-images/https://circleci.com/blog/multi-stage-docker-builds/但我不清楚我在执行者身下放了什么。这是我到目前为止所得到的:

version: 2
jobs:
  build:
    docker:
    steps:
        - checkout
        - setup_remote_docker:
            version: 17.05.0-ce
        # build the image
        - run: docker build -t $ECR_REPO:0.1 .

CircleCI因以下错误而失败:

* The job has no executor type specified. The job should have one of the following keys specified: "machine", "docker", "macos"

基本映像来自Dockerfile。我正在使用CircleCI内置的AWS Integration,所以我认为我不需要添加aws_auth。我需要在执行程序下放置什么才能使其运行?

2 个答案:

答案 0 :(得分:1)

使用Docker-in-Docker配置构建它:

version: 2
jobs:
  build:
    working_directory: /app
    docker:
      - image: docker:17.05.0-ce-git
    steps:
      - checkout
      - setup_remote_docker
      - run:
          name: Install dependencies
          command: |
            apk add --no-cache \
              py-pip=9.0.0-r1 gcc \
              libffi-dev python-dev \
              linux-headers \
              musl-dev \
              libressl-dev \
              make
            pip install \
              docker-compose==1.12.0 \
              awscli==1.11.76 \
              ansible==2.4.2.0
      - run:
          name: Save Vault Password to File
          command: echo $ANSIBLE_VAULT_PASS > .vault-pass.txt
      - run:
          name: Decrypt .env
          command: |
            ansible-vault decrypt .circleci/envs --vault-password-file .vault-pass.txt
      - run:
          name: Move .env
          command: rm -f .env && mv .circleci/envs .env
      - restore_cache:
          keys:
            - v1-{{ .Branch }}
          paths:
            - /caches/app.tar
      - run:
          name: Load Docker image layer cache
          command: |
            set +o pipefail
            docker load -i /caches/app.tar | true
      - run:
          name: Build application Docker image
          command: |
            docker build --cache-from=app -t app .
      - run:
          name: Save Docker image layer cache
          command: |
            mkdir -p /caches
            docker save -o /caches/app.tar app
      - save_cache:
          key: v1-{{ .Branch }}-{{ epoch }}
          paths:
            - /caches/app.tar
      - deploy:
          name: Push application Docker image
          command: |
            if [ "${CIRCLE_BRANCH}" == "master" ]; then
              login="$(aws ecr get-login --region $ECR_REGION)"
              ${login}
              docker tag app "${ECR_ENDPOINT}:${CIRCLE_SHA1}"
              docker push "${ECR_ENDPOINT}:${CIRCLE_SHA1}"
            fi

答案 1 :(得分:1)

您需要为构建指定一个Docker镜像,以便首先运行。这应该有效:

version: 2
jobs:
  build:
    docker:
      - image: docker:stable-git
    steps:
      - checkout
      - setup_remote_docker:
          version: 17.05.0-ce
      # build the image
      - run: docker build -t $ECR_REPO:0.1 .