Pular para o conteúdo principal

Modelos de build e deploy

Além dos modelos Task simples, o Semaphore possui dois tipos de modelo que formam um pipeline simples: Build cria um artefato versionado e Deploy envia uma versão escolhida para os servidores. Ambos os tipos são selecionados no formulário do modelo e alteram o que o usuário vê ao iniciar uma tarefa.

Modelos de build​

Um modelo de build produz um artefato: um tarball, uma imagem de contêiner, um pacote. Cada tarefa de build recebe uma versão incrementada automaticamente, a partir do Start Version do modelo (por exemplo, 1.0.0). A versão é exibida na coluna Version da lista de modelos e no histórico de tarefas.

Janela New Task de um modelo de build

Use a versão no seu playbook por meio de semaphore_vars.task_details.target_version para nomear o artefato.

Modelos de deploy​

Um modelo de deploy é vinculado a um modelo de build pelo campo Build Template. Quando um usuário clica em Deploy, a janela New Task pede a Build Version a ser implantada; o build bem-sucedido mais recente já vem selecionado.

Janela New Task de um modelo de deploy

Ative Autorun no modelo de deploy para iniciar um deploy automaticamente após cada build bem-sucedido. A versão a ser implantada está disponível no playbook como semaphore_vars.task_details.incoming_version.

A variável semaphore_vars​

O Semaphore passa a variável semaphore_vars para cada playbook do Ansible que executa. Use-a para saber qual tipo de tarefa foi executada, qual versão deve ser construída ou implantada, quem executou a tarefa e a mensagem da tarefa.

Exemplo para tarefas build:

semaphore_vars:
task_details:
type: build
username: user123
message: New version of some feature
target_version: 1.5.33

Exemplo para tarefas deploy:

semaphore_vars:
task_details:
type: deploy
username: user123
message: Deploy new feature to servers
incoming_version: 1.5.33

Para modelos Bash, PowerShell e Python, o Semaphore fornece os mesmos valores de task_details como variáveis de ambiente:

Campo de task_detailsVariável de ambienteObservações
typeSEMAPHORE_TASK_DETAILS_TYPEbuild ou deploy
usernameSEMAPHORE_TASK_DETAILS_USERNAMEUsuário que iniciou a tarefa
messageSEMAPHORE_TASK_DETAILS_MESSAGEMensagem da tarefa
target_versionSEMAPHORE_TASK_DETAILS_TARGET_VERSIONPresente em tarefas build
incoming_versionSEMAPHORE_TASK_DETAILS_INCOMING_VERSIONPresente em tarefas deploy

Exemplo para Bash:

echo "$SEMAPHORE_TASK_DETAILS_TYPE"
echo "$SEMAPHORE_TASK_DETAILS_TARGET_VERSION"

Exemplo para PowerShell:

$env:SEMAPHORE_TASK_DETAILS_TYPE
$env:SEMAPHORE_TASK_DETAILS_INCOMING_VERSION

Exemplo para Python:

import os

task_type = os.getenv("SEMAPHORE_TASK_DETAILS_TYPE")
target_version = os.getenv("SEMAPHORE_TASK_DETAILS_TARGET_VERSION")
incoming_version = os.getenv("SEMAPHORE_TASK_DETAILS_INCOMING_VERSION")

Exemplo de pipeline​

Uma role do Ansible de build:

  1. Obtenha o código-fonte da aplicação no GitHub.
  2. Compile o código-fonte.
  3. Empacote o binário em app-{{ semaphore_vars.task_details.target_version }}.tar.gz.
  4. Envie o tarball para um bucket S3.

Uma role do Ansible de deploy:

  1. Baixe app-{{ semaphore_vars.task_details.incoming_version }}.tar.gz do bucket S3 para os servidores de destino.
  2. Descompacte-o no diretório de destino.
  3. Crie ou atualize os arquivos de configuração.
  4. Reinicie o serviço da aplicação.

Para encadear mais de duas etapas, adicionar aprovações ou ramificar em caso de falha, use Workflows.