Github Actions

비니·2023년 11월 28일
0

Git

목록 보기
3/3
post-thumbnail
📌 개발 프로세스의 핵심은 "자동화"이다.

🔄 CI/CD?

CI : 지속적인 통합 (Continuos Integration)

  • 빌드와 테스트의 자동화
  • 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 통합되는 과정을 통해 계속해서 품질을 유지하면서 개발을 진행하는 방법

CD : 지속적인 전달(Delivery) 혹은 지속적인 배포(Deploy)

  • 배포 자동화
  • CI 프로세스를 통과한 코드 버전을 “배포”하는 과정
    • CI 과정이 통과될 경우 수동 개입 없이 프로덕션에 자동 배포될 수 있도록 하는 것.

왜 자동화 해야하는 건가요?

  1. 테스트 자동화를 통한 빠른 코드 문제 파악.
  2. 릴리즈 속도 단축을 통한 개발 속도 향상
  3. 프로덕션 환경으로의 원활한 전환
  4. 짧아진 업데이트 주기
    1. 일괄 변경을 수행하는 것보다 빌드 내용에 대한 즉각적인 피드백 반영 가능
  5. 스테이징 환경에 비 개발자가 엑세스 하여 빌드 중인 작업에 참여하고 관련 피드백을 제공할 수 있게 함.
    1. 팀 간 의사 소통 확대를 통한 혁신 추진 가능
  6. 창의력의 극대화
    1. 반복적인 작업을 컴퓨터에게 맡김으로써 창의적인 작업에 열중할 수 있게 함.

많이 쓰이는 CI/CD 툴

  1. 젠킨스
  2. 팀 시티
  3. GitLab
  4. 서클 CI
  5. Bamboo

🕹️ github actions?

  • 위에서 언급한 외부 프로세스의 설치, 세팅 없이
    배포 파이프라인을 자동화 할 수 있는 CI/CD 플랫폼
    레포지토리에서 이벤트가 발생할 때마다 워크 플로우를 실행해준다.

github actions의 기본 개념

workflows jobs steps actions


name: Node.js CI #이름

on:
  push: #트리거 이벤트 
    branches: [ "main" ]

jobs:
  build: #이름

    runs-on: ubuntu-latest # 실행 환경

    steps:

	    - uses: actions/checkout@v3 #actios 레포 받기

	    - name: Use Node.js 18
	      uses: actions/setup-node@v3 # 노드 설치
	      with:
	        node-version: 18
	
	    - run: npm install #dependencies 추가
	    - run: npm run build # 빌드
	    - run: npm test # 테스트

workflows

  • 가장 상위 개념

    • 자동화해 놓은 작업 과정
      ⇒ 요리를 할 때의 레시피북과 같다고 생각하면 된다.
  • 하나의 레포지토리에 여러 개의 워크플로우를 작성할 수 있다.

  • .gitbub/workflows 폴더 아래에 YAML 파일로 작성

  • on을 통해 워크 플로우가 수행 되는 트리거를 설정할 수 있다.

    [트리거 종류](https://docs.github.com/ko/github-ae@latest/actions/using-workflows/events-that-trigger-workflows#gollum)
        `push`
        
        ```yaml
        on:
          push:
            branches:
              - main
        ```
        
         `pull_request` 
        
        ```yaml
        on:
          pull_request:
            branches:
              - main
        ```
        
        `schedule` 
        
        ```yaml
        on:
          schedule:
            - cron: '0 0 * * *' # 매일 00:00 UTC에 실행
        ```
    cron?
            ![](https://velog.velcdn.com/images/eunbeann/post/ce56a598-54b5-4548-b9a0-cad4832d0e2e/image.png)
    
            - **[Crontab.guru - The cron schedule expression editor](https://crontab.guru/)**
            
            [[Cron] 크론(cron) 표현식 정리](https://zamezzz.tistory.com/197)
    `delete`
    
    ```yaml
    on:
      delete:
    ```

Jobs

  • 독립된 가상머신 또는 컨테이너에서 동작하는 하나의 처리 단위
    • 각 작업은 runner를 통해 실행된다.
    • runs-on을 통해 환경 지정 (리눅스, 윈도우, 맥 … )
  • 하나의 워크플로우는 하나 이상의 Job으로 구성된다.
  • Job은 병렬적으로 실행된다.
    • 필요할 경우 의존성을 추가해 작업 순서를 제어할 수 있다.
# ...(생략)...

jobs:
  build: #작업의 이름
		runs-on: ubuntu-latest #리눅스의 최신버전으로 실행
	    # build에 대한 세부 작업
  test:
    # test에 대한 세부 작업
  deploy:
    # deploy에 대한 세부 작업

Steps

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3 
				# 저장소에서 코드 내려 받기
      - run: npm install
				# 패키지를 설치함
      - run: npm test
				# 테스트 스크립트 실행
  • 하나의 워크플로우는 하나 이상의 Job으로 구성된다.
  • Job은 병렬적으로 실행된다.
    • 필요할 경우 의존성을 추가해 작업 순서를 제어할 수 있다.
  • 이 작업 단계는 command, script, action이 될 수도 있다.
    • command
      • run 속성을 사용한다.

        steps:
          - name: Checkout Repository
            **run**: git checkout main
          - name: Install Dependencies
            **run**: npm install
          - name: Build Project
            **run**: npm run build
    • script
      • run 속성을 사용한다.

        steps:
          - name: Run Custom Script
            run: |
              echo "Hello, this is a custom script"
              mkdir artifacts
              cp -r src/* artifacts/
    • action
      • uses 속성을 사용한다.

        steps:
          - name: Use Third-party Action
            **uses**: actions/setup-node@v3
            with:
              node-version: 14
        
          - name: Install Dependencies
            run: npm install
        
          - name: Run Tests
            run: npm test

Actions

  • npm 라이브러리를 가져다가 쓰는 것 처럼 사용하는 action
  • 재사용 가능한 공개 action이 많아 가져다가 쓸 수 있음.
  • 대표적인 오픈 action
    • actions/checkout
      • 레포지토리 코드를 jobs로 내려 받기
    • actions/setup-node@v3
      • node 버전 세팅하기

어떻게 쓰나요?

  • Label approved pull request
    on: pull_request_review
    name: Label approved pull requests
    jobs:
      labelWhenApproved:
        name: Label when approved
        runs-on: ubuntu-latest
        steps:
        - name: Label when approved
          uses: pullreminders/label-when-approved-action@master
          env:
            APPROVALS: "2"
            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
            ADD_LABEL: "approved"
            REMOVE_LABEL: "awaiting%20review"

0개의 댓글

관련 채용 정보