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

CI/CD란 무엇일까 (feat. gitflow 정책 연계)

CI는 Continuous Integration, CD는 Continuous Delivery의 약자입니다. 한국말로 하면 계속되는 통합, 계속되는 배달(배포)라는 뜻이죠. 그렇다면 공통되는 단어인 Continuous는 어떤 의미로 쓰이고 있을까요? ...

개발 도구

CI/CD
git
git flow
github actions
배포

couchcoding

2022-12-07

포트폴리오(개발 프로젝트) 제작시 도움이 되는 도구들 - 1 (프로젝트 관리 & 디자인)

이번 포스팅에서는 이러한 개발 과정을 돕기 위해 개발 포트폴리오 단계별로 유용한 도구를 소개하려고 합니다. 먼저 협업을 위한 메신저, 프로젝트 관리 툴, 화면 기획 & 디자인에 사용할 수 있는 도구들을 소개하겠습니다. 다음 포스팅에선 설계 및 배포를 위한 다양한 툴들을...

개발 도구

협업도구
프로젝트 관리
화면 기획
디자인 도구
slack
notion
trello
github
whimsical
figma

couchcoding

2022-12-07

포트폴리오(개발 프로젝트) 제작시 도움이 되는 도구들 - 2 (설계, 테스팅)

저번 포스팅에서는 프로젝트 관리 및 화면 기획 및 디자인에 사용하는 도구들을 알아보았습니다. 이번에는 프로젝트 설계 및 테스팅할때 도움이 되는 도구들을 알아보겠습니다. ...

개발 도구

DB 설계
소프트웨어 설계
UML
테스팅 도구
erd
swagger
rest client
소프트웨어 정적분석
sonarqube

couchcoding

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