[지난 시간 내용 정리]
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
주의할 점은 shell
key다.
ubuntu-latest라는 가상머신의 runner를 사용하고 있다.
디폴트가 bash이므로, 예를 들어 python 명령어를 사용하고자 한다면
shell: python
과 같이 작성해줘야 한다.
# 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
하나의 job은 독립적인 가상머신에서 동작한다.
따라서, 하나의 workflow에 다양한 명령어 사용될 수 있다.
첫 번째 job은 bash 명령어를,
두 번째 job은 python 명령어를,
세 번째 job은 windows 명령어 처럼 말이다.
아래의 코드를 추가한다.
run-windows-command
작업(job)을 추가했다.
해당 작업은 windows-latest 버전의 가상 머신으로 작동할 것이다.
그 다음 steps 정의를 보자.
Directory PowerShell
이란 첫 번째 step의 명령어는
Get-Location이다.
그 이유는 윈도우의 디폴트 shell은 powershell 이기 때문이다.
이번엔 두 번째 Directory Bash
step을 보자.
pwd 명령어를 쓰기 위해서는 위 그림과 같이
shell: bash
가 필요하다.
디폴트 shell을 변경해야 하기 때문이다.
그 답은 아래와 같다.
# 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
우리가 정의한 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