$ go install github.com/go-task/task/v3/cmd/task@latest
$ task --version
Task version: v3.17.0 (h1:tDkE4X8VUUSNzFMTQNuEEhR/3cfI9hILLuwm365sNCM=)
$ npm install @go-task/cli
$ npx task --version
Task version: v3.17.0 (h1:tDkE4X8VUUSNzFMTQNuEEhR/3cfI9hILLuwm365sNCM=)
Taskfile.yml
, Taskfile.yaml
, Taskfile.dist.yml
, Taskfile.dist.yaml
순서로 Taskfile을 탐색하고 작업을 실행함$ vi Taskfile.yml
version: '3'
tasks:
hello:
cmds:
- echo 'Hello world'
- echo 'Good day'
task --list-all
$ task --list-all
task: Available tasks for this project:
* hello:
task <작업이름> [, <작업이름>, ...]
$ task hello
task: [hello] echo 'Hello world'
Hello world
task: [hello] echo 'Good day'
Good day
환경변수를 활용할 수 있음
version: '3'
tasks:
hello:
cmds:
- echo 'Hello world'
- echo 'Good day'
- echo $NICK_NAME
$ NICK_NAME=wjyong task hello
task: [hello] echo 'Hello world'
Hello world
task: [hello] echo 'Good day'
Good day
task: [hello] echo $NICK_NAME
wjyong
Taskfile의 env
항목을 통해 환경변수를 설정할 수 있음
version: '3'
tasks:
hello:
cmds:
- echo 'Hello world'
- echo 'Good day'
- echo $NICK_NAME
env:
NICK_NAME: wclee
$ task hello
task: [hello] echo 'Hello world'
Hello world
task: [hello] echo 'Good day'
Good day
task: [hello] echo $NICK_NAME
wclee
version: '3'
env:
NICK_NAME: wclee
tasks:
hello:
cmds:
- echo 'Hello world'
- echo 'Good day'
- echo $NICK_NAME
주의: env 항목이 있어도 환경변수가 셸에서 정의된 경우 셸의 환경변수 값을 따름
$ NICK_NAME=wjyong task hello
task: [hello] echo 'Hello world'
Hello world
task: [hello] echo 'Good day'
Good day
task: [hello] echo $NICK_NAME
wjyong
설정 파일에서 dotenv
항목을 통해 환경변수 파일 경로를 지정할 수 있음
.env
파일 작성$ vi .env
NICK_NAME=dhkim
version: '3'
dotenv: ['.env']
tasks:
hello:
cmds:
- echo 'Hello world'
- echo 'Good day'
- echo $NICK_NAME
$ task hello
task: [hello] echo 'Hello world'
Hello world
task: [hello] echo 'Good day'
Good day
task: [hello] echo $NICK_NAME
dhkim
사용자에게 노출되지 않고 다른 task 에 의해 호출되는 task 를 작성할 수 있음
예시 Taskfile 작성
version: '3'
tasks:
hello:
cmds:
- task: mywork
mywork:
internal: true
cmds:
- echo 'my work is called'
작업 목록 확인
$ task -a
task: Available tasks for this project:
* hello:
작업 호출
$ task hello
task: [mywork] echo 'my work is called'
my work is called
작업에서 cmds
이하 task
필드를 통해 다른 작업을 호출할 수 있음
Taskfile 예시
version: '3'
tasks:
hello:
cmds:
- task: mywork
mywork:
cmds:
- echo 'my work is called'
작업 호출 결과
$ task hello
task: [mywork] echo 'my work is called'
my work is called
작업의 종속성을 설정할 수 있음
작업의 종속성을 설정한 경우 아래와 같이 동작함
hello
가 작업 mywork
와 myjob
에 종속되어 있다고 가정hello
를 호출하면 아래와 같이 작업이 호출됨mywork
와 myjob
이 병렬(parallel)로 호출됨hello
가 호출됨Taskfile 작성
version: '3'
tasks:
hello:
deps: [mywork, myjob]
mywork:
cmds:
- echo 'my work is called'
myjob:
cmds:
- echo 'my job is called'
작업 호출
$ task hello
task: [myjob] echo 'my job is called'
my job is called
task: [mywork] echo 'my work is called'
my work is called
주의: 종속성으로 인해 호출된 작업들은 서로 종속성이 있으면 안됨
종속성을 가질 수 있으나, cycling 종속성을 가질 경우 오류 발생
오류 메시지 예시
task: maximum task call exceeded (100) for task "myjob": probably an cyclic dep or infinite loop
vars:
항목을 통해 변수를 선언할 수 있음
{{.변수명}}
으로 변수 호출
변수 중요도 순서
includes.vars:
에 정의된 변수vars:
옵션에 선언된 것)변수 활용 예시
Taskfile
version: '3'
tasks:
hello:
cmds:
- echo '{{.DATE}}'
vars:
DATE:
sh: date
작업 호출 결과
$ task hello
task: [hello] echo 'Tue Nov 8 06:54:11 UTC 2022'
Tue Nov 8 06:54:11 UTC 2022