문제 상황
CI / CD 워크플로우에서 직접적으로 EC2 IAM을 활용하여 접속하려고 했는데 CD 과정이 진행되지 않는 상황이 발생했다.
workflow.yml 코드는 다음과 같다.
- name: Deploy to EC2
uses: appleboy/ssh-action@master
with:
key: ${{ secrets.EC2_PRIVATE_KEY }} # pem key
host: ${{ secrets.EC2_HOST }} # ec2 ip
username: ${{ secrets.EC2_USER }} # ec2에서 whoami 명령어로 확인
script: |
sudo docker stop $(sudo docker ps -q)
sudo docker pull ${{ secrets.DOCKER_USER }}/alpha_dlink/alpha_dlink
sudo docker system prune -f
sudo docker run -d --rm -p 8080:8080 ${{ secrets.DOCKER_USER }}/alpha_dlink/alpha_dlink
분명히 IAM PRIVATE_KEY를 활용하여 접속해보려고 했지만 EC2 IAM 권한 이슈로 인해 퍼블릭으로 접근이 안되는 문제가 생긴 것 같다...
그래서 찾아보던 중 발견한 것이 바로 GitHub Self-hosted Runner이다.
Self-hosted Runner 사용
Self-hosted Runner란 Github Actions에서 사용자가 지정하는 로컬 컴퓨팅 자원으로 빌드를 수행하도록 설정하는 기능이다.
주로 배포작업이 많아 배포가 지체되거나 서버 비용이 부담되는 경우 유용함.
EC2는 생성했다고 가정하고 넘어가겠다!
1. Github Actions을 사용하고자 하는 저장소에서 Settings - Actions - Runners로 이동
2. 아래 명령어들을 복사하여 EC2에 입력한다.
참고로, ./run.sh 를 하게 된다면 백그라운드에서 실행이 불가능하니 nohup ./run.sh & 로 교체하기!
shasum: command not found 오류가 뜰 경우, ec2 터미널에 하단의 명령어를 이용해 라이브러리를 설치해주세요.
sudo yum install perl-Digest-SHA -y
workflow 수정
self-hosted runner를 사용하여 deploy 워크 플로우를 수정하면 된다.
run-docker-image-on-ec2:
needs: build-docker-image
if: github.event_name == 'push'
runs-on: self-hosted
steps:
- name: docker pull
run: sudo docker pull ${{ secrets.DOCKER_USER }}/alpha_dlink
- name: docker stop container
run: sudo docker stop alpha_dlink || true
- name: docker run new container
run: sudo docker run --name alpha_dlink --rm -d -p 8080:8080 ${{ secrets.DOCKER_USERNAME }}/alpha_dlink
- name: delete old docker image
run: sudo docker image prune -f
참고
https://danawalab.github.io/common/2022/08/24/Self-Hosted-Runner.html
Github Actions에 Self-hosted Runner 등록하기
Github Actions에 Self-hosted Runner를 등록하는 방법에 대해 알아보겠습니다
danawalab.github.io
'Back-end > Spring' 카테고리의 다른 글
[Spring] Spring Data JPA에서 새로운 Entity인지 판단하는 방법? (1) | 2024.12.08 |
---|---|
[Spring] AWS SageMaker 엔드포인트 연결 시도하기 (0) | 2024.11.23 |
[Spring] @RequestPart vs @RequestParam vs @RequestBody (1) | 2024.10.11 |
[Spring] Spring Boot에서 Google Meet API 적용해보기 (10) | 2024.10.06 |
[Spring] JWT + Redis를 활용한 로그아웃 구현 (Jwt BlackList) (3) | 2024.10.06 |