프롬프트
프롬프트는 각 템플릿 유형에 특화된 미리 정의된 플래그와 옵션으로, 이를 활성화하면 실행 시점에 사용자 지정이 가능합니다. 직접 만드는 사용자 정의 필드인 설문 변수와 달리, 프롬프트는 Ansible, Terraform 및 기타 도구의 특정 CLI 플래그에 대응하는 내장 옵션입 니다.
이 기능을 통해 다음을 수행할 수 있습니다:
- 실행 시점에 템플릿 기본값 재정의
- 특정 호스트 또는 리소스 대상 지정
- CLI 플래그로 실행 동작 제어
- API 호출 또는 스케줄을 통한 실행 옵션 전달
프롬프트와 설문 변수 비교
| 기능 | 프롬프트 | 설문 변수 |
|---|---|---|
| 정의 | 미리 정의된 템플릿별 옵션 | 직접 만드는 사용자 정의 필드 |
| 예시 | Ansible: --limit, --tagsTerraform: 워크스페이스, -destroy | 환경 이름, 버전 번호, 사용자 정의 파라미터 |
| 설정 방법 | 템플릿의 체크박스로 활성화 | 템플릿 설정에서 이름과 유형을 지정하여 추가 |
| 전달 방식 | 내장 CLI 플래그 | Ansible: --extra-varsTerraform: -var |
프롬프트는 특정 도구를 위해 Semaphore에 내장된 표준화된 옵션이며, 설문 변수는 직접 정의하는 유연한 사용자 정의 필드입니다.
Ansible 프롬프트
Ansible playbook 템플릿에서는 다음 CLI 옵션에 대한 프롬프트를 활성화할 수 있습니다:
Limit
playbook 실행 시 대상 호스트를 지정하려면 --limit 프롬프트를 활성화합니다.
CLI 대응 명령: ansible-playbook playbook.yml --limit webservers
활용 사례:
- 인벤토리 호스트의 일부에서만 playbook 실행
- 배포 대상 서버 지정
- 전체 배포 전에 단일 호스트에서 변경 사항 테스트
예시:
- 인벤토리에 웹 서버 50대가 있습니다
- Limit 프롬프트를 활성화합니다
- 작업 실행 시
web-01.example.com을 지정하면 해당 서버만 대상으로 합니다 - 또는
webservers:&production을 지정하면 프로덕션 웹 서버를 대상으로 합니다
Tags
특정 태그가 지정된 작업만 실행하려면 --tags 프롬프트를 활성화합니다.
CLI 대응 명령: ansible-playbook playbook.yml --tags deploy,restart
활용 사례:
- playbook의 특정 부분만 실행
- 구성 작업 없이 배포 단계만 실행
- 전체 playbook을 실행하지 않고 서비스만 빠르게 재시작
예시:
---
- hosts: all
tasks:
- name: Install packages
apt:
name: nginx
tags: install
- name: Deploy application
copy:
src: app.tar.gz
dest: /opt/app/
tags: deploy
- name: Restart service
service:
name: nginx
state: restarted
tags: restart
Tags 프롬프트를 활성화하고 deploy,restart를 입력하면 설치 단계를 건너뜁니다.
Skip Tags
특정 태그가 지정된 작업을 건너뛰려면 --skip-tags 프롬프트를 활성화합니다.
CLI 대응 명령: ansible-playbook playbook.yml --skip-tags testing,debug
활용 사례:
- 프로덕션에서 선택적 작업 건너뛰기
- 디버그 또는 테스트 작업 제외
- 필요하지 않을 때 시간이 오래 걸리는 작업 생략
예시: 위 playbook에서 Skip Tags를 활성화하고 install을 입력하면 패키지 설치를 건너뛰고 배포와 재시작 작업만 실행합니다.
Skip Galaxy install
이 프롬프트를 활성화하면 작업 실행 시 사용자가 역할과 컬렉션에 대한 ansible-galaxy install 단계를 건너뛸 수 있습니다.
활용 사례:
- 요구 사항이 러너 이미지에 이미 설치되어 있는 경우
requirements.yml에 변경 사항이 없을 때 반복 실행 시간 절약
Force Galaxy install
이 프롬프트를 활성화하면 사용자가 Semaphore가 실행 간에 보관하는 요구 사항 체크섬을 무시하고 모든 요구 사항 파일에 대해 ansible-galaxy install --force를 강제로 실행할 수 있습니다.
CLI 대응 명령: ansible-galaxy role install -r requirements.yml --force
활용 사례:
- 요구 사항 파일이 고정된 버전이 아닌 브랜치를 참조하고 있어 최신 커밋이 필요한 경우
- 이전 설치로 인해 역할이나 컬렉션이 손상된 상태로 남은 경우
- playbook이 깨끗한 의존성 집합에서 정상 동작하는지 검증하려는 경우
템플릿 수준의 기본값이 어떻게 동작하는지는 Galaxy 요구 사항을 참고하십시오.
Ansible 프롬프트 활성화
Ansible 프롬프트를 활성화하는 방법:
- Task Templates로 이동하여 Ansible 템플릿을 선택합니다
- 템플릿 설정에서 Ansible Prompts 섹션을 찾습니다
- 사용할 프롬프트의 체크박스를 활성화합니다:
- ☐ Limit -
--limit플래그 활성화 - ☐ Tags -
--tags플래그 활성화 - ☐ Skip Tags -
--skip-tags플래그 활성화 - ☐ Debug - 상세 출력 수준(
-v) 선택 활성화 - ☐ Skip Galaxy install -
ansible-galaxy install건너뛰기 허용 - ☐ Force Galaxy install -
ansible-galaxy install --force강제 실행 허용
- ☐ Limit -
- 템플릿을 저장합니다

