EC2 인스턴스 생성 등은 생략 하겠습니다.
main브랜치를 배포 브랜치로 써도 되지만 deploy 배포 브랜치를 따로 하나 만드는 것을 추천
브랜치 이름을 잘 설정해서 브랜치를 하나 만들어 주고,
deploy브랜치를 ec2 내부에서 클론 받아줍니다.
# This is a basic workflow to help you get started with Actions
name: deploy
name 은 워크플로우 이름을 설정하는 것 입니다. deploy로 설정 하였음.
다른이름으로 해도 됩니다.
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches:
- deploy
워크플로우가 실행 될 조건을 설정하는 것으로
deploy 브랜치에 push가 됐을 때 해당 워크플로우를 실행합니다.
jobs:
SSH:
runs-on: ubuntu-latest
이제부터 작업을 정의합니다.
SSH여기서 작업의 이름을 정의하면 되는데 deploy 등 원하는 이름을 사용해도 됩니다.
runs-on은 이 워크플로우를 실행할 환경인데 최신의 ubuntu 로 해주었습니다.
steps:
- uses: actions/checkout@v2
- name: Run scripts in server
uses: appleboy/ssh-action@master
with:
key: ${{ secrets.ACCESS_KEY }}
host: ${{ secrets.HOSY }}
username: ${{ secrets.USERNAME }}
script: |
cd tscenping
git reset --hard
git fetch
git pull
npm i
npm run build
steps: 작업의 단계를 정의하는데
먼저 uses: actions/checkout@v2 는 깃 허브 레포지토리를 체크아웃 하고 actions/checkout 의 v2 버전을 사용
name:Run scripts in server 는 서버에서 스크립트를 실행하는 단계 Run scripts in server 이 스크립트 이름이 됨
uses: appleboy/ssh-action@master 는 SSH를 사용해 원격 서버에 연결하여 실행하기 위함인데 appleboy의 ssh-action master브랜치를 사용합니다.
with: 부분에서 액션에 대한 입력 매개변수를 넣어주면 되는데
저는 key, host, username만 사용하였습니다.
https://github.com/appleboy/ssh-action
해당 링크에 appleyboy의 설명이 있으니 참고 바랍니다.
key는 ec2 내부에서 ssh key를 가져오면 되는데
ssh-keygen -t rsa -b 4096 -C "email@example.com"
해당 커맨드를 ec2 내부에서 실행하게 되면 키가 생성됩니다 경로는 .ssh폴더 인데 ls -al 을 통해 확인할 수 있습니다.

cd .ssh 를 해서 .ssh폴더로 이동을 해줍니다.
그럼 id_rsa, id_rsa.pub, authorized_keys 가 있을텐데
cat id_rsa >> authorized_keys
해당 커맨드를 입력해서 authorized_keys 파일 뒤에 id_rsa를 이어붙여 줍니다.
그리고
cat id_rsa.pub
이게 key값인데 git에 추가를해주어야 하니 출력된 내용을 복사해서 메모장에 적어놔 줍니다.
host 는 인스턴스의 퍼블릭 IPv4 주소 입니다.
aws에서 확인 후 복사해서 메모장에 붙여놔 줍니다.
username 은 ec2에 username입니다. 터미널에 뜨는 @옆 이름이라고 생각하면 됩니다.
그것도 메모장에 적어놔 줍니다.
deploy 브랜치가 있는 레퍼지토리로 와줍니다.

settings 를 클릭해주고
왼쪽 메뉴들 중 
Security 탭의 Secret and variables 의 Actions로 가줍니다.

거기서 내리시면 Repository secrets가 있는데 여기서 New repository secret을 클릭해 줍니다.
총 3개
HOST, USERNAME, KEY를 만들건데
각각에 내용으로는 메모장에 붙여놨던 것들을 넣어줍니다.
key: ${{ secrets.ACCESS_KEY }}
host: ${{ secrets.HOSY }}
username: ${{ secrets.USERNAME }}
위에서 보여드린 이 부분에서 ACCESS_KEY부분에 KEY를
HOSY부분에 HOST를
USERNAME부분에 USERNAME을 넣어주시면 됩니다.
저는 네임에 오타가 있었는데 그냥 사용합니다.
이렇게 설정을 해주시면 디플로이 브랜치에 무언가 푸시될 시 ec2에 ssh로 접속하는 동작을 하게 됩니다.
그럼 이후에
script: |
cd tscenping
git reset --hard
git fetch
git pull
npm i
npm run build
script를 만들어서 동작할 코드들을 작성해주시면 됩니다.
저는 혹시 ec2 내부에서 코드 수정이 이루어 졌을 경우를 대비해 reset을 하게 해줬고 이미 deploy브랜치 이기 때문에 deploy 브랜치를 pull 받은 뒤 npm i
npm run build 를 하게 해주었습니다.
저 같은 경우 nginx로 html파일을 뿌려주고 있어 빌드만 해주면 알아서 배포파일이 바뀝니다.