logo
한달 포트폴리오 멘토링
블로그

Github Actions

Github Actions 는 Github에 내장된 CI/CD 도구입니다. Github에 내장되 있는 CI/CD라 github와 통합이 쉽고, CI/CD 서버가 내장 되어 CI/CD서버를 따로 구축할 필요 없으며, 일정 수준까지 가격이 무료 라서 개인 프로젝트를 수행할떄 진입장벽 없이 쉽게 선택할 수 있는 도구 입니다.

Github Actions의 Pricing 정책

Github Actions를 동작시키기 위해서는 project에 .github/workflows 폴더를 만들고 Github Actions Workflow 파일을 만들어주고 Github에 올리게 되면 Github가 해당 파일을 자동적으로 읽어 Github Actions를 실행합니다.

Github Actions Workflow 작성하기

Github Actions 설정 파일은 yml로 만들어서 .github/workflows 에 넣으면 Github에서 자동으로 실행된다고 하였습니다. Github Actions WorkFlow파일을 만드는 방법을 간단하게 알아보도록 합시다.

actions 예제

본 예제는 develop 브랜치와 features의 하위 브랜치에 push가 올경우, develop에 pull_request를 생성시 java maven test를 실행하고 결과를 슬랙에 알려주는 예제입니다.

# Actions 이름 github 페이지에서 볼 수 있다. name: Unit Test # Event Trigger 특정 액션 (Push, Pull_Request)등이 명시한 Branch에서 일어나면 동작을 수행한다. on: push: # 배열로 여러 브랜치를 넣을 수 있다. branches: [ develop, features/* ] # github pull request 생성시 pull_request: branches: # -로 여러 브랜치를 명시하는 것도 가능 - develop # 실제 어떤 작업을 실행할지에 대한 명시 jobs: # 스크립트 실행 환경 (OS) # 배열로 선언시 개수 만큼 반복해서 실행한다. ( 예제 : 2번 실행) run-on: [ ubuntu-18.04, ubuntu-20.04 ] # 실제 실행 스크립트 steps: # uses는 github actions에서 제공하는 플러그인을 실행.(git checkout 실행) - name: checkout uses: actions/checkout@v2 # with은 plugin 파라미터 입니다. (java 11버전 셋업) - name: java setup uses: actions/setup-java@v2 with: distribution: 'adopt' # See 'Supported distributions' for available options java-version: '11' # run은 사용자 지정 스크립트 실행 - name: run unittest run: | ./mvnw test # Salck Notification plugin - name: slack-notification uses: Ilshidur/action-slack@master # Slack 메세지를 파라미터로 보냄 with: args: '${{ github.ref }} unittest, ${{ job.status }} https://{{github주소}}/actions/runs/{{ GITHUB_RUN_ID }}' # Webhook URL을 환경변수로 넣어준다. env: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} # 실패일 경우에만 보낸다. if: failure()

name

github actions의 이름을 정할 수 있는 부분입니다.

name에서 정한 이름으로 actions tab에서 볼 수 있습니다.

on

현재 Action이 언제 실행되는지에 대한 기술입니다.

