1️⃣ CI
⛳ Github Actions이란?
Github Action은 Github 저장소를 기반으로 소프트웨어 개발 Workflow를 자동화 할 수 있는 도구이다. 간단하게 말하자면 Github에서 직접 제공하는 CI/CD 도구라고 할 수 있다.
Github Actions은 Github저장소에서 등록할 수도 있고 .github/workflows 폴더 내에 .yml 파일을 추가하여 등록할 수도 있다.
🚨 주의점
깃허브 액션은 기존 올라간 액션이 아니라, PR보낸 사람의 레포에 .github/workflows가 있다면 해당 PR보낸 사람의 액션이 실행되므로, 꼭 주의해주세요.
Github의 Actions탭에서 확인 할 수 있다. 현 레포지토리에 추가한 Workflows들도 확인이 가능하다.
⛳ Github Actions을 통한 CI 구현
- github repository에서 Actions 탭을 선택
- New workflow 로 새로운 정책수립
프로젝트 빌드를 자신의 프로젝트에 맞는 Maven, Gradle 빌드를 선택하여 Set up this workflow
해당 브랜치에 pull request 요청 발생 시 work flow(CI)가 자동으로 실행된다.
즉 이제 깃헙에 PR이나 커밋만 해도 자동적으로 CI를 해주기 때문에, 내 PC에서는 되는데 남의 PC에서 안되는 경우를 방지 할 수있게 됐다.
- 추가적으로 프로젝트 설정에 맞게 java-version 설정을 잊지말고 해주세요.
2️⃣ 사전세팅
⛳ 프로젝트에 deploy 디렉토리와 dockerfile 추가하기
FROM openjdk:17-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} alchomist.jar
ENTRYPOINT ["java","-jar","/alchomist.jar"]
# alchomist를 원하는 빌드배포이름으로 지정하시면 됩니다.
⛳ AWS EC2 설정하기
- SSH(22)로만 접속이 가능하므로,
빌드배포 서버로 운영하기 위해서 TCP(8080)를 인바운드 허용을 위해 보안 그룹(인바운드 규칙) 편집을 통해 추가
- 규칙 추가 - 사용자 지정 TCP - 8080
⛳ EC2(리눅스)에서 도커를 설치하기
$ sudo apt-get update
설치 패키지 관리 업데이트
$ sudo apt install docker.io -y
도커 설치
$ sudo docker -v
도커 설치됐는지 버전 확인
⛳ token(토큰) 생성하기
토큰은 발급 시에만 확인이 가능하니, 꼭 적어두세요. 또한 보안에 신경써주세요.
github action - workflow 가 ${{ secrets.변수명 }} 등으로 알 수 있게,
팀 레포 - Settings - Secrets에 New repository secret 을 추가해주세요.
🎈 Github 토큰 생성하기
Github - 개인 프로필 - Settings - Developer - Personal access token - 토큰 생성하기
팀 레포 - Settings - Secrets에 New repository secret
🎈 docker hub 토큰 생성하기
🎈 docker hub REPO 레포 생성하기
Docker Hub - Create Repository
- 도커허브 중 어느 레포에 빌드이미지를 저장하기 위해서 레포가 필요하므로, 레포 생성
아래는 CI 워크플로우에 위에 도커 설정까지 마친 github workflow 입니다.
# 해당 브랜치에 pr, push 될 시 실행되는 Production CI/CD
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
name: Alchomist Production CI/CD
on:
push:
branches: [ main ]
pull_request:
branches: [ main, release/*, develop]
jobs:
build:
runs-on: ubuntu-latest
# CI 빌드
steps:
- uses: actions/checkout@v2
- name: Set up JDK 16
uses: actions/setup-java@v2
with:
java-version: '16'
distribution: 'adopt'
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml
# 도커허브 로그인
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{secrets.DOCKERHUB_USERNAME}}
password: ${{secrets.DOCKERHUB_TOKEN}}
# 메이븐 빌드 이미지 만들어 도커허브로 업로드
- name: build and release to DockerHub
env:
NAME: zer0da9 # DockerHub 계정 명
REPO: actiontest # DockerHub 레포 이름
run: |
docker build -t $REPO .
docker tag $REPO:latest $NAME/$REPO:latest
docker push $NAME/$REPO:latest
- name: Github Action to EC2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USER }}
key: ${{ secrets.SSH_KEY }}
port: ${{ secrets.PORT }}
script: |
./deploy.sh
3️⃣ CD
⛳ AWS EC2 secrets 등록하기
🎫 도메인 https
1️⃣ 무료 도메인 발급받기
- 회원가입을 해주세요.
- 일반 도메인 검색 하여 무료 도메인 선택해주세요.
- 도커 (글 작성중)
docker run -it --rm --name certbot \
-v '/etc/letsencrypt:/etc/letsencrypt' \
-v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
certbot/certbot certonly -d '*.yourdomain.com' --email youremail@google.com --agree-tos --no-eff-email -d domain.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory