공부

Github와 AWS를 연동한 CI/CD 구현

KimMZ 2025. 2. 11. 19:22
사용한 기술
1. github repository
2. Github Actions
3. AWS EC2

 

  • AWS - EC2 인스턴스 생성
    • 새 페어 생성
    • 네트워크 설정 : 인터넷에서 HTTPS 트래픽 허용 체크
    • EC2 접속
      • 인스턴트 보안그룹에서 인바운드 규칙 편집에서, 8080포트 추가 생성 
      • 터미널
cd c:/MyStudy/sparta
chmod 400 test-server.pem
ssh -i test-server.pem ec2-user@{퍼블릭IPv4 DNS}

sudo yum install -y java-17-amazon-corretto-devel :자바 설치
sudo yum install docker
sudo systemctl start docker
sudo systemctl status docker
# Docker 서비스를 운영체제 부팅시 자동 시작하도록 설정
sudo systemctl enable docker
# docker 명령어를 sudo없이 사용하기 위해 ec2-user계정을 docker 그룹에 추가
sudo usermod -aG docker ec2-user

# docker-compose 설치
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# 권한 문제로 다시 접속
sudo chmod +x /user/local/bin/docker-compose
exit

docker version
docker-compose version

 

  • intelliJ에서 아래 프로젝트 열어서 build 및 test 확인

cicd-aws.zip
0.05MB

  • github repsoitory 설정
    • 레파지토리 settings - Actions Secret - key 등록 : SSH_HOST(퍼블릭 IPv4 주소), SSH_KEY(발급받은 key.pem)
    • github actions workflows 설정 : .github / workflows / deploy.yml 파일 생성
name: Deploy

on:
  workflow_dispatch:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        
      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'adopt'
          
      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew
        
      - name: gradlew bootJar
        run: ./gradlew bootJar
        
      - name: copy jar to server
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ec2-user
          key: ${{ secrets.SSH_KEY }}
          port: 22
          source: "./build/libs/*.jar"
          target: "~"
          strip_components: 2

      - name: SSH Commands
        uses: appleboy/ssh-action@v0.1.6
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ec2-user
          key: ${{ secrets.SSH_KEY }}
          port: 22
          script_stop: true
          script: |
            sudo yum update -y && sudo yum install -y java-21-amazon-corretto
            for pid in $(pgrep java); do
              if ps -p $pid -o args= | grep -q 'java -jar'; then
                echo "Java process with 'java -jar' found (PID: $pid). Terminating..."
                kill -9 $pid
              fi
            done
            echo "nohup java -jar ~/*.jar > ~/app.log 2>&1 &" | at now
  • actions에서 build 확인
  • http://{퍼블릭 IPv4 주소}:8080/ 연결 성공 확인