git action (push, pull request 등등branches 를 설정하면 액션과 branch가 일치할떄 jobs 밑의 액션을 수행합니다.

Jobs

이벤트가 발생하면 실제 실행할 내용에 대해서 기술합니다

  • runs-on : 어떤 환경에서 실행할 지를 기술합니다. 여기에서 확인 할 수 있습니다. Windows, Ubuntu, Mac을 지원합니다.
  • steps: 실제로 실행할 단계들을 적습니다.
    • name: 실행시 표시될 이름입니다. github에서 확인할 수 있습니다
    • uses: 다른 사람이 만든 Plugin들을 사용할 수 있습니다. 마켓플레이스 에서 검색해서 필요한 것들을 찾아보세요
    • with: plugin에서 사용할 파라미터를 넣어줍니다.
    • run: 실제로 컴퓨터상에서 실행할 스크립트를 적습니다. | 를 쓰면 여러줄의 명령어를 입력할 수 있습니다.
    • if : 해당 step의 실행조건을 명시 할 수 있습니다. 예제에서는 앞선 스탭에서 실패가 일어날 경우 슬랙메세지를 보내는데 활용하였습니다.

인증키 & 인증 토큰 삽입

Actions에서 다른 서비스와 연동하기 위해서는 인증 토큰 이나 인증 비밀번호 가 필요할 수 있습니다. 이 데이터를 그대로 Workflow에 삽입한다면 전세계 모든 사람이 볼 수 있겠죠..

이러한 문제를 해결하기위해 Repository 주인은 secrets라는 환경 변수를 추가할 수 있습니다. (Slack notification시 url을 secrets로 관리하였습니다)

settings -> Secrets 에 들어가면 secret을 추가할 수 있고 secret.{변수 이름} 으로 Workflow에서 가져올 수 있습니다.(예제 참고)

사용할 만한 플러그인

다양한 Setups

Actions 마켓에 보면 java 뿐 아니라, 파이썬, React, Nodejs 등 다양한 언어에 대한 setup을 지원합니다. 자신에게 맞는 플러그인을 사용하세요

Action-Slack (Slack notification)

https://github.com/Ilshidur/action-slack 은 slack에 notificatio을 보낼 수 있고 메세지를 커스터마이징 할 수 있게 해줍니다.

Sonar cloud

Sonar Cloud코드 정적분석 툴로 코드의 버그보안위협 Bed Smell(나쁜 코드)를 판독해서 보고서 형태로 알려줍니다. https://github.com/marketplace/actions/sonarcloud-scan 를 이용해서 자신의 프로젝트의 코드 품질에 대한 보고서를 계속 받으면 좋은 코드로 프로젝트를 작성하는데 도움이 될 것 입니다.

Deploy to Heroku

https://github.com/marketplace/actions/deploy-to-heroku

Heroku 는 PaaS서비스로 서버를 쉽게 호스팅 해주고, 특히 가벼운 프로젝트를 무료 로 호스팅하기 때문에 개인 프로젝트에서 많이사용하는 서비스 입니다. deploy to heroku를 이용하여 특정 이벤트가 일어나면 자신의 서비스가 업데이트 되도록 하세요

Netlify Actions

https://github.com/marketplace/actions/netlify-actions

Netlify 는 PaaS서비스로 백엔드 없는 프론트엔드 서비스를 호스팅하는데 최적화 되어있습니다. 특히 Heroku와 같이 가벼운 프로젝트를 무료 로 사용할 수 있습니다.

Netlify Actions를 이용하면 쉽게 Github와 통합을 할 수 있습니다.

PortfolioAD
관련있는 글

couchcoding

2022-12-07

Postman Mock Server로 팀 프로젝트의 개발 속도와 갈등을 개선하기

프로젝트의 개발 효율을 저해시키는 요소에는 정말 여러가지가 있습니다. Mock Server는 개발 효율을 저해시키는 요소 중에 개발 병목현상과 불명확한 커뮤니케이션을 해결할 수 있는 좋은 솔루션입니다. 여기 백엔드 개발자 A와 프론트엔드 개발자 B가 같이 개발을 하는...

개발 도구

협업도구
API 설계
API
mock server
postman

couchcoding

2022-12-07

[Git] 실무에서 사용하는 명령어들을 빠르게 알아보자 (1)

Git은 개발자가 반드시 알아야할 기술 중 첫번째로 뽑을 정도로 굉장히 중요한 기술입니다. 그 Git을 제대로 공부하기는 매우 어렵고, 대부분의 상황에서는 그 모든 것을 알 필요는 없습니다. 그래서 이번 포스팅에서는 실무에서 사용하는 필수 명령어들을 알아보도록 하겠습...

개발 도구

git
commit
push
pull
add
git 충돌 해결

couchcoding

2022-12-07

당신이 Docker로 개발환경을 구축해야 하는 이유(Docker로 Postgresql과 Redis 설치하기 예제)

도커는 리눅스 가상화 시스템으로 사용해보면 Virtual Machine(이하 VM)과 같이 내 컴퓨터에 독립된 리눅스 운영체제 환경을 만든 느낌을 받을 수 있습니다. 그러나 사용해 보면 VM과 달리 굉장히 가벼운 것을 알 수 있습니다. ...

개발 도구

배포
redis
docker
개발환경
postgres

couchcoding

카우치코딩 공식 계정입니다.