AWS CI/CD(1)에 이어서 진행되는 내용입니다.

4. CodeBuild

CodeBuild를 선택하고 프로젝트를 생성한다. 소스를 CodeCommit을 선택하고 자신이 만든 레포지토리를 연결해준후 브랜치를 선택한다.
환경에서 운영체제를 선택한 후에 운영체제의 버전을 선택한다.

이후 IAM Role을 선택해야 하는데 만약 없다고 하면 새 서비스 역활을 선택하여 역활을 생성해주면 된다.

VPC와 서브넷은 따로 설정하지 않아도 된다. 후에 Buildspec을 설정해주어야 하는데 이 Buildspec은 모두 설정한 후에 따로 넣어주려고 한다.

이제 빌드 생성하기를 누르면 빌드가 생성된다. 빌드 프로젝트 -> 방금 만든 프로젝트 -> 편집 -> Buildspec으로 이동한다.

이제 Buildspec을 넣어주면 되는데 이 내용은 파일로 만들어서 하여도 상관없지만 직접 입력으로 진행하겠다.

version: 0.2

phases:
  pre_build:
    commands:
      - echo Build Dev prepare on `date`
  build:
    commands:
      - echo Build Dev started on `date`
  post_build:
    commands:
      - echo Build Dev completed on `date`
      - mkdir zip
      - mv ./dist ./zip/dist
      - cp appspec.yml ./zip/
      - cd zip
      - zip -r myapp.zip ./*
      - buildDateTime=$(date +%Y%m%d_%H%M%S)
      - aws s3 cp myapp.zip "s3://testjoshuabu/test/"
      - echo "path=s3://testjoshuabu/test/myapp.zip"

artifacts:
  files:
    - dist
    - appspec.yml

YAML파일 형식으로 작성하면 되며 간단하게 설명한다면 모든 파일을 zip폴더로 이동한 후 zip으로 묶어서 버킷에 업로드한다는 내용이다. 자세한 사항은 여기를 참고하자.
또한 appspec.yml파일은 CodeDeploy에서 사용되며 이 파일은 미리 만들어 놓았다. 이 코드는 다음과 같다.

version: 0.0
os: linux
files:
  - source: dist
    destination: /var/www/html

따로 무언가를 할 필요가 있지 않아서 파일 위치만 지정하였다. 이 내용도 자세한 사항은 Docs를 확인하자.

이제 빌드를 진행하여 보자! 빌드 시작을 누르면 빌드가 진행된다.

5. CodeDeploy

이제 CodeDeploy를 생성한다. 컴퓨팅 플랫폼은 EC2로 지정한다.

IAM을 생성한다. IAM은 EC2로 진행하면된다.

Role은 AWSCodeDeployRole과 아래의 Json을 넣어주면된다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EC2InstanceManagement",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags",
                "ec2:RunInstances"
            ],
            "Resource": "*"
        },
        {
            "Sid": "EC2InstanceProfileManagement",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "iam:PassedToService": "ec2.amazonaws.com*"
                }
            }
        }
    ]
}

배포 그룹생성을 누르고 배포 그룹을 입력한 뒤 서비스 역활에 방금 만든 따끈따끈한 IAM Role을 넣어준다. 배포방법은 블루/그린으로 할것이며 자세한 사항은 docs를 확인하자

나머지 조건들도 입력해준다. ALB와 AutoScailing은 만든 것을 넣어주면 된다.

이제 배포를 생성하면 됩니다. 배포생성을 클릭하고 zip위치를 개정위치에 넣어주면된다.

추가 배포 동작 설정에서 콘텐츠 덮어쓰기를 하여서 나중에 다시 배포를 눌렀을때 덮어써질수 있도록 하자.

배포 만들기를 누르면 자동적으로 배포가 실행된다.! 이제 기다리자... 조금 오래 걸린다...
혹시 모를 에러를 위해 에러를 확인하는 방법을 말하자면 배포 수명주기 이벤트에 보면 view events라는 것이 있다. 클릭하여 들어가면 거기에 어디서 실패하였는지, 어떤 에러가 발생하였는지 나와있다. 확인하며 docs와 google, 또는 서포터를 통하여 문제를 해결하면 된다. 크게 건든게 없어서 문제가 발생할지 모르겠지만...

6. CodePipeline

이제 마지막으로 codepipeline만 하면 모든 CI/CD는 종료된다. codepipeline으로 이동한 후 이름을 입력하고 사용자 지정위치로 버킷설정한다.
소스 공급자는 이전에 완료했던 codecommit이며 나머지 내용도 이전과 동일하게 선택한 뒤 넘어간다.
빌드는 codebuild이며 프로젝트 이름도 이전에 설정해두었다.

배포공급자도 마찬가지로 진행하면 된다.

확인하고 파이프라인 생성을 누르면 바로 한번 진행이 시작되고 커밋이 들어올 때마다 파이프라인이 동작하게 된다. 바로 되는것이 싫다고 한다면 후에 code commit에 브런치를 추가하여 특정 브런치가 커밋한 순간 파이프라인이 진행하도록 하거나 먼저 test deploy로 진행하도록 설정한 후 test deploy에서 문제가 없다고 한다면 실 서버에 적용하는 방식으로 진행하면 상당한 부분이 해결될 것으로 생각된다.

대충 완료했다는 내용

사용한 뒤 삭제를 생활화 합시다.

profile
devops engineer가 되기 위해

0개의 댓글