

깃 액션에서 환경변수의 역할은 해당 워크플로우가 문제없이 진행되도록 필요한 환경을 만들어주며 보안성도 제공할 수 있습니다.

깃엑션이 trigger에의해 시작 되었을때
애플리케이션에서 어떤 작업(jobs)을 할것인지 정의하는 역할을 합니다.

체크아웃의 역할은 워크플로우가 실행되었을대 레파지토리에서 해당 코드를 불러오는 역할을 합니다.
코드를 불러오는이유는 해당 코드를 패키징하여 서비스를 받는 사용자들에게 배포하기 위해서입니다.

아마존 웹서비스에서 제공하는 관계형 데이터베이스 서비스로
RDS자체가 데이터베이스라는 것이 아니라

아마존에서 지원하는 다양한 데이터베이스 엔진을 쉽게 운영할 수 있도록 자동화된 환경을 제공해 줍니다.

자동화라는 특성을 깃 엑션과 접목시켜 손쉬운배포 , 보안성강화에서 이점을 얻을 수 있습니다.



.yml 파일에서 트리거를 작성해줍니다.
로컬pc 에서 브랜치로 push가 일어났을경우가 작업이 실행되도록 하였습니다.

우선 jobs 의 이름을 cicd-deploy라고 지어줬습니다.
작업이 이루어질 ec2환경이 ubuntu기때문에 os를 ubuntu로 지정했습니다.

1. 체크아웃
2. jdk 설치
3. build
4. 이름길이 수정
5. ec2 로 업로드
6. ec2 서버 가동

# build 준비 # chmod +x ./gradlew : 퍼미션 오류 발생시 처리 # ./gradlew clean build - name: 단위 테스트 및 빌드 # 명령어가 여러개면 | 추가 . run: ./gradlew clean build



# 이름이 너무 길어 적당하게 수정 -> 리눅스 명령어 # 파일 위치를 변경하면서 이름도 변경 -> mv - name: 관리상 빌드된 결과물의 이름을 변경 처리 run: | mv ./build/libs/*SNAPSHOT.jar ./run.jar ls

페키지의 단위테스트 파일
>> package com.example.demodeploy;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DemoDeployApplicationTests {
@Test
void contextLoads() {
// 단위 테스트
// MVC 테스트 -> 목업통해서 가상 처리 가능
// RestAPI 테스트 가능
// 메시지가 보이지는 않지만, 차후 코드로 확인
System.out.println("단위 테스트 호출!! echo");
}
}
spring boot의 단위테스트 파일입니다.
git action에서 제대로 수행됬는지 확인하기위해 System.out.println을 추가했습니다.

그러나 git action에서는 메시지가 출력되지 않는 것을 확인했습니다.

EC2인스턴스와 연동하기위하여 환경변수를 추가하였습니다.
# EC2 로 업로드 # 호스트정보(IP), 접속자명(ubuntu), 키파일(pem) -> 시크릿!! # SSH를 통해서 파일등을 복사(업로드) # 업로드 대상(run.jar) # 타겟(EC2)의 특정 경로(복사될 위치), /home/ubuntu/server/demo - name: EC2에 jar파일 업로드 uses: appleboy/scp-action@v0.1.7 # 위의 액션을 위한 파라미터 # SSH의 포트를 보안상 이유로 22-> 다른번호로 변경 했다면 # PORT 설정 필요 # 파일이 여러개면 "파일, 파일, ... " # 원격 서버에 폴더도 자동 생성되는지 검토 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USER }} key: ${{ secrets.EC2_KEY }} source: run.jar target: /home/ubuntu/server/demo



# ec2 접속,서버가동!! # https://github.com/appleboy/ssh-action - name: SSH로 ec2에 접속후 서버가동 uses: appleboy/ssh-action@v1.2.0 # script_stop : true -> 오류나면 중단 # 처리할 반복적 작업 # 1. 기존 jar 파일 삭제 처리 (업로드 위치, 구동 위치 구분) # 구동 위치 : /home/ubuntu/server/demo/web <- 설정(가정) # rm -rm 대상 => 대상의 폴더 및 하위 파일까지 모두다 삭제 # 2. 새롭게 폴더 생성 /home/ubuntu/server/demo/web # mkdir /home/ubuntu/server/demo/web # 3. jar 파일 이동(~/demo/*.jar => ~/web/*.jar) # mv # 4. jar 파일이 존재하는 위치로 이동 # cd /home/ubuntu/server/web # 5. 서버 중단 -> 8080포트를 사용하는 프로세스 중단 # sudo fuser -k -n tcp 8080 || true # 무조건 다음 단계로 넘어가 처리 (|| true) # 6. 서버구동 # 엑세스, 에러로그등 전체 로그를 output.log으로 출력 # nohup java -jar run.jar > ./output.log 2>&1 & # 7. 뒷정리 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USER }} key: ${{ secrets.EC2_KEY }} script_stop: true script: | rm -rf /home/ubuntu/server/web mkdir /home/ubuntu/server/web mv /home/ubuntu/server/demo/run.jar /home/ubuntu/server/web/run.jar cd /home/ubuntu/server/web sudo fuser -k -n tcp 8080 nohup java -jar run.jar > ./output.log 2>&1 & rm -rf /home/ubuntu/server/demo


















