Skip to content

Update README.md

Update README.md #11

Workflow file for this run

name: Docker Image CICD
# main 브랜치에 push, PR 이벤트 발생시 동작.
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
env:
AWS_REGION: ap-northeast-2
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
# (0) JDK 17 세팅
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'corretto'
java-version: '17'
# (1) application.properties, application-dev.properties 파일 생성
- uses: actions/checkout@v3
- run: mkdir ./src/main/resources
- run: touch ./src/main/resources/application.properties
- run: touch ./src/main/resources/application-dev.properties
- run: echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.properties
- run: echo "${{ secrets.APPLICTION_DEV}}" > ./src/main/resources/application-dev.properties
- run: cat ./src/main/resources/application.properties
- run: cat ./src/main/resources/application-dev.properties
# (2) Grant execute permission for gradlew
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
# (3) gradle 캐싱
- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# (4) Spring Boot 어플리케이션 Build
- name: Build with Gradle
run: ./gradlew build -x test
# (5) Docker 이미지 Build
- name: docker image build
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/pure-basket .
# (6) DockerHub Login
- name: docker login
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# (7) Docker Hub push
- name: docker Hub push
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/pure-basket
# (8) GET GitHub IP
- name: get GitHub IP
id: ip
uses: haythem/[email protected]
# (9) Configure AWS Credentials - AWS 접근 권한 취득(IAM)
- name: Configure AWS 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 }}
# (10) Add GitHub ip to AWS
- name: Add GitHub IP to AWS
run: |
aws ec2 authorize-security-group-ingress --group-id ${{ secrets.AWS_SG_ID }} --protocol tcp --port ${{ secrets.EC2_SSH_PORT }} --cidr ${{ steps.ip.outputs.ipv4 }}/32
# (11) AWS EC2 Server Connect & Docker 명령어 실행
- name: AWS EC2 Connection
uses: appleboy/[email protected]
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.EC2_SSH_PORT }}
timeout: 60s
script: |
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/pure-basket
# sudo docker stop pure-basket-container
# sudo docker rm pure-basket-container
sudo docker-compose -f down
sudo docker-compose up -d
# sudo docker run --name pure-basket-container -it -d -p 8080:8080 ${{ secrets.DOCKERHUB_USERNAME }}/pure-basket
sudo docker system prune -f
# (12) REMOVE Github IP FROM security group
- name: Remove IP FROM security group
run: |
aws ec2 revoke-security-group-ingress --group-id ${{ secrets.AWS_SG_ID }} --protocol tcp --port ${{ secrets.EC2_SSH_PORT }} --cidr ${{ steps.ip.outputs.ipv4 }}/32
# time
- name: Get Current Time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYY-MM-DDTHH:mm:ss
utcOffset: "+09:00" # 기준이 UTC이기 때문에 한국시간인 KST를 맞추기 위해 +9시간 추가
- name: Print Current Time
run: echo "Current Time=${{steps.current-time.outputs.formattedTime}}" # current-time 에서 지정한 포맷대로 현재 시간 출력
shell: bash
# slack
# - name: Slack Alarm
# uses: 8398a7/action-slack@v3
# with:
# status: ${{ job.status }}
# author_name: GitHub-Actions CI/CD # default: 8398a7@action-slack
# fields: repo,message,commit,author,action,eventName,workflow,ref,job,took
# env:
# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required
# if: always() # Pick up events even if the job fails or is canceled.