ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Github Actions
    GIT 2022. 11. 3. 14:24

     

     

     

     

    이번엔 지난번 강의에서 듣고 알고 싶었던 Github Actions에 대해 유튜브 강의를 찾아 간단하게 공부했다!

    (강의내용을 정리만 하였다!)

     

    모든 글과 캡쳐는 다음의 영상을 듣고 정리하였다!🙌

    https://www.youtube.com/watch?v=R8_veQiYBjI 

     

     

     

     

     

     

     

     

     

     

     

    Github Actions

    개발자 workflow를 자동화 하는 플랫폼으로 workflow 중의 하나인 CI / CD 또한 Github Actions를 통해서 자동화 할 수 있다.

     

     

     

     

     

     

     

     

    자동화 작업의 필요성

    작업을 자동화 하는 일이 필요한 이유는 무엇일까? 먼저, 개발에서 많이 사용되는 Github이란 오픈 소스 프로젝트를 위한 플랫폼으로 공개적으로 프로젝트를 사용하고 기여하는 작업을 가능하도록 한다. 위에서 말한 workflow란 새로운 팀이나 개인 개발자가 프로젝트에 참여하도록 하고 수정사항에 대한 Pull Request을 열거나 이슈 발생시 이슈의 중요도나 재발생 가능성, 프로젝트 참여자에게 할당하는 등의 여러가지 일을 조직화하는 역할을 수행하는 것을 말한다.

     

    버그를 고치거나 고친 작업을 PR등의 작업은 앱이 배포가 된 이후에 진행되는 작업들로 CI / CD 파이프라인에 따라서 release notes를 준비하고 버전 숫자를 업데이트 등의 작업과 이루어진다.

     

    그런데 조직이 커지고 프로젝트 참여자가 많아질 수록 이러한 과정이 매우 복잡해지게 되어 이러한 작업을 가능한 자동화 시키는 것이 필요해졌다. 이러한 작업을 위해 github Actions가 탄생 되었다.

     

     

     

     

     

     

     

     

     

    Github Actions의 자동화 과정

    Github Actions를 사용하면 repository 안에서나 repository에 변화(이벤트)가 발생하면 자동 Actions가 그에 대한 응답으로 실행되게 된다. 즉, Github Actions는 이벤트를 듣고 있다가 이벤트가 발생하면 이벤트에 맞는 workflow를 실행한다. 

     

     

     

     

     

     

     

     

     

     

     

    Github Actions CI / CD 과정

    가장 많이 사용되는 Github Actions를 이용한 CI / CD workflow는 다음의 과정을 거치게 된다.

    1. 코드 커밋
    2. 커밋된 코드에 대해 테스트 진행
    3. 테스트 성공시 빌드
    4. 빌드에 성공시 push
    5. push 된 프로젝트를 배포

     

     

     

     

     

     

     

     

     

    Github Actions CI / CD 장점

    Github Actions를 사용하면 프로그램의 설치 없이 같은 또 다른 CI / CD 툴을 사용하여 파이프라인을 쉽게 설치할 수 있다. CI / CD 과정에서 다른 기술들과 통합하는 것은 매우 중요한데, 프로젝트의 확경을 매번 일일이 설치하는 것은 복잡하고 귀찮기 때문에 간단하게 Docker를 이용해서 환경을 준비하고 쉽게 타겟과 연결하여 배포를 하는 작업은 매우 중요하다. 이러한 작업을 github Actions를 통해서 할 수 있다.

     

     

     

     

     

     

     

     

     

     

    Github Actions CI / CD pipeline

    이제 CI / CD 파이프라인을 따라서 먼저 프로젝트를 만들어보자. 강의 내용에 포함된 샘플 자바 프로젝트는 다음에서 확인이 가능하다.

    https://github.com/nanuchi/my-project

     

    GitHub - nanuchi/my-project

    Contribute to nanuchi/my-project development by creating an account on GitHub.

    github.com

     

    프로젝트 repository에서 Actions를 클릭하여 Github Actions를 적용해준다.

    Githup repository -> Actions -> 원하는 workflow 선택 (여기서는 Java with Gradle 선택)

     

    이제 yml 파일을 다음과 같이 설정해준다. yml에서 사용한 action의 repository 내용들은 다음의 github marketplace에서 찾을 수 있다.

    https://github.com/marketplace?type=actions 

     

    GitHub Marketplace: actions to improve your workflow

    Find the actions that help your team build better, together.

    github.com

    # This workflow will build a Java project with Gradle
    # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
    
    # name[optional]은 repos의 action page에서 보여지는 이름을 말한다. 
    name: Java CI with Gradle  
    
    # on[required]는 action이 실행되는 Github 이벤트를 말한다. 
    on:
      push:
        branches: [ master ]
      pull_request:
        branches: [ master ]
    
    # jobs[required]는 하나 또는 여러개의 jobs를 지정(jobs.<job_id>)해줄 수 있으며 순서대로 일을 수행한다. 
    jobs:
      build-java:
    
    	# 운영환경 
        runs-on: ubuntu-latest
        # 다음과 같이 strategy를 이용하면 여러 환경을 설정할 수 있다. 
        # strategy:
        # 	matrix:
        #     	os: [ubuntu-latest, windows-latest, macOS-latest]
        
        # steps는 커맨드를 실행하거나 tasks를 준비하거나 action을 실행시킬 수 있다. 
        steps:
            # uses : action을 선택(action/ 주소 아래는 재사용이 가능한 코드가 호스트 되는 것이다 -> actions 사이트 저장소에 checkout이름의 repo에 action.yml파일이 저장되어 있다.)
        - uses: actions/checkout@v2
    
        - name: Set up JDK 1.8
          uses: actions/setup-java@v1
          with:
            java-version: 1.8
    
        - name: Grant execute permission for gradlew
        	# run : 커맨드라인을 실행한다 
          run: chmod +x gradlew
    
        - name: Build with Gradle
          run: ./gradlew build
    
    		# docker 이미지를 생성하고 도커 이미지를 push 하는 작업 설정 
            # ubuntu환경에서 docker가 기본적으로 설정되어있어 환경 설정은 필요 없어 이미지만 올린다 
            # 기본적으로 같은 폴더에 도커 이미지가 생성된다. 
        - name: Build and Push Docker Image
          uses: mr-smithers-excellent/docker-build-push@v4
          with:
            image: nanajanashia/demo-app
            registry: docker.io
            username: ${{ secrets.DOCKER_USERNAME }}
            password: ${{ secrets.DOCKER_PASSWORD }}
            
        # publish needs 옵션을 사용하면 위의 build가 완료된 후 publish 됨(default 설정)
        # publish: 
        #	needs: build

    YML에서 Build and Push Docker Image 액션의 Docker사용자 이름과 패스워드 정보는 github에 등록해준다.

    Github repository -> Settings -> Secrets-> New secret -> DOCKER_USERNAME, DOCKER_PASSWORD 를 각각 생성

     

    + Actions에서 다음과 같이 누군가 프로젝트에 참여하였을때의 Actions를 정할수 도 있다.

     

    이제 작성한 ci.yml파일을 이용해서 PR을 열면 action이 실행되는 것을 확인할 수 있다.

     

    Details 버튼을 누르면 다음과 같이 확인이 가능하다.

     

    도커 이미지 생성 및 push 도 잘 이루어지는 것을 확인할 수 있다.

     

     

     

     

     

     

     

     

     

Designed by Tistory.