프로젝트 상단에 .github 폴더를 만들고 PULL_REQUEST_TEMPLATE.md 파일의 이름으로 만든다.
Edit new file을 누르고 템플릿으로 사용할 틀을 만들어 준다.
## 요약
<br><br>
## 작업 내용
<br><br>
## 참고 사항
<br><br>
## 관련 이슈
- Close #이슈번호
<br><br>
Issue template 만들기
ISSUE_TEMPLATE 폴더를 만든다. github에서 폴더 만드는 법은 file 이름 넣는 칸에 폴더 이름을 넣고 / 를 입력하면 폴더가 생긴다. 그 전으로 돌아가려면 .. 을 입력하면 된다.
위의 화면은 Issue template 작성하는 코드이다.
---
name: Bug template
about: 버그 발생 시 사용하는 템플릿입니다
title: "버그 리포트"
labels: "\\U0001F41B BUG"
assignees:
---
# 버그 리포트
## 어떤 버그인가요?
> 버그에 대해 알려주세요
<br><br>
## 어떤 상황에서 겪으셨나요?
> 버그를 겪으신 상황을 알려주세요
<br><br>
## 참고할만한 자료가 있을까요?
> 참고자료가 있다면 첨부해주세요
<br><br>
Pull Request 템플릿 작성되는지 테스트
PR 작성하는 식으로 Compare & request버튼을 누른다.
Pull Request 템플릿으로 작성했던 코드가 잘 불러와지는 것을 확인할 수 있다.
ISSUE 템플릿 확인
New Issue를 누른다.
Pull Request와는 다르게 템플릿 선택하는 화면이 나온다. Get started를 누르면 템플릿이 잘 불러와진다.
Docker 이미지를 만들기 위해 프로젝트 루트에 Dockerfile을 아래와 같이 생성합니다.
FROM openjdk:11
ARG JAR_FILE=*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
# FROM : Docker Base Image (기반이 되는 이미지, <이미지 이름>:<태그> 형식으로 설정, java8로 코드를 작성했다면 11대신 8로 넣어줘야 합니다.)
# ARG : 컨테이너 내에서 사용할 수 있는 변수를 지정할 수 있다.
# COPY : 위에 선언했던 JAR_FILE 변수를 컨테이너의 app.jar로 복사한다.
# ENTRYPOINT : 컨테이너가 시작되었을 때 스크립트 실행
cd 명령어를 통해 jar 파일이 있는 곳으로 터미널 위치를 옮긴다. (cd build/libs)
상위 메뉴의 Settings에 들어가 왼쪽 하단 메뉴의 Secrets의 Actions에 들어간다.
왼쪽 상단에 있는 New repository secret을 누른다.
이름을 지정하고 복사했던 토큰을 붙여넣어준다.
dockerHub USERNAME과 PASSWORD를 작성한다.
아래와 같이 workflow 파일을 작성합니다.
이것은 Github Container Registry를 이용해서 docker를 빌드하고 서버에 푸시해주는 역할을 합니다.(.github/workflows/main.yml)
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
name: Java CI with Gradle
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
- name: Build with Gradle
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # 수정해야함
with:
arguments: build
- name: Docker build
run: |
docker login -u ${{ secrets.USERNAME }} -p ${{ secrets.PASSWORD }}
docker build -t spring-cicd .
docker tag spring-cicd lusida0131/spring-cicd:latest
docker push lusida0131/spring-cicd:latest
deploy:
needs: build # build 후에 실행되도록 정의
name: Deploy
runs-on: [ self-hosted, label-go ] # AWS ./configure에서 사용할 label명
steps:
# 3000 -> 80 포트로 수행하도록 지정
- name: Docker run
run: |
docker login -u ${{ secrets.USERNAME }} -p ${{ secrets.PASSWORD }}
docker stop spring-cicd && docker rm spring-cicd && docker rmi lusida0131/spring-cicd:latest
docker run -d -p 8080:8080 --name spring-cicd --restart always lusida0131/spring-cicd:latest
workflow파일 설명
on:
push:
branches: [ main ]
여러 브랜치에서 개발 후 main 브랜치에 push or 병합될 때만 실행되도록 설정한다.
jobs:
build:
runs-on: ubuntu-latest
steps:
Workflow는 다양한 job으로 구성되고 위 yml은 build와 deploy라는 job을 생성한다.
runs-on은 어떤 OS에서 실행될지를 지정한다.
- uses: actions/checkout@v3
build의 step 첫 번째는 현재 상태의 소스코드를 가상의 컨테이너 안으로 checkout 해주는 역할
- name: Set up docker buildx
id: buildx
uses: docker/setup-buildx-action@v1
build의 step 두 번째는 가상의 컨테이너 안에 docker가 돌아갈 수 있는 환경을 설치하는 역할
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
sudo service docker start # Docker 서비스를 시작합니다.
ps -ef|grep docker # 프로세스 확인 명령어
sudo usermod -a -G docker ubuntu # sudo를 사용하지 않고도 Docker 명령을 실행할 수 있도록 docker 그룹에 ec2-user를 추가합니다.
sudo usermod -aG docker $USER
docker ps 명령어를 실행했을때 아래와 같은 오류가 발생하면 docker.sock 권한을 바꾸어준다.
docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
sudo chmod 666 /var/run/docker.sock # sudo를 사용하지 않고도 명령을 실행하게 docer.sock 권한을 바꾸어준다.
AWS에 Github Runner 설치
해당 Repository에 Settings에 들어가서 왼쪽 메뉴 Actions의 Runners를 클릭한다.
Download에 있는 내용, Configure을 EC2서버에 복사해서 한 줄씩 실행시킨다.
하단의 Configure도 위와 동일하게 실행
Enter the name of the runner group to add this runner to : 엔터
Enter the name of runner : 엔터
Configure 진행할 때 Enter any additional labels가 나오면 아래에 있는 label-go를 등록한다.
Enter name of work folder : 엔터
deploy:
needs: build # build 후에 실행되도록 정의
name: Deploy
runs-on: [ self-hosted, label-go ] # AWS ./configure에서 사용할 label명
Configure에 ./run.sh는 nohup으로 실행
nohup ./run.sh &
Runner 세팅이 끝나면 github의 Settings - Actions - Runner 메뉴에서 등록된 것을 확인할 수 있습니다.