활성화하면 이 필드들이 작업 실행 양식, API 요청, 스케줄 설정에 표시됩니다.
Terraform/OpenTofu 프롬프트
Terraform 및 OpenTofu 템플릿의 경우 Semaphore는 몇 가지 내장 프롬프트를 제공합니다:
워크스페이스 선택
작업 실행에 사용할 Terraform 워크스페이스를 선택합니다.
CLI 대응 명령: terraform workspace select staging
활용 사례:
- 여러 환경(dev, staging, production) 관리
- 구성별로 상태 파일 분리
- 인프라 변경 사항을 독립된 환경에서 테스트
설정 방법:
- 템플릿의 Workspaces 탭에서 워크스페이스를 생성합니다
- 작업 양식에 워크스페이스 선택기가 자동으로 표시됩니다
- 사용자가 작업을 실행할 때 대상 워크스페이스를 선택합니다
자세한 설정 방법은 Terraform 워크스페이스를 참고하십시오.
Destroy 플래그
인프라를 제거하려면 -destroy 플래그를 활성화합니다.
CLI 대응 명령: terraform apply -destroy
활용 사례:
- 임시 테스트 환경 정리
- 인프라 폐기
- 특정 리소스 제거
중요: 이는 파괴적인 작업입니다. 주의해서 사용하고 워크플로우에서 확인 단계를 요구하는 것을 고려하십시오.
Migrate State 플래그
백엔드 구성을 변경할 때 -migrate-state 플래그를 활성화합니다.
CLI 대응 명령: terraform init -migrate-state
활용 사례:
- 상태를 다른 백엔드로 이동
- 스토리지 위치 간 마이그레이션
- 백엔드 구성 업데이트
Terraform 프롬프트 활성화
Terraform 프롬프트는 템플릿 설정에서 사용할 수 있습니다:
- Task Templates로 이동하여 Terraform 템플릿을 선택합니다
- 템플릿 설정에서 사용 가능한 프롬프트를 구성합니다:
- 워크스페이스 선택(워크스페이스가 구성되어 있으면 자동으로 활성화됨)
- Destroy 플래그 옵션
- Migrate state 옵션
- 템플릿을 저장합니다
Terraform 작업을 실행할 때 작업 양식에 이 옵션들이 표시됩니다.
Bash, PowerShell, Python 프롬프트
Bash, PowerShell, Python 템플릿의 경우 대부분의 사용자 지정이 설문 변수를 통해 처 리되므로 프롬프트는 최소한으로 제공됩니다.
사용 가능한 프롬프트는 다음과 같습니다:
- CLI args
- Branch
이러한 템플릿 유형은 스크립트에 파라미터를 전달할 때 사용자 정의 설문 변수를 사용하는 것이 더 유리합니다.
프롬프트 사용
수동 작업 실행
프롬프트가 활성화된 템플릿에서 작업을 실행할 때:
- 템플릿에서 Run을 클릭합니다
- 활성화된 프롬프트 필드가 있는 양식이 표시됩니다
- 사용할 프롬프트의 값을 입력합니다(선택적 필드는 비워 둘 수 있습니다)
- Run Task를 클릭합니다
지정한 프롬프트 값이 CLI 플래그로 전달되어 작업이 실행됩니다.
API 호출
API를 통해 프롬프트 값을 전달하려면 요청 페이로드에 포함하십시오:
Ansible 예시:
curl -XPOST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-d '{
"template_id": 123,
"limit": "webservers",
"tags": "deploy,restart",
"skip_tags": "testing"
}' \
https://your-semaphore.com/api/project/1/tasks
중요: 값이 적용되려면 해당 프롬프트가 템플릿에서 활성화되어 있어야 합니다. 프롬프트를 활성화하지 않고 API로 값을 전달하면 해당 값은 무시됩니다.
스케줄된 작업
스케줄에 프롬프트 값을 포함하여 자동 실행되는 작업을 사용자 지정할 수 있습니다:
예시: Ansible 프롬프트가 포함된 스케줄
limit: "production"및tags: "deploy"를 사용한 일일 배포 스케줄tags: "updates,cleanup"을 사용한 주간 유지 관리 스케줄
각 스케줄 실행이 지정된 옵션을 사용하도록 스케줄 설정에서 프롬프 트 값을 구성하십시오.
통합 및 웹훅
통합은 웹훅에서 값을 추출하여 프롬프트에 매핑할 수 있습니다:
예시: GitHub 웹훅으로 배포 트리거
- 웹훅에서 브랜치 이름 추출
- 특정 환경을 대상으로 하도록 Limit 프롬프트에 매핑
- 브랜치 환경과 일치하는 서버에만 배포
웹훅 구성은 통합을 참고하십시오.
모범 사례
필요한 프롬프트만 활성화
활성화된 프롬프트마다 작업 양식에 필드가 하나씩 추가됩니다. 사용자가 실제로 사용자 지정해야 하는 프롬프트만 활성화하십시오.
✅ 권장: 특정 호스트를 대상으로 지정해야 하는 운영 팀을 위해 Limit 활성화 ❌ 비권장: "만약을 위해" 모든 프롬프트 활성화
설문 변수와 함께 사용
도구별 CLI 옵션에는 프롬프트를 사용하고, 사용자 정의 파라미터에는 설문 변수를 사용하십시오:
Ansible 템플릿 예시:
- 프롬프트: Limit(대상 호스트), Tags(실행할 작업)
- 설문 변수:
app_version(배포할 버전),enable_rollback(사용자 정의 로직)
API 사용법 문서화
템플릿을 API로 트리거하는 경우 사용 가능한 프롬프트와 기대되는 형식을 문서화하십시오:
## API Usage
Enabled prompts:
- `limit`: Host pattern (optional)
- `tags`: Comma-separated tag list (optional)
Example:
POST /api/project/1/tasks
{
"template_id": 123,
"limit": "webservers:&production",
"tags": "deploy"
}
안전한 테스트를 위해 Limit 사용
파괴적일 수 있는 playbook은 항상 Limit 프롬프트로 먼저 테스트하십시오:
- 템플릿에서 Limit 프롬프트를 활성화합니다
- 첫 번째 실행:
limit: "test-server-01"을 지정하여 호스트 한 대에서 테스트합니다 - 성공 여부를 확인합니다
- 두 번째 실행:
limit: "production"을 지정하여 모든 호스트로 배포합니다
프롬프트 조합 검증
일부 프롬프트 조합은 의미가 없을 수 있습니다. 문서화하거나 검증을 추가하십시오:
--tags deploy와--skip-tags deploy를 함께 사용하면 충돌합니다- 워크스페이스와 destroy 플래그를 함께 지정할 때는 각별히 주의해야 합니다
일반적인 활용 사례
Limit를 사용한 점진적 배포
Ansible Limit를 사용하여 프로덕션에 점진적으로 배포합니다:
- 1차 실행:
limit: "web-01.example.com"- 서버 한 대에 배포 - 문제 발생 여부 모니터링
- 2차 실행:
limit: "webservers:&canary"- 카나리 서버에 배포 - 지표 검증
- 3차 실행:
limit: "webservers:&production"- 전체 배포
Tags를 사용한 선택적 실행
Tags를 사용하여 playbook의 특정 부분만 실행합니다:
오전: tags: "deploy" - 새 버전 배포
오후: tags: "config" - 구성 업데이트
저녁: tags: "restart" - 새 구성으로 서비스 재시작
워크스페이스를 사용한 환경 관리
Terraform 워크스페이스 선택을 사용하여 환경을 관리합니다:
- 개발:
dev워크스페이스 선택 - 저렴한 리소스, 빠른 반복 - 스테이징:
staging워크스페이스 선택 - 테스트를 위한 프로덕션 유사 환경 - 프로덕션:
prod워크스페이스 선택 - 완전한 프로덕션 인프라
Destroy를 사용한 정리
임시 인프라에는 Terraform destroy를 사용합니다:
- 테스트 환경 생성:
test-branch-123워크스페이스로 실행 - 통합 테스트 실행
- 정리: destroy 플래그를 활성화하고
test-branch-123워크스페이스로 실행
문제 해결
프롬프트 값이 무시됨
문제: 프롬프트 값을 전달했지만 적용되지 않습니다
해결 방법: 해당 프롬프트가 템플릿 설정에서 활성화되어 있는지 확인하십시오. 프롬프트는 명시적으로 활성화해야 합니다.
limit을 지정할 수 없음
문제: 작업 양식에 Limit 필드가 표시되지 않습니다
해결 방법:
- 템플릿을 편집합니다
- "Ansible Prompts" 섹션을 찾습니다
- "Limit" 체크박스를 활성화합니다
- 템플릿을 저장합니다
프롬프트 값이 포함된 API 호출이 실패함
문제: 프롬프트 값이 포함된 API 요청이 오류를 반환합니다
해결 방법:
- 템플릿에서 프롬프트가 활성화되어 있는지 확인합니다
- 요청 본문의 JSON 형식을 확인합니다
- 필드 이름이 정확히 일치하는지 확인합니다(
host_limit이 아니라limit)
태그가 작업을 필터링하지 않음
문제: 태그를 지정했는데도 모든 작업이 실행됩니다
해결 방법:
- playbook의 작업에 태그가 올바르게 정의되어 있는지 확인합니다
- 태그 이름에 오타가 없는지 확인합니다
- 태그가 공백 없이 쉼표로 구분되어 있는지 확인합니다(
deploy, restart가 아니라deploy,restart)
관련 문서
- 설문 변수 - 템플릿의 사용자 정의 필드
- Ansible 템플릿 - Ansible 전용 구성
- Terraform 템플릿 - Terraform 전용 구성
- 스케줄 - 작업 자동 실행
- 통합 - 웹훅으로 트 리거되는 작업
- API 문서 - API 레퍼런스