본문으로 건너뛰기

Pipeline

Semaphore는 builddeploy 작업을 사용하는 간단한 pipeline을 지원합니다.

Semaphore는 실행하는 각 Ansible playbook에 semaphore_vars 변수를 전달합니다.

Ansible 작업에서 이 변수를 사용하여 어떤 유형의 작업이 실행되었는지, 어떤 버전을 빌드하거나 배포해야 하는지, 누가 작업을 실행했는지 등을 확인할 수 있습니다.


build 작업의 semaphore_vars 예시:

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

deploy 작업의 semaphore_vars 예시:

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

이 유형의 작업은 아티팩트를 생성하는 데 사용됩니다. 각 build 작업에는 자동 생성된 버전이 있습니다. Ansible playbook에서 semaphore_vars.task_details.target_version 변수를 사용하여 어떤 버전의 아티팩트를 생성해야 하는지 확인해야 합니다. 아티팩트가 생성되면 배포에 사용할 수 있습니다.


build Ansible 역할 예시:

  1. GitHub에서 앱 소스 코드 가져오기
  2. 소스 코드 컴파일
  3. 생성된 바이너리를 app-{{semaphore_vars.task_details.target_version}}.tar.gz라는 이름의 tarball로 묶기
  4. app-{{semaphore_vars.task_details.target_version}}.tar.gz를 S3 버킷으로 전송

Deploy

이 유형의 작업은 아티팩트를 대상 서버에 배포하는 데 사용됩니다. 각 배포 작업은 build 작업과 연결됩니다. Ansible playbook에서 semaphore_vars.task_details.incoming_version 변수를 사용하여 어떤 버전의 아티팩트를 배포해야 하는지 확인해야 합니다.


deploy Ansible 역할 예시:

  1. S3 버킷에서 app-{{semaphore_vars.task_details.incoming_version}}.tar.gz를 대상 서버로 다운로드
  2. app-{{semaphore_vars.task_details.incoming_version}}.tar.gz를 대상 디렉터리에 압축 해제
  3. 구성 파일 생성 또는 업데이트
  4. 앱 서비스 재시작