stk create task

Nesta seção, você encontra mais informações sobre o comando ‘stk create task’.

Descrição

O comando stk create task cria um arquivo base de uma Task na Stack corrente.

Como funciona?

Ao ser executado, uma pasta com o nome da Task é criada e dentro dela um arquivo task.yaml. Você deve editá-lo para definir as tarefas que serão executadas por sua Task.

Parâmetros

Confira as opções disponíveis no comando:

ParâmetroDescrição
NAMEDefine o nome da task em sua Stack.
--descriptionDefine uma descrição para sua task.

Exemplo

Confira o exemplo abaixo de como criar uma Task:

  1. Crie uma Stack localmente, execute o comando:
stk create stack <nome-da-sua-stack>
  1. Entre no diretório da Stack que você criou:
cd <nome-da-sua-stack>
  1. Dentro do diretório da Stack, crie a sua Task:
stk create task <nome-da-sua-task>
  1. Descreva o que sua Task faz:
? Description: <texto-descrição-task>
  1. Sua Task foi criada:
- Task <nome-da-sua-task> successfully created!
  1. O arquivo task.yaml foi criado na pasta com o nome da sua Task dentro da pasta tasks na Stack corrente:
name: <nome-da-sua-task>
description: <texto-descrição-task>
inputs:
- label: Commit message
  type: text
  default: example
  name: message
  required: 'true'
supported-os:
- windows
- linux
- mac
requirements-check:
  dependency-example:
    check-command: git --version
    info: git is not installed
command: git add . ; git commit -m "{{inputs.message}}"

Atributos:

  • name: Nome da sua Task que será usado para invocá-la através do comando stk run.
  • description: Descrição da Task que será apresentada no comando stk list task.
  • inputs: Objetos com os valores dos inputs que serão passados para os comandos a serem executados pela Task. Eles não são obrigatórios. Caso algum valor de input definido na Task não seja informado, ele será perguntado para o usuário.
  • supported-os: Definição de quais sistemas operacionais a Task será compátivel. As opções são:
    • windows
    • mac
    • linux
  • requirements-check: [Opcional] Lista de requisitos que serão checados antes da execução da lista de comandos.
    • check-command: Comando executado durante a checagem de requisitos.
    • info: Mensagem que será exibida caso a checagem deste requisito falhe.
  • container: [Opcional] Executa task dentro de um container Docker.
    • image: Url da image ou caminho relativo ao Dockerfile dentro do diretório da Task.
    • volumes: Lista de volumes a ser montado durante a execução do container (ex. “/storage:/data”).
  • command: Comando ou lista de comandos que serão executados pela Task. É possível dividir a execução por sistema operacional usando os objetos com o nome do sistema operacional. Como no exemplo a seguir:
command: 
- linux:  |
    echo "Estou no linux"
    git add . ; git commit -m "{{inputs.message}}"
- mac: |
    echo "Estou no macOS"
    git add . ; git commit -m "{{inputs.message}}"
- windows: |
    echo "Estou no windows"
    git add . ; git commit -m "{{inputs.message}}"

Exemplo de arquivos task.yaml

A seguir, alguns exemplos de Tasks:

  1. Task que executa outros scripts que estão na mesma pasta do task.yaml
name: run-script-task
description: Task que executa scripts contidos na pasta da task.
inputs:
- label: Script Name
  type: text
  name: name
  required: true
supported-os:
- windows
- linux
- mac
command:
  windows: |
    call {{component_path}}/{{inputs.name}}.bat
  linux: |
    chmod +x {{component_path}}/{{inputs.name}}.sh
    {{component_path}}/{{inputs.name}}.sh
  mac: |
    chmod +x {{component_path}}/{{inputs.name}}.sh
    {{component_path}}/{{inputs.name}}.sh
  • Existem algumas váriaveis que são definidas durante a execução da Task que podemos usar para pegar o caminho da Task.
    • component_path: Caminho da pasta na qual está a Task sendo executada.
    • stack_path: Caminho para a pasta da Stack na qual a Task que está sendo executada esta contida.
  1. Task que executa um código python
name: run-python-code
description: Task que executa código em Python.
inputs:
- label: Number of loops
  type: int
  name: loops
  default: 5
supported-os:
- linux
- mac
requirements-check:
  is-python-installed:
    check-command: python --version
    info: Python is not installed.
command:
  linux: |
    #!/usr/bin/env python 
    for i in range({{inputs.loops}}):
      print("Hello from Python")
  mac: |
    #!/usr/bin/env python 
    for i in range({{inputs.loops}}):
      print("Hello from Python")
  • O uso de shebangs para execução de códigos programáticos só é suportado nos sistemas operacionais Linux e MacOs
  1. Task que executa dentro de um container alpine
name: run-alpine
description: Task que usa um alpine
inputs:
- label: URL
  type: text
  name: url
  default: https://stackspot.com
container:
  image: alpine
supported-os:
- linux
- mac
requirements-check:
  is-docker-installed:
    check-command: docker --version
    info: Docker is not installed.
command: |
  apk add curl jq
  curl -s "{{ url }}" | jq

Caso seja necessário é possível invalidar o cache do docker, usando o parâmetro --no-docker-cache durante a execução da task.

Exemplo de execução do comando

Leia também