[Azure] GitHub Actions

황서희·2023년 1월 27일
0

GitHub Actions는 CI/CD 와 같은 workflows를 자동화하는 도구이다. 쉽게 말하자면, GitHub에 push, pull과 같은 액션들이 발생 했을 때 해당 이벤트에 대해 정해진 동작을 자동으로 실행시켜 준다.

비슷한 것으로는 CI에는 Jenkins, CD에는 ArgoCD 등이 있다. Jenkins, ArgoCD등 만 사용 경험이 있어 GitHub Actions를 사용해 보고 싶었는데, 이번 기회에 배울 수 있었다.

GitHub Actions를 사용하기 위해서는 꼭 ./github/workflows 폴더 안에 yaml 파일을 생성해 줘야 한다.

https://github.com/hsh108868/azure_function/tree/master/.github/workflows

실습 코드는 여기서 확인할 수 있다.

GitHub Actions를 통해 특정 운영 체제에서만, 특정 steps에서만, 특정 버전에서만, 특정 행동에서만 Action을 실행하도록 설정할 수 있다.

echo "WORKFLOW: ${{ env.WORKFLOW_LEVEL }}"
echo "STEP 1: ${{ env.STEP_1 }}"
echo "STEP 2: ${{ env.STEP_2 }}"

GitHub Actions 에서는 해당 방식으로 환경변수를 설정하니 꼭 기억해 두도록 하자. 또한 환경 변수는 scope 내에서 설정하면 해당 scope 내에서만 값이 할당된다.

run: |
        STEP_1='This value comes from the step 1'
        echo "::add-mask::$STEP_1"
        echo "::set-output name=value1::$STEP_1"

를 통해 mask를 설정할 수 있다.

echo "STEP 2: ${{ steps.step2.outputs.value2 }}"
echo "SECRET 1: ${{ secrets.SECRET_1 }}"

GitHub Settings 에서 Secret을 설정한다면 이렇게 마스킹을 할 수 있다. (if 문을 통해 체크하면 Secret 값이 잘 적용되었음을 알 수 있다.)

strategy:
      matrix:
        os: ['ubuntu-latest', 'windows-latest','macos-latest']
    runs-on: ${{ matrix.os }} #빌드 서버의 운영 체제, 여러 개 사용 가능

name: 'Say Hello on ${{ matrix.os }}' # 네임 하나가 각각의 스텝

run: |
	echo "Hello from ${{ matrix.os }}"

을 통해 각각의 운영 체제에서 실행할 수 있도록 설정할수도 있다.

strategy:
      matrix:
        os: ['ubuntu-latest', 'windows-latest','macos-latest']
        nodejs: ['14.x', '16.x']
    runs-on: ${{ matrix.os }} #빌드 서버의 운영 체제, 여러 개 사용 가능

    steps:
    - name: 'Setup node.js version' # 네임 하나가 각각의 스텝
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.nodejs }}
    
    - name: 'Check node.js version on ${{ matrix.os }} '
      shell: bash
      run: |
        echo $(node --version)

각 버전에 맞을 때만 실행할 수도 있다. 해당 코드는 6개의 Jobs 가 실행된다.

- name: 'Run only on Windows'
      if: matrix.os == 'windows-latest' 
      shell: bash
      run: |
        echo "Windows Only"
    - name: 'Run not on Windows'
      if: matrix.os != 'windows-latest' 
      shell: bash
      run: |
        echo "Not Windows"

특정 운영 체제에서만 실행되도록 할 수도 있다.

if: github.event_name == 'pull_request'

특정 이벤트에서만 실행할 수도 있다.

env:
  WORKFLOW_LEVEL: 'This values comes from the workflow level' #jobs에서도 가능, 각각의 steps에서도 환경변수 설정 가능

jobs: 
  build-job: 
    name: 'Build Job' #하는 일 각각의 빌드 서버가 할당된다.
    runs-on: ubuntu-latest

    steps:
    - name: 'Say Hello' # 네임 하나가 각각의 스텝
      shell: bash
      run: |
        echo "Hello World"
  deploy-to-dev-job: 
    name: 'Deployment Job to DEV' #하는 일 각각의 빌드 서버가 할당된다.
    needs:
      - build-job
    runs-on: ubuntu-latest

    steps:
    - name: 'Say DEV' # 네임 하나가 각각의 스텝
      shell: bash
      run: |
        echo "DEVELOPERS"
  deploy-to-prod-job: 
    name: 'Deployment Job to PROD' #하는 일 각각의 빌드 서버가 할당된다.
    needs:
      - build-job
    runs-on: ubuntu-latest

    steps:
    - name: 'Say PRO' # 네임 하나가 각각의 스텝
      shell: bash
      run: |
        echo "PRODUCER"

GitHub Actions에서는 기본적으로 각각의 Job에 대한 순서가 설정되어 있지 않다. 빠르게 캐치 한 것이 빠르게 실행된다. 따라서, 꼭 앞의 것이 먼저 실행되어야 하는 경우에는 이와 같이 Job Chaining을 걸어주어야 한다.

profile
다 아는 건 아니어도 바라는 대로

0개의 댓글