2019-10-15 TIL

  • circleCI를 통해 build하고 image를 ECR에 push를 했다.
version: 2.1
orbs:
  aws-s3: circleci/aws-s3@1.0.11
  aws-ecr: circleci/aws-ecr@6.5.0
  aws-cli: circleci/aws-cli@0.1.15
  slack: circleci/slack@3.4.0

workflows:
  jimmy-custom-build:
    jobs:
      - build-and-push-image
jobs:
  build-and-push-image:
    docker:
      - image: circleci/node:10 # the primary container, where your job's commands are run
        environment:
          REACT_APP_NODE_API_URL: $REACT_APP_NODE_API_URL
          REACT_APP_IMAGE_URI: $REACT_APP_IMAGE_URI
          DB_SCHEMA: $DB_SCHEMA
          DB_USER: $DB_USER
          DB_PASSWORD: $DB_PASSWORD
          PROD_DB_URL: $PROD_DB_URL
          DEV_DB_URL: $DEV_DB_URL
          TEST_DB_URL: $TEST_DB_URL
          MIGRATE_dbConnectionUri: $MIGRATE_dbConnectionUri
          JWT_SECRET: $JWT_SECRET
          GOOGLE_API_CLIENT_ID: $GOOGLE_API_CLIENT_ID
          GOOGLE_API_CLIENT_SECRET: $GOOGLE_API_CLIENT_SECRET
          GOOGLE_API_REDIRECT_URL: $GOOGLE_API_REDIRECT_URL
          GOOGLE_API_SCOPE: $GOOGLE_API_SCOPE
    parameters:
      account-url:
        default: AWS_ECR_ACCOUNT_URL
        type: env_var_name
      aws-access-key-id:
        default: AWS_ACCESS_KEY_ID
        type: env_var_name
      aws-secret-access-key:
        default: AWS_SECRET_ACCESS_KEY
        type: env_var_name
      dockerfile:
        default: Dockerfile
        type: string
    steps:
      - when:
          condition: <<parameters.checkout>>
          steps:
            - checkout
      - aws-cli/install
      - aws-cli/configure:
          aws-access-key-id: <<parameters.aws-access-key-id>>
          aws-region: <<parameters.region>>
          aws-secret-access-key: <<parameters.aws-secret-access-key>>
          profile-name: <<parameters.profile-name>>
      - when:
          condition: <<parameters.attach-workspace>>
          steps:
            - attach_workspace:
                at: <<parameters.workspace-root>>
      - aws-ecr/ecr-login:
          region: <<parameters.region>>
      - aws-ecr/build-image:
          account-url: <<parameters.account-url>>
          dockerfile: <<parameters.dockerfile>>
          extra-build-args: <<parameters.extra-build-args>>
          path: <<parameters.path>>
          repo: <<parameters.repo>>
          tag: <<parameters.tag>>
      - when:
          condition: <<parameters.create-repo>>
          steps:
            - run: >
                aws ecr describe-repositories --profile <<parameters.profile-name>>
                --region $<<parameters.region>> --repository-names
                <<parameters.repo>> > /dev/null 2>&1 || \

                aws ecr create-repository --profile <<parameters.profile-name>>
                --region $<<parameters.region>> --repository-name
                <<parameters.repo>>
      - aws-ecr/push-image:
          account-url: <<parameters.account-url>>
          repo: <<parameters.repo>>
          tag: <<parameters.tag>>
  • 어제 스크립트 작성을 했을때 ecr-login이라는 command를 찾을 수 없다고 명령어가 나왔다. 고민 고민을 하다가 이유를 찾았다. ecr-login, build-image와 같은 ecr에 있는 command들을 사용하기 위해서는 aws-ecr/ecr-login처럼 붙여줘야 명령어를 읽어들일 수 있다. 위에서 보듯이 aws-cli는 install, configure명령어가 존재를 하는데, 위의 명령어를 쓰기 위해서는 aws-cli/install과 같이 사용해야된다. 이 부분을 해결하고 나니 build가 잘되고 성공적으로 ECR에 이미지가 올라갔다. 이제 ECS를 이용해서 EC2에 배포를 해야겠다.
Written on October 15, 2019