infra
github actions, ecs, ecr을 이용한 CI/CD - 1
jinheung90
2023. 2. 25. 19:34
github actions는 따로 어려운 점이 없어서 스크립트만 올리고 넘어갑니다
전 다른 CI 툴보다 github actions를 더 좋아하는데 이유는 github에서 관리할 수 있는 점, 다른 설치가 필요 없다는 점 때문에 좋아합니다.
- github actions script
name: eureka
on:
workflow_dispatch:
inputs:
tags:
description:
required: false
env:
ECR_REPOSITORY: spring_boot_ecr
ECS_SERVICE: test-dev-service
ECS_CLUSTER: test-dev-ecs-cluster
MODULE_ROOT_PATH: ./jinheung_eureka # 해당 모듈의 루트
MODULE_JAR: ./jinheung_eureka/build/libs/jinheung_eureka-1.0.jar # 해당 모듈의 jar
MODULE_DEPLOY_PATH: ./jinheung_eureka/deploy # 해당 모듈의 deploy 디렉토리
ECS_TASK_DEFINITION: task_definition.json
CONTAINER_NAME: test-dev-container
AWS_REGION: ap-northeast-2 # aws 리전
ECR_IMAGE_TAG: latest
# ECR_ACCOUNT_ID:
jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: step start
run: "echo tags: $ECR_IMAGE_TAG"
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Grant execute permission for root gradlew
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew clean build
- name: create main boot jar
run: ./gradlew bootJar -p $MODULE_ROOT_PATH
- name: Copy Jar
run: cp $MODULE_JAR deploy.jar
- name: Copy agent json
run: cp $MODULE_DEPLOY_PATH/cloud_watch_log_config.json agent_config.json
- name: Copy docker file
run: cp $MODULE_DEPLOY_PATH/Dockerfile Dockerfile
- name: AWS configure credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{env.AWS_REGION}}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@aaf69d68aa3fb14c1d5a6be9ac61fe15b48453a2
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: $ECR_IMAGE_TAG
run: |
# Build a docker container and
# push it to ECR so that it can
# be deployed to ECS.
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$ECR_IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$ECR_IMAGE_TAG
echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$ECR_IMAGE_TAG" >> $GITHUB_OUTPUT
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@97587c9d45a4930bf0e3da8dd2feb2a463cf4a3a
with:
task-definition: ./jinheung_eureka/deploy/task_definition.json
container-name: ${{ env.CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1.4.10 # issue https://github.com/aws-actions/amazon-ecs-deploy-task-definition/issues/384
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: ${{ env.ECS_SERVICE }}
cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true