Code States/TIL

[0427] Section 2. 프로젝트 - AWS 배포 Day 1 - 마일스톤 3(이미지 repository push 자동화)

ki1111m2 2023. 4. 27. 22:47

연습과제: 도커 이미지 빌드 자동화

 

Goal

  • GitHub Action을 이용해 도커 이미지 빌드를 자동화합니다.

GitHub Action workflow 생성 후 yml 파일 작성

릴리즈 후 작동 확인


실전과제: 레지스트리 push 자동화

 

Bare minimum requirement

  • GitHub Action을 이용해 AWS 로그인 후, 이미지 빌드 및 push를 자동화해야 합니다.
  • 코드에 민감한 정보를 담지 않고, AWS 로그인을 위한 액세스 키와 시크릿 키를 별도로 관리해야 합니다.

릴리즈 후 작동 확인


트러블슈팅

오류 1: requested access to the resource is denied

 

구글링 결과 이미지 태그의 문제라는 의견이 절대적이었다

태그를 아무리 수정하고.. 이미지를 지우고 다시 만들고.. 경로를 다시 설정해주고..

뭘 해도 되지 않았다

로그를 다시 확인해본 결과, yml 파일을 처음에 생성한 후 계속해서 수정을 했는데

처음에 만든 yml 파일의 내용을 바라보고 있었다

yml 파일을 몇번을 고치고 그 외 레포지토리 안의 파일을 수정하고 삭제하고 생성하고 뭔 짓을 해도 처음에 있던 파일 내용을 바라보고 있었다

githun action 내부 자체 캐시의 문제인가 싶어서 캐시를 지우는 온갖 명령어를 다 실행하고 넣어도 반영이 안됐다

3시간 가량 이 문제만 붙잡고 있다가 결국 엔지니어님께 물어봤고, 엔지니어님도 다 잘 돼있는데 뭐가 문제인지 모르겠다며 외국 커뮤니티에 물어보셨다

외국인의 답변은 "그거 종종 그래 그냥 삭제하고 다시해"

 

레포지토리 삭제 후 재생성, 같은 내용으로 yml 파일 생성 후 실행하니 정상작동한다..

트러블슈팅

오류 2: 변수 인식 못함

 

레퍼런스에 있던 내용을 그대로 복사했더니 변수를 읽지 못하는 상황이 발생했다

변수들을 모두 ${{ env.변수명 }} 처럼 중괄호로 묶어주고 앞에 .env까지 붙여준다

다른 레퍼런스들에도 같은 블럭 내에 변수를 지정했을때는 중괄호를 안묶던데 안해주면 인식을 못했다

트러블슈팅

오류 3: no such file or directory

 

처음엔 빌드를 안해도 된다고 생각했다 위쪽에 도커허브에 이미지를 올릴 때 이미 빌드를 하기 때문이다

그래서 빌드를 빼고 태그, 푸쉬만 코드에 넣었다

그러나 여전히 오류 발생

이번엔 이미지를 못찾는다는 에러였다

다시 생각을 해보니 이 부분은 AWS의 ECR에서 빌드 후 올리는 거니까 빌드가 필요할거라는 판단을 하여 다시 빌드를 넣었다

기존 레퍼런스에 있던 build 코드가 아닌 ECR에서 제공하는 빌드 내용으로 작성했다

그러나 여전히 오류 발생

도커파일을 찾지 못한다는 에러였다

자세히 봐보니 도커파일이 있는 경로가 아닌 루트 파일에서 도커파일을 찾고있었다

도커파일이 있는 폴더로 경로를 지정해야겠다는 판단을 했다

도커 허브에 올릴때 사용했던 context 구문을 사용하면 되겠다는 생각을 했다

그러나 오류가 발생했다

with 블럭 안에 context를 넣었었는데 그냥 넣어서 그랬다고 생각했다

with 블럭을 추가했으나 또 오류가 발생했다

with 블럭은 혼자 사용되지 못하나? 라는 생각에 위치를 옮겼다

그러나 여전히 오류가 발생했다

uses 블럭과만 사용이 가능한건가 라는 생각에 구글링을 해보았지만 명쾌한 답안이 안나왔다

 

그러던 중 팀원분이 새로운 옵션을 찾으셨다

 

docker build -t ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }} -f ./helloworld-was/Dockerfile .

 

-f 옵션을 사용하여 파일 경로를 지정할 수 있다고 한다

해당 방법으로 해결 완료!