ECR에서 drone CI로 pull image

오랜만에 투고하다.
현재 자신의 회사에서 개발을 수탁하면서 개인 사업주로서 부업을 하면서 계약직으로 일하고 있다revenue-hack.
https://www.praha-inc.com/
이런 회사가 있어요.
그럼 이번에drone CI에서 ECR에서pull, 그렇게docker run 컨테이너를 싣는 방법을 얘기해 봅시다.

대상 사용자

  • drone CI를 사용하는 사람
  • 컨테이너 시스템 CI에 관심이 있는 사람
  • AWS 및 drone CI를 사용하는 사람
  • drone CI 정보


    drone CI에 대한 다양한 보도가 있습니다. 자세한 설명은 하지 않고, 도커 컨테이너 안에서 임무를 수행하는 CI입니다.
    따라서drone CI 자체는 docker가 만든 것으로 docker in docker처럼 임무를 수행하는 것 같다.
  • https://engineering.linecorp.com/ja/blog/go-oss-ci-tool-drone-replaces-jenkins/
  • 이런 건 참고할 수 있어요.
    그리고 2019-03-11 지금은 v1.0.0-rc.6 때문에 조금 더 있다ga~
    - https://github.com/drone/drone

    이번 드론 CI 사용법


    이번에drone CI의 사용법으로 다음과 같은 간단한 기교를 시도해 봤습니다.

    drone CI에서 imge build &push


    먼저 docker CI로 이미지 메이킹을 수행하는 방법입니다.
    다음은 .drone.yml(build 작업만 있음)입니다.
    develop-build:
        group: build
        image: plugins/ecr
        region: ap-northeast-1
        registry: registry uri
        environment:
          - AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
          - AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
        secrets: [ AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY ]
        dockerfile: ./Dockerfile
        tags: ${DRONE_COMMIT:0:8}
        when:
          branch: develop
          event: push
    
    이미지는 공식 플러그인plugins/ecr이기 때문에 그것을 사용합니다.
    job의 키region, registry, repo를 지정합니다.
    key
    value
    설명
    group
    build
    같은value로 그룹을 나누면 병렬 처리할 수 있습니다
    region
    ap-northeast-1(도쿄)
    ECR 범위
    registry
    registry uri
    ECR의 registry uri
    environment
    환경 변수
    ECR 등록에 필요한 IAM 로그인 정보(access key, secret key)
    dockerfile
    ./Dockerfile
    Docker file의 위치
    tag
    ${DRONE_COMMIT:0:8}
    docker tag.${DRON COMMIT:0:8} 에서commiit hash 상위 8 비트 사용 가능
    when
    실행 시기
    이번 상황에서 개발자 지점이push가 되면 이job가 실행됩니다
    그리고 시크릿에 등록aws_access_key_id하고 aws_secret_access_key하세요.
    https://docs.drone.io/user-guide/pipeline/secrets/
    이 job을 실행하면 Registry URI에 이미지가 표시됩니다.

    drone CI에서 image pull


    이번 주제도 내용이 있다.
    push는 좋은 물건을 어떻게 pull해야 좋을지 고민입니다.
    결국 이미지를 만들었다.
    - https://hub.docker.com/r/revenuehack/drone-ecr-auth
    - https://github.com/revenue-hack/drone-ecr-auth
    이걸로 ECR 인증을 통과한 후scriptscommands무엇이든 좋습니다.
    하지만 물론 동일한 과정에서만 인증을 지속할 수 있으니 주의하세요.
      develop-deploy:
        group: deploy
        image: revenuehack/drone-ecr-auth
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
        environment:
          - AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
          - AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
          - AWS_REGION=ap-northeaxt-1
        secrets: [ AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY ]
        commands:
          - $(aws ecr get-login --region ap-northeast-1 --no-include-email)
          - docker pull registry_url:${DRONE_COMMIT:0:8}
          - docker run -d -p 8181:80 --net net-network_default --name=web_development registry_url:${DRONE_COMMIT:0:8}
        when:
          branch: develop
          event: push
    
    화면에 방금 거revenuehack/drone-ecr-auth를 지정해 주세요.
    그리고 환경 변수를 만드는 것을 잊지 마라.
    그리고 마지막으로 commands에서 $(aws ecr get-login --region ap-northeast-1 --no-include-email) 할게요.
    인증을 통과할 수 있기 때문에 그곳에서pull이나run을 할 수 있고 마음대로 할 수 있다.
    지금까지 드론 CI에서 ECR에서 pull로 나온 방법입니다.

    Reference

  • https://github.com/drone/drone
  • https://engineering.linecorp.com/ja/blog/go-oss-ci-tool-drone-replaces-jenkins/
  • https://hub.docker.com/r/revenuehack/drone-ecr-auth
  • https://github.com/revenue-hack/drone-ecr-auth
  • 좋은 웹페이지 즐겨찾기