Deploy) 아니 이게 되네?? Git Action을 이용한 CI/CD

백준우·2023년 4월 6일
0

Deploy

목록 보기
3/4
post-thumbnail

1. CI/CD

1.1 CI/CD란?
1.2 GitHub Action에 대해

2. GitHub ACtion 해보기

2.1 GitHub Action 설정
2.2 GitHub Action의 다양한 기능


1. CI/CD

1.1 CI/CD란?

  • 개발을 하다보면 기획 - 개발 - 배포 - 운영 이라는 단계로 이루어지는건 접해봤을것이다.
  • 그렇다면 조그마한 개발이 아닌 회사에서 운영되는 대규모 개발의 경우 위 단계로 간다면 서비스 개발시 많은 리스크가 될것으로 보인다.
  • CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 지속적인 자동화와 지속적인 모니터링을 제공할수 있다.
  • CI/CD를 위해서는 다양한 툴이 존재하면 Jenkis, git Action 등이 존재한다.
  • 오늘은 Git Hub에서 나온 GitHub Action이라는 기능을 사용해볼것이다.
  • CI : 테스트, 빌드, Dockerizing, 저장소에 전달하는 것까지 프로덕션 환경으로 서비스를 배포할 수 있도록 준비하는 프로세스
  • CD : 저장소로 전달된 프로덕션 서비스를 실제 사용자들에게 배포하는 프로세스
1.2 GitHub Action에 대해
  • GitHub Action은 코드저장소로 유명하며 이를 연동하여 CI와 CD가 이루어지도록 하는것이다.
  • 코드 혹은 Repository에 어떠한 이벤트가 발생했을떄 실행할 수 있다.

GitHub Action 구성요소

  • 리포지토리에서 이벤트가 발생할 때 트리거되도록 GitHub Actions 워크플로를 구성할 수 있습니다. 워크플로우 에는 순차적으로 또는 병렬로 실행할 수 있는 하나 이상의 작업이 포함되어 있습니다.
  1. WorkFlow
  • 워크플로는 하나 이상의 작업을 실행하는 구성 가능한 자동화 프로세스입니다.
  • 리포지토리에 체크인한 YAML 파일에 의해 정의되며 리포지토리의 이벤트에 의해 트리거될 때 실행되거나 수동으로 또는 정의된 일정에 따라 트리거될 수 있습니다.
  1. Event
  • Workflow를 트리거(실행)하는 특정 활동이나 규칙. 예를 들어, 누군가가 커밋을 리포지토리에 푸시하거나 풀 요청이 생성 될 때 GitHub에서 활동이 시작될 수 있다.
    EX)
  1. main branch에서 push가 이루어질때 이벤트가 발생할 경우
  2. dev branch에서 pull Request가 발생할 경우
  3. js파일이 경로에 존재하는경우
  4. app/ 디렉토리 하위 파일들을 작업하고 push하면 WorkFlow를 수행하지 않는다.
on:
  push:
    branches:
      - main
  pull_request:
      branches: [ dev ]
      paths:
        - "**.js"
      paths-ignore:
        - "app/**"
jobs:
  # ...(생략)...
  1. Job
  • Job은 동일한 실행기에서 실행되는 워크플로우의 일련의 단계입니다. 단계는 순서대로 실행되며 서로 의존적입니다. 각 단계는 동일한 러너에서 실행되므로 한 단계에서 다른 단계로 데이터를 공유할 수 있다.
    jobs이라고 선언을 하고 하나의 독립된 가상머신,컨테이너를 실행한다 생각하면 된다.
    EX)
    start1-job을 선언하고 ubuntu-latest환경에서 실행한다. 그리고 start2-job을 별도의 환경에서 실행한다.
# ...(생략)...
jobs:
 	start1-job:
    	runs-on: ubuntu-latest
	start2-job:
    	...(생략)
  1. Step
    Job 안에서 실행되는 프로세스 단위. Step에서 명령을 내리거나, Action을 실행할 수 있다.
    EX)
    Node 환경에서 실행하는 환경을 구성할경우
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
 	# 다른사람이 만들어놓은 환경을 사용하는 경우 use를 사용한다.
    # checkout@v3은 현재 run환경에 git repository를 사용할때 쓴다.
      - uses: actions/checkout@v3 
      - run: npm install
      - run: npm test
  1. Action
  • 자주 반복되는 작업을 수행하는 Git Action 플랫폼용 사용자 지정 어플리케이션입니다. Git Hub에 있는 Git 레포지토리를 가져오거나 빌드환경에 대한 올바른 도구 체인을 설정 그리고 클라우드 공급자에 대한 인증을 설정할 수 있습니다.
  1. Runners
  • Workflow가 실행될 인스턴스

2. Git Action 해보기

  • 위의 개념들을 토대로 간단한 git Action workflow를 만들어 보겠다.

2.1 Git Action 설정

  1. 먼저 gitHub에 Repository를 만든다. 그리고 상위 탭에서 Actions 탭을 들어갈 수 있도록 한다. 그리고 New workflow를 들어가도록 한다.

2 화면 상단에 set up workflow yourself를 클릭하도록 한다.

  1. yml파일에 다음과 같은 내용을 추가한뒤 Start commit을 눌러준다.
name: Test Git Action
on:
  push:
    branches: [ "main" ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run a one-line script
        run: echo Hello, world!
      - name: Run ls -al
        run: ls -al
  1. GitHub의 Actions에 들어가면 다음과 같이 commit Message로 Action이 돌아가는것이 보일것이다.

  2. 다음과 같이 사용된 workflow의 실행 기록들이 남아있다.

  3. checkout@v3을 사용하였으니 Run ls -al에는 우리가 사용한 Repository의 파일내역들이 보일것이다.

2.2 Git Action의 다양한 기능

  1. 보안설정
  • GitHub Action을 사용하다보면 보안적인 부분인 많이 걸릴것이다. 예를 들어 AWS의 Secrity Key같은 부분들이다. 이러한 부분들은 GitHub Repository내에서 작성할 수 있다.

  • Repository내의 settings에서 설정이 가능하다. 지금은 AWS_ACCESS_KEY를 작성해놓은 부분이 보인다.
  1. ENV 파일 설정
  • GitHub Action에서도 ENV 파일을 사용할 수 있다. 같은 값을 여러번 써야할 경우 유용하게 쓸수 있다.
name: Deploy to Amazon ECS
on:
  push:
    branches: [ "main" ]
env:
  test_env: "여러번쓰는 값" 
  • 여러번쓰는값뿐만이 아니라 다양하게 적용할 수 있으니 관련사항은 공식문서를 참고하는게 좋을거 같다.

결론

  • Git Hub를 통해 CI/CD를 구성한다면 Jenkins같은 별도의 환경을 구성하거나 설치할 필요없이 사용하는 Repository에서 바로 사용할 수 있어서 편할것으로 보인다.
  • 이제 외부모듈인 AWS를 사용해서 GitHub에서 인증도 받을 수 있도록 하겠다.

참고

profile
이게 되네?

0개의 댓글