FROM eclipse-temurin:17-jdk-alpine COPY ./build/libs/*SNAPSHOT.jar project.jar ENTRYPOINT ["java", "-jar", "project.jar"]
# Ubuntu일 경우 $ sudo apt update $ sudo apt install amazon-ecr-credential-helper
~ 경로에서 .docker라는 폴더 만들고, config.json 파일 만들어서 위와 같이 작성해라.{ "credsStore": "ecr-login" }

AmazonEC2ContainerRegistryFullAccess 정책 추가하기name: Deploy To EC2 on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Github Repository 파일 불러오기 uses: actions/checkout@v4 - name: JDK 17버전 설치 uses: actions/setup-java@v4 with: distribution: temurin java-version: 17 - name: application.yml 파일 만들기 run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml - name: 테스트 및 빌드하기 run: ./gradlew clean build - name: AWS Resource에 접근할 수 있게 AWS credentials 설정 uses: aws-actions/configure-aws-credentials@v4 with: aws-region: ap-northeast-2 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: ECR에 로그인하기 id: login-ecr uses: aws-actions/amazon-ecr-login@v2 - name: Docker 이미지 생성 run: docker build -t instagram-server . - name: Docker 이미지에 Tag 붙이기 run: docker tag instagram-server ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest - name: ECR에 Docker 이미지 Push하기 run: docker push ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest - name: SSH로 EC2에 접속하기 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} script_stop: true script: | docker stop instagram-server || true docker rm instagram-server || true docker pull ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest docker run -d --name instagram-server -p 8080:8080 ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest
sudo를 붙이면 no basic auth credentials 에러가 발생하면서 CI/CD가 실패한다. 따라서 sudo를 작성하지 않도록 주의하자. ... - name: SSH로 EC2에 접속하기 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} script_stop: true script: | sudo docker stop instagram-server || true sudo docker rm instagram-server || true sudo docker pull ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest sudo docker run -d --name instagram-server -p 8080:8080 ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest
