Task

w00j00ng351·2022년 11월 8일
0

개발도구

목록 보기
1/4

Task

1. 내용

  • Taskfile 의 내용을 확인하고, 그 내용에 따라 명령을 수행하는 프로그램

2. 설치

2.1. go install 활용 (소스코드를 통한 빌드)

$ go install github.com/go-task/task/v3/cmd/task@latest
$ task --version
Task version: v3.17.0 (h1:tDkE4X8VUUSNzFMTQNuEEhR/3cfI9hILLuwm365sNCM=)

2.2. npm

$ npm install @go-task/cli
$ npx task --version
Task version: v3.17.0 (h1:tDkE4X8VUUSNzFMTQNuEEhR/3cfI9hILLuwm365sNCM=)

3. 사용방법

3.1. Taskfile 작성

  • task 는 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'

3.2. task 실행

  • 작업목록 확인: 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

3.3. 환경변수 설정

  • 환경변수를 활용할 수 있음

    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
    • 전역(global) 환경변수를 설정하는 예
    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 항목을 통해 환경변수 파일 경로를 지정할 수 있음

    1. .env 파일 작성
    $ vi .env
    NICK_NAME=dhkim
    1. 설정파일 작성
    version: '3'
    
    dotenv: ['.env']
    
    tasks:
      hello:
        cmds:
          - echo 'Hello world'
          - echo 'Good day'
          - echo $NICK_NAME
    1. task 결과
    $ task hello
    task: [hello] echo 'Hello world'
    Hello world
    task: [hello] echo 'Good day'
    Good day
    task: [hello] echo $NICK_NAME
    dhkim

3.4. 내부 작업 (Internal task)

  • 사용자에게 노출되지 않고 다른 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

3.5. 작업에서 다른 작업 호출

  • 작업에서 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

3.6. 작업 종속성 설정

  • 작업의 종속성을 설정할 수 있음

  • 작업의 종속성을 설정한 경우 아래와 같이 동작함

    • 작업 hello 가 작업 myworkmyjob 에 종속되어 있다고 가정
    • 작업 hello 를 호출하면 아래와 같이 작업이 호출됨
      1. 작업 myworkmyjob 이 병렬(parallel)로 호출됨
      2. 작업 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

3.7. 변수

  • vars: 항목을 통해 변수를 선언할 수 있음

  • {{.변수명}} 으로 변수 호출

  • 변수 중요도 순서

    1. 작업 정의에 선언된 변수
    2. 다른 작업에 호출되어 주어진 변수
    3. 포함된 Taskfile 의 변수
    4. includes.vars: 에 정의된 변수
    5. 전역 변수 (Taskfile의 vars: 옵션에 선언된 것)
    6. 환경변수
  • 변수 활용 예시

    • 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
profile
시간이 만든 코드

0개의 댓글