공부하기싫어
article thumbnail
Published 2023. 8. 10. 01:23
AWS CodeBuild demo with ECR AWS/CI CD

목차

     

    테스트 목적

    • codebuild 의 buildspec 작성 요령
    • codebuild 의 ecr push 를 위한 역할 생성 확인
    • codebuild 의 buildspec 에서 phases 정의 후 ecr push 확인

     

    ECR 은 미리 생성함

     

    1. CodeBuild 생성

    1.1 Project configuration

    프로젝트 이름

    1.2 Source

    soure

    branch 로 reference type 을 설정

    main - default branch

     

    1.3 Enviornment

    image / os / runtime

    사진엔 체크 되어있지 않지만

    Privileged 를 체크해줘야만 docker 명령어가 사용 가능하다.

     

     

     

    service role / timeout

    Service Role 이름을 알아볼 수 있게 수정해주고

    time 은 기본값으로 두었다

     

    compute / variables

    ECR 에 push 하기 위한 환경변수들을 미리 추가해줬다

     

    1.4 etc

    buildspec / batch / artifacts

     

    logs

    cloudwatch 로 가서 log group 생성해주고 stream 은 여기서 이름만 지정해주면 알아서 생성됨

     

    1.5 인라인 정책 연결

    필요한 정책 연결

    ECR 로 검색해서

    inline policy

    위 액션에 있는 정책들과

    GetAuthorizationToken

    을 선택해주고
     
     

    Sepcify arn

    내 ECR arn 을 추가해줌

     

    이후 정책명 입력 후 정책 추가

     

     

    2. buildspec

    buildspec.yml 개요

    더보기

    buildspec 파일 이름 및 스토리지 위치

    buildspec을 소스 코드의 일부로 포함하는 경우, 기본적으로 buildspec 파일에 buildspec.yml이라는 이름을 지정해야 하며 이 파일을 소스 디렉터리의 루트에 배치해야 합니다.

    기본 buildspec 파일 이름과 위치를 재정의할 수 있습니다. 예를 들어 다음을 수행할 수 있습니다.

    • 동일한 리포지토리의 다른 빌드에 대해 buildspec_debug.yml  buildspec_release.yml과 같은 다른 buildspec 파일을 사용합니다.
    • buildspec 파일을 config/buildspec.yml과 같은 소스 디렉터리의 루트가 아닌 다른 위치 또는 S3 버킷에 저장합니다. S3 버킷은 빌드 프로젝트와 동일한 AWS 리전에 있어야 합니다. ARN을 사용하여 buildspec 파일을 지정합니다(예: arn:aws:s3:::my-codebuild-sample2/buildspec.yml).

    buildspec 파일의 이름과 상관없이, 한 빌드 프로젝트에 대해 하나의 buildspec만 지정할 수 있습니다.

    기본 buildspec 파일 이름이나 위치 또는 둘 다를 재정의하려면 다음 중 하나를 수행합니다.

    • buildspec 값을 내장 환경 변수 CODEBUILD_SRC_DIR의 값에 상대적인 대체 buildspec 파일의 경로로 설정하여 AWS CLI create-project 또는 update-project 명령을 실행합니다. 또한 AWS SDK의 create project 작업과 동등한 작업을 수행할 수 있습니다. 자세한 내용은 빌드 프로젝트 생성 또는 빌드 프로젝트 설정 변경 섹션을 참조하세요.
    • buildspecOverride 값을 내장 환경 변수 CODEBUILD_SRC_DIR의 값에 상대적인 대체 buildspec 파일의 경로로 설정하여 AWS CLI start-build 명령을 실행합니다. 또한 AWS SDK의 start build 작업과 동등한 작업을 수행할 수 있습니다. 자세한 정보는 빌드 실행을 참조하세요.
    • AWS CloudFormation 템플릿에서 AWS::CodeBuild::Project 유형의 리소스에 있는 Source의 BuildSpec 속성을 내장 환경 변수 CODEBUILD_SRC_DIR의 값에 상대적인 대체 buildspec 파일의 경로로 설정합니다. 자세한 내용은 AWS CloudFormation사용 설명서에서 AWS CodeBuild프로젝트 소스의 BuildSpec 속성을 참조하십시오.

     

    2.1 buildspec.yml

    version: 0.2
    
    env:
      variables:
        IMAGE_TAG: 1
    
    phases:
      pre_build:
        commands:
          - echo $AWS_DEFAULT_REGION
          - echo $AWS_ACCOUNT_ID
          - echo $IMAGE_REPO_NAME
      build:
        commands:
          - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
          - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
          - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
          - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG

     

    2.2 Dockerfile

    FROM nginx:latest
    
    COPY app/ /usr/share/nginx/html/
    
    EXPOSE 80

    디렉토리에는 확인을 위한 텍스트파일 하나 더 생성해줌

     

    3. commit 후 CI 동작 확인

    codebuild project 로 돌아가서 start build

    해당 build status 아래에서 자세한 로그 확인 가능

     

    repository 확인

     

     

     

    참고

    https://dev.classmethod.jp/articles/deploying-docker-images-to-ecr-using-aws-code-pipeline/

     

    AWS CodePipeline을 사용하여 ECR에 Docker 이미지를 배포해 보기 | DevelopersIO

    AWS CodePipeline을 사용하여 ECR에 Docker 이미지를 배포해 보는 과정을 정리해 봤습니다.

    dev.classmethod.jp

    https://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-name-storage

     

    CodeBuild의 빌드 사양 참조 - AWS CodeBuild

    buildspec 선언은 올바른 YAML이어야 하므로 buildspec 선언의 공백 설정이 중요합니다. buildspec 선언의 공백 수가 잘못되면 빌드가 즉시 실패할 수 있습니다. YAML 유효성 검사기를 사용하여 buildspec 선

    docs.aws.amazon.com

    https://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/build-env-ref-env-vars.html

     

    빌드 환경의 환경 변수 - AWS CodeBuild

    웹후크 풀 리퀘스트 이벤트에 의해 트리거되는GitHub 또는GitHub 엔터프라이즈 서버 빌드의 경우, 이는pr/pull-request-number

    docs.aws.amazon.com

    https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/repository-policy-examples.html

     

    프라이빗 리포지토리 정책 예제 - Amazon ECR

    권한을 부여하려는 계정에는 리포지토리 정책을 만드는 리전이 활성화되어 있어야 합니다. 그렇지 않으면 오류가 발생합니다.

    docs.aws.amazon.com

     

    'AWS > CI CD' 카테고리의 다른 글

    AWS CodeBuild - DOWNLOAD_SOURCE 단계 dial tcp i/o timeout Error  (0) 2024.07.13
    Codebuild + awscli : lambda image update  (0) 2023.08.16
    AWS CodeBuild - push to Github  (0) 2023.08.10
    AWS CodeCommit demo  (0) 2023.08.09