2023. 7. 16. 16:53ㆍgithub
Github Action 이란?
Github Actions 를 사용하여 리포지토리에서 바로 소프트웨어 개발 워크플로를 자동화, 사용자 지정 및 실행합니다.
CI/CD 를 포함하여 원하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유하고 완전히 사용자 정의된 워크플로에서 작업을 결합 할 수 있다.
Github 에서 공식적으로 제공하는 CI/CD 툴이다. 즉, 개발의 워크플로를 자동화 할 수 있게 도와주는 도구이다.
Github Actions 를 사용하면 자동으로 코드 저장소에서 어떤 이벤트가 발생했을 때 특정 작업이 일어나게 하거나 주기적으로 어떤 작업들을 반복해서 실행 시킬 수도 있다.
어떤 새로운 코드가 메인 브랜치에 유입(push)되면 Github Actions 를 통해 소프트웨어를 빌드하고 상용 서버에 배포할 수도 있다.
Github Actions 는 기존 CI/CD 서비스 대비 간편한 설정과 높은 접근성으로 특히 개발자들 사이에서 많은 호응을 얻고 있다.
Github Action 의 핵심
Workflow
- 자동화 된 전체 프로세스를 의미한다. (자동화 해놓은 작업 과정)
- 워크플로 파일은 yml 로 작성되고, Github Repository 의 .github/workflows 폴더 아래에 저장된다.
- 하나의 리포지토리에는 여러 개의 워크플로가 생성될 수 있다.
워크플로에는 크게 두 가지를 정의해야 한다.
하나는 해당 워크플로가 언제 실행되는지 정의하는 Event, 하나는 해당 워크플로가 구체적으로 어떤 일을 해야하는지 명시하는 Job 이 필요하다.
Event
워크플로를 trigger(실행)하는 특정 활동이나 규칙이다.
ex) main 으로 브랜치를 병합하거나 push 를 하면 Action 이 동작하도록 설정해준다.
Job
독립된 가상 머신 또는 컨테이너에서 돌아가는 하나의 처리 단위를 의미한다.
하나의 워크플로는 여러 개의 작업으로 구성되며 적어도 하나의 작업은 있어야 한다.
모든 작업은 기본적으로 동시에 실행되며 필요 시 작업 간에 의존 관계를 설정하여 작업이 실행되는 순서를 제어할 수도 있다.
Job 이 여러 개인 경우
jobs:
job1:
# job1에 대한 세부 내용
job2:
# job2에 대한 세부 내용
job3:
# job3에 대한 세부 내용
작업의 세부 내용으로 여러가지로 명시 할 수 있는데, 이 때 필수로 들어가야 하는 runs-on 속성을 통해 해당 macOS 나 windows 와 같은 실행 환경을 지정해주어야 한다.
jobs:
job1:
runs-on: ubuntu-latest
steps:
# ...
Step
각 작업이 하나 이상의 단계로 모델링이 된다.
Step은 단순한 커멘드나 스크립트가 될 수도 있고, action 이라고 하는 명령어일 수 있다.
커맨드나 script 를 실행할 경우 run 속성을 사용하며,
action 을 사용할 때는 uses 속성을 사용한다.
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm install
- run: npm test
Action
Github Action 에서 빈번하게 필요한 반복 단계를 재사용하기 용이하게 제공되는 일종의 작업 공유 메커니즘이다.
하나의 코드 저장소 범위 내에서 여러 워크플로 간에서 공유할 수 있을 뿐 아니라, 공개 코드 저장소를 통해 액션을 공유하면 깃허브 상의 모든 코드 저장소에서 사용이 가능하다.
대표적인 공개 액션인 actions/checkout 은 코드 저장소로 부터 코드를 작업 실행 환경으로 내려받는 것을 해주는 Action 이다.
코드
# workflow 의 제목
name: Node.js CI
# Event 설정
on:
# push 를 할 경우
push:
# 브랜치가 메인일 경우 workflow 동작
branches: [main]
pull_request:
# 풀 리퀘스트를 받을 경우도 설정
branches: [main]
# workflow 가 동작할 행위를 설정해 준다.
# Jobs 를 설정
jobs:
# Job1, 즉 이름이 build 이다.
build:
# runs-on : 해당 job 을 어떤 OS 에서 실행할 것인지 설정해준다.
# ubuntu 버전은 최신 버전으로 사용한다.
runs-on: ubuntu-latest
# 다양한 작업 구성 행렬 전략을 사용한다.
strategy:
# matrix 를 사용하여 다양한 작업 구성 행렬을 정의한다.
matrix:
# 배열을 사용해, 노드 버전 구성 행렬을 정의한다.
node-version: [20.x]
# 단계를 정의한다.
steps:
# action 정의
# checkout@3 : Repo 에 있는 Code 를 Runner 로 가져온다.
- uses: actions/checkout@v3
# 이름 정의해주기
- name: Use Node.js ${{ matrix.node-version }}
# node 설치하기
uses: actions/setup-node@v3
with:
node-version: "20.x"
cache: "npm"
- name: build server files
# run 으로 script 실행하기
# package.json dependency 설치
run: npm ci
# - run: npm run build --if-present
# - run: npm test
- name: create env file
working-directory: ./
run: |
pwd
touch .env
echo MYSQL_USERNAME=${{ secrets.MYSQL_USERNAME }} >> .env
echo MYSQL_PASSWORD=${{ secrets.MYSQL_PASSWORD }} >> .env
echo MYSQL_HOST=${{ secrets.MYSQL_HOST }} >> .env
echo MYSQL_DATABASE=${{ secrets.MYSQL_DATABASE }} >> .env
cat .env
- name: zip file
run: zip -r hous.zip ./app.js ./scripts ./appspec.yml ./package.json ./package-lock.json ./config ./controllers ./migrations ./models ./routes ./.env
- name: AWS configure credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
- name: upload to S3
run: aws s3 cp --region ap-northeast-2 ./hous.zip s3://mini-be-bucket/deploy/
- name: deploy with AWS codeDeploy
run: aws deploy create-deployment
--application-name hous-codedeploy
--deployment-config-name CodeDeployDefault.OneAtATime
--deployment-group-name GROUP
--s3-location bucket=mini-be-bucket,bundleType=zip,key=deploy/hous.zip
참조 링크
형주님 그리고,
https://docs.github.com/ko/actions
https://www.youtube.com/watch?v=0Emq5FypiMM&t=1s
https://www.youtube.com/watch?v=KTHZyV9yJGY&t=1s
'github' 카테고리의 다른 글
github 로 협업 (5) | 2023.05.09 |
---|---|
README 작성요령 (0) | 2023.04.09 |