본문으로 건너뛰기

빌드 및 배포 템플릿

일반적인 Task 템플릿 외에도 Semaphore에는 간단한 파이프라인을 구성하는 두 가지 템플릿 유형이 있습니다. Build는 버전이 지정된 아티팩트를 생성하고, Deploy는 선택한 버전을 서버로 전달합니다. 두 유형 모두 템플릿 양식에서 선택하며, 사용자가 작업을 시작할 때 보이는 화면이 달라집니다.

빌드 템플릿​

빌드 템플릿은 tarball, 컨테이너 이미지, 패키지와 같은 아티팩트를 생성합니다. 모든 빌드 작업에는 템플릿의 Start Version(예: 1.0.0)부터 시작하여 자동으로 증가하는 버전이 부여됩니다. 이 버전은 템플릿 목록과 작업 이력의 Version 열에 표시됩니다.

빌드 템플릿의 새 작업 대화 상자

playbook에서 semaphore_vars.task_details.target_version을 통해 이 버전을 사용하여 아티팩트 이름을 지정하십시오.

배포 템플릿​

배포 템플릿은 Build Template 필드를 통해 빌드 템플릿과 연결됩니다. 사용자가 Deploy를 클릭하면 새 작업 대화 상자에서 배포할 Build Version을 묻습니다. 가장 최근에 성공한 빌드가 미리 선택됩니다.

배포 템플릿의 새 작업 대화 상자

배포 템플릿에서 Autorun을 활성화하면 빌드가 성공할 때마다 배포가 자동으로 시작됩니다. 배포할 버전은 playbook에서 semaphore_vars.task_details.incoming_version으로 사용할 수 있습니다.

semaphore_vars 변수​

Semaphore는 실행하는 각 Ansible playbook에 semaphore_vars 변수를 전달합니다. 이 변수를 사용하여 어떤 유형의 작업이 실행되었는지, 어떤 버전을 빌드하거나 배포해야 하는지, 누가 작업을 실행했는지, 그리고 작업 메시지를 확인할 수 있습니다.

build 작업의 예:

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

deploy 작업의 예:

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

Bash, PowerShell, Python 템플릿의 경우 Semaphore는 동일한 task_details 값을 환경 변수로 제공합니다:

task_details 필드환경 변수비고
typeSEMAPHORE_TASK_DETAILS_TYPEbuild 또는 deploy
usernameSEMAPHORE_TASK_DETAILS_USERNAME작업을 시작한 사용자
messageSEMAPHORE_TASK_DETAILS_MESSAGE작업 메시지
target_versionSEMAPHORE_TASK_DETAILS_TARGET_VERSIONbuild 작업에 존재
incoming_versionSEMAPHORE_TASK_DETAILS_INCOMING_VERSIONdeploy 작업에 존재

Bash의 예:

echo "$SEMAPHORE_TASK_DETAILS_TYPE"
echo "$SEMAPHORE_TASK_DETAILS_TARGET_VERSION"

PowerShell의 예:

$env:SEMAPHORE_TASK_DETAILS_TYPE
$env:SEMAPHORE_TASK_DETAILS_INCOMING_VERSION

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 Ansible 역할:

  1. GitHub에서 애플리케이션 소스 코드를 가져옵니다.
  2. 소스 코드를 컴파일합니다.
  3. 바이너리를 app-{{ semaphore_vars.task_details.target_version }}.tar.gz로 패키징합니다.
  4. tarball을 S3 버킷에 업로드합니다.

deploy Ansible 역할:

  1. S3 버킷에서 app-{{ semaphore_vars.task_details.incoming_version }}.tar.gz를 대상 서버로 다운로드합니다.
  2. 대상 디렉터리에 압축을 해제합니다.
  3. 구성 파일을 생성하거나 업데이트합니다.
  4. 애플리케이션 서비스를 재시작합니다.

두 단계를 초과하는 연결, 승인 추가, 실패 시 분기가 필요한 경우에는 워크플로우를 사용하십시오.