Pipelines
Semaphore admite pipelines sencillos mediante tareas de tipo build y deploy.
Semaphore pasa la variable semaphore_vars a cada playbook de Ansible que ejecuta.
Puede usarla en sus tareas de Ansible para saber qué tipo de tarea se ejecutó, qué versión debe compilarse o desplegarse, quién ejecutó la tarea, etc.
Ejemplo de semaphore_vars para tareas build:
semaphore_vars:
task_details:
type: build
username: user123
message: New version of some feature
target_version: 1.5.33
Ejemplo de semaphore_vars para tareas deploy:
semaphore_vars:
task_details:
type: deploy
username: user123
message: Deploy new feature to servers
incoming_version: 1.5.33
Para las plantillas de Bash, PowerShell y Python, Semaphore proporciona los mismos valores de task_details como variables de entorno:
Campo de task_details | Variable de entorno | Notas |
|---|---|---|
type | SEMAPHORE_TASK_DETAILS_TYPE | build o deploy |
username | SEMAPHORE_TASK_DETAILS_USERNAME | Usuario que inició la tarea |
message | SEMAPHORE_TASK_DETAILS_MESSAGE | Mensaje de la tarea |
target_version | SEMAPHORE_TASK_DETAILS_TARGET_VERSION | Presente en las tareas build |
incoming_version | SEMAPHORE_TASK_DETAILS_INCOMING_VERSION | Presente en las tareas deploy |
Ejemplo para Bash:
echo "$SEMAPHORE_TASK_DETAILS_TYPE"
echo "$SEMAPHORE_TASK_DETAILS_TARGET_VERSION"
Ejemplo para PowerShell:
$env:SEMAPHORE_TASK_DETAILS_TYPE
$env:SEMAPHORE_TASK_DETAILS_INCOMING_VERSION
Ejemplo 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")
Build
Este tipo de tarea se usa para crear artefactos. Cada tarea de build tiene una versión generada automáticamente. Debe usar la variable semaphore_vars.task_details.target_version en su playbook de Ansible para saber qué versión del artefacto debe crearse. Una vez creado el artefacto, puede usarse para el despliegue.
Ejemplo de rol de Ansible para build:
- Obtener el código fuente de la aplicación desde GitHub
- Compilar el código fuente
- Empaquetar el binario generado en un tarball con el nombre
app-{{semaphore_vars.task_details.target_version}}.tar.gz - Enviar
app-{{semaphore_vars.task_details.target_version}}.tar.gza un bucket de S3
Deploy
Este tipo de tarea se usa para desplegar artefactos en los servidores de destino. Cada tarea de despliegue está asociada a una tarea de build. Debe usar la variable semaphore_vars.task_details.incoming_version en su playbook de Ansible para saber qué versión del artefacto debe desplegarse.
Ejemplo de rol de Ansible para deploy:
- Descargar
app-{{semaphore_vars.task_details.incoming_version}}.tar.gzdesde un bucket de S3 a los servidores de destino - Desempaquetar
app-{{semaphore_vars.task_details.incoming_version}}.tar.gzen el directorio de destino - Crear o actualizar los archivos de configuración
- Reiniciar el servicio de la aplicación