[3] Github Action 테스트 (python, windows command)

hyuckhoon.ko·2021년 4월 5일
0

What I learned in first year

목록 보기
123/146

[지난 시간 내용 정리]
1. workflow는 한 개 이상의 job으로 구성된다.
2. 하나의 job은 한 개 이상의 step들로 구성된다.
각각의 step에 action이 정의된다.
worokflow > jobs > steps > actions

  • 참고로 steps 와 actions이 헷갈릴 수가 있다.
    하나의 step에는 action 을 정의할 수도 있고,
    또는 지금처럼 CMD 명령어를 정의할 수도 있는 것이다.



# workflow 명
name: Shell Commands

# 이벤트
on: [push, pull_request]
jobs:
  # job 한 개 정의
  run-shell-command:
    runs-on: ubuntu-latest
    # 스텝 정의
    steps:
      # action 정의
      - name: echo a string
        run: echo "Hello, world!"
      # action 정의
      - name: multiline script
        run: |
          git --version
          python --version
      






[1] python 명령어 적용

주의할 점은 shellkey다.

ubuntu-latest라는 가상머신의 runner를 사용하고 있다.
디폴트가 bash이므로, 예를 들어 python 명령어를 사용하고자 한다면
shell: python 과 같이 작성해줘야 한다.

출처: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#using-a-specific-shell



simple.yml 파일

# workflow 명
name: Shell Commands

# 이벤트
on: [push, pull_request]
jobs:
  run-shell-command:
    runs-on: ubuntu-latest
    steps:
      - name: echo a string
        run: echo "Hello, world!"
      - name: multiline script
        run: |
          git --version
          python --version
      - name: Python Command
        run: |
          import platform
          print(platform.processor())
        shell: python

결과






[2] windows 명령어 적용

하나의 job은 독립적인 가상머신에서 동작한다.
따라서, 하나의 workflow에 다양한 명령어 사용될 수 있다.

첫 번째 job은 bash 명령어를,
두 번째 job은 python 명령어를,
세 번째 job은 windows 명령어 처럼 말이다.





아래의 코드를 추가한다.

run-windows-command 작업(job)을 추가했다.
해당 작업은 windows-latest 버전의 가상 머신으로 작동할 것이다.

그 다음 steps 정의를 보자.
Directory PowerShell이란 첫 번째 step의 명령어는
Get-Location이다.
그 이유는 윈도우의 디폴트 shell은 powershell 이기 때문이다.

이번엔 두 번째 Directory Bashstep을 보자.
pwd 명령어를 쓰기 위해서는 위 그림과 같이
shell: bash 가 필요하다.
디폴트 shell을 변경해야 하기 때문이다.

의문이 생긴다.

윈도우 가상 머신을 사용하고 있는데, 어떻게 bash 명령어를 사용할 수 있을까

When specifying a bash shell on Windows, the bash shell included with Git for Windows is used.

그 답은 아래와 같다.

simple.yml 파일

# workflow 명
name: Shell Commands

# 이벤트
on: [push, pull_request]
jobs:
  run-shell-command:
    runs-on: ubuntu-latest
    steps:
      - name: echo a string
        run: echo "Hello, world!"
      - name: multiline script
        run: |
          git --version
          python --version
      - name: Python Command
        run: |
          import platform
          print(platform.processor())
        shell: python

  run_windows-command:
    runs-on: windows-latest
    steps:
      - name: Directory PowerShell
        run: Get-Location
      - name: Directory Bash
        run: pwd
        shell: bash

결과





3. job의 의존성 정의

우리가 정의한 job들을 병렬적으로 실행된다.

만약, 서로 의존적으로 실행되게 하려면 어떻게 할까?
예를 들어,
(1) 첫 번째 job에서는 이미지 빌드 테스트를 하고
(2) 두 번째 job에서는 ECR로 이미지를 배포하게 하는 것처럼 말이다.

(1)이 완료돼야 (2)가 진행돼야 한다.



needs 를 사용하면 된다.

마치 docker-compose.yml 파일에서 depends-on을 쓰는 것처럼 말이다.

run-windows-command:
    runs-on: windows-latest
    needs: ["run-shell-command"]
    steps:
      - name: Directory PowerShell
        run: Get-Location
      - name: Directory Bash
        run: pwd
        shell: bash

결과

0개의 댓글