이 문서에서는 GitHub Actions 워크플로우에서 Autify Nexus API를 사용하여 테스트 플랜을 실행하는 방법을 설명합니다.
사전 준비사항
연동을 설정하려면 아래 정보가 필요합니다:
Nexus 서버 URL (예: https://1234.cloud.autify.com)
테스트 플랜 이름
Autify Nexus API 토큰 (Client secret)
1단계: GitHub Secrets에 API 토큰 저장하기
먼저, Obtain the client secret 문서를 참고하여 API 토큰을 발급받습니다.
발급받은 API 토큰은 GitHub Actions의 Secrets에 저장합니다.
GitHub 저장소의 Settings 탭으로 이동합니다.
왼쪽 메뉴에서 Secrets and variables > Actions 를 선택합니다.
New repository secret 을 클릭합니다.
Name 필드에 시크릿 이름(예: AUTIFY_NEXUS_API_TOKEN)을 입력합니다.
Secret 필드에 Autify Nexus에서 발급받은 API 토큰을 입력합니다.
Add secret 을 클릭합니다.
2단계: GitHub Actions 워크플로우 생성하기
다음으로, 테스트 플랜 실행 스텝을 포함한 워크플로우(YAML) 파일을 생성합니다.
저장소의 .github/workflows/ 디렉토리에 새로운 YAML 파일(예: run-autify-nexus.yml)을 생성합니다.
워크플로우 트리거(예: on: push 또는 on: workflow_dispatch)를 정의합니다.
jobs 섹션을 정의하고 steps를 설정합니다.
run 스텝에서 API 실행 스크립트를 추가합니다.
아래 예제를 참고하세요.
샘플 1: 테스트 플랜 실행 (테스트 완료를 기다리지 않음)
이 스크립트는 Autify Nexus 테스트 플랜을 실행 요청만 보내며, 완료될 때까지 기다리지 않습니다.
name: Run Autify Nexus Test Plan (No Wait)
on:
workflow_dispatch: # 수동 실행 허용
jobs:
run-nexus-test:
runs-on: ubuntu-latest
steps:
- name: Run Autify Nexus Test Plan (No Wait)
env:
AUTIFY_NEXUS_API_TOKEN: ${{ secrets.AUTIFY_NEXUS_API_TOKEN }}
# 아래 값을 환경에 맞게 변경하세요
SERVER_URL: "https://<your-nexus-server>"
TEST_PLAN_NAME: "<your-test-plan-name>"
run: |
set -euo pipefail
echo "Starting Autify Nexus test run..."
AUTH_HEADER="Authorization: Bearer ${AUTIFY_NEXUS_API_TOKEN}"
ACCEPT_HEADER='Accept: application/json'
# 워크스페이스 ID 조회
ws_res=$(curl --silent --show-error \
--url "${SERVER_URL}/nexus/api/workspaces" \
--header "$AUTH_HEADER" \
--header "$ACCEPT_HEADER")
WORKSPACE_ID=$(echo "$ws_res" | jq -r '.[0].id')
if [ -z "${WORKSPACE_ID:-}" ] || [ "${WORKSPACE_ID}" = "null" ]; then
echo "❌ 워크스페이스를 찾을 수 없습니다. Response:"
echo "$ws_res"
exit 1
fi
echo "✅ Workspace ID: ${WORKSPACE_ID}"
# 테스트 플랜 ID 조회
tp_res=$(curl --silent --show-error \
--url "${SERVER_URL}/nexus/api/workspaces/${WORKSPACE_ID}/testPlans" \
--header "$AUTH_HEADER" \
--header "$ACCEPT_HEADER")
TEST_PLAN_ID=$(echo "$tp_res" | jq -r --arg NAME "$TEST_PLAN_NAME" '.[] | select(.name == $NAME) | .id')
if [ -z "${TEST_PLAN_ID:-}" ] || [ "${TEST_PLAN_ID}" = "null" ]; then
echo "❌ 테스트 플랜 '${TEST_PLAN_NAME}' 을(를) 찾을 수 없습니다."
echo "$tp_res"
exit 1
fi
echo "✅ Test Plan ID: ${TEST_PLAN_ID}"
# 테스트 플랜 실행 (기다리지 않음)
run_res=$(curl --silent --show-error \
--request POST \
--url "${SERVER_URL}/nexus/api/workspaces/${WORKSPACE_ID}/testPlans/${TEST_PLAN_ID}/run" \
--header "$AUTH_HEADER" \
--header "$ACCEPT_HEADER")
RESULT_ID=$(echo "$run_res" | jq -r '.resultId')
if [ -z "${RESULT_ID:-}" ] || [ "${RESULT_ID}" = "null" ]; then
echo "❌ 테스트 플랜 실행 실패."
echo "$run_res"
exit 1
fi
echo "✅ Test started (No Wait). Result ID: ${RESULT_ID}"
echo "✅ Job completed."샘플 2: 테스트 플랜 실행 후 결과 대기
이 스크립트는 테스트 플랜을 실행한 후, 5초마다 상태를 확인(폴링)하여 테스트 완료를 기다립니다.
최종 상태가 PASSED가 아니면 GitHub Actions 작업은 실패합니다.
name: Run Autify Nexus Test Plan (Wait for Result)
on:
workflow_dispatch: # 수동 실행 허용
jobs:
run-nexus-test:
runs-on: ubuntu-latest
steps:
- name: Run Autify Nexus Test Plan (Wait for Result)
env:
AUTIFY_NEXUS_API_TOKEN: ${{ secrets.AUTIFY_NEXUS_API_TOKEN }}
# 아래 값을 환경에 맞게 변경하세요
SERVER_URL: "https://<your-nexus-server>"
TEST_PLAN_NAME: "<your-test-plan-name>"
run: |
set -euo pipefail
echo "Starting Autify Nexus test run..."
AUTH_HEADER="Authorization: Bearer ${AUTIFY_NEXUS_API_TOKEN}"
ACCEPT_HEADER='Accept: application/json'
# 워크스페이스 ID 조회
ws_res=$(curl --silent --show-error \
--url "${SERVER_URL}/nexus/api/workspaces" \
--header "$AUTH_HEADER" \
--header "$ACCEPT_HEADER")
WORKSPACE_ID=$(echo "$ws_res" | jq -r '.[0].id')
if [ -z "${WORKSPACE_ID:-}" ] || [ "${WORKSPACE_ID}" = "null" ]; then
echo "❌ 워크스페이스를 찾을 수 없습니다. Response:"
echo "$ws_res"
exit 1
fi
echo "✅ Workspace ID: ${WORKSPACE_ID}"
# 테스트 플랜 ID 조회
tp_res=$(curl --silent --show-error \
--url "${SERVER_URL}/nexus/api/workspaces/${WORKSPACE_ID}/testPlans" \
--header "$AUTH_HEADER" \
--header "$ACCEPT_HEADER")
TEST_PLAN_ID=$(echo "$tp_res" | jq -r --arg NAME "$TEST_PLAN_NAME" '.[] | select(.name == $NAME) | .id')
if [ -z "${TEST_PLAN_ID:-}" ] || [ "${TEST_PLAN_ID}" = "null" ]; then
echo "❌ 테스트 플랜 '${TEST_PLAN_NAME}' 을(를) 찾을 수 없습니다."
echo "$tp_res"
exit 1
fi
echo "✅ Test Plan ID: ${TEST_PLAN_ID}"
# 테스트 플랜 실행 (결과 대기)
run_res=$(curl --silent --show-error \
--request POST \
--url "${SERVER_URL}/nexus/api/workspaces/${WORKSPACE_ID}/testPlans/${TEST_PLAN_ID}/run" \
--header "$AUTH_HEADER" \
--header "$ACCEPT_HEADER")
RESULT_ID=$(echo "$run_res" | jq -r '.resultId')
if [ -z "${RESULT_ID:-}" ] || [ "${RESULT_ID}" = "null" ]; then
echo "❌ 테스트 시작 실패."
echo "$run_res"
exit 1
fi
echo "✅ Test started. Result ID: ${RESULT_ID}"
echo "⏳ 테스트 완료 대기 중..."
# 상태 폴링 (QUEUED / RUNNING)
STATUS="QUEUED"
while [ "$STATUS" = "QUEUED" ] || [ "$STATUS" = "RUNNING" ]; do
sleep 5
st_res=$(curl --silent --show-error \
--url "${SERVER_URL}/nexus/api/workspaces/${WORKSPACE_ID}/testResults/${RESULT_ID}/status" \
--header "$AUTH_HEADER" \
--header "$ACCEPT_HEADER")
STATUS=$(echo "$st_res" | jq -r '.status')
if [ -z "${STATUS:-}" ] || [ "$STATUS" = "null" ]; then
echo "❌ 테스트 상태 조회 실패."
echo "$st_res"
exit 1
fi
echo "Current status: $STATUS"
done
echo "Final status: $STATUS"
# Autify Nexus 테스트 결과에 따라 GitHub Actions 작업 실패 처리
if [ "$STATUS" != "PASSED" ]; then
echo "❌ 테스트 실패. 상태: $STATUS"
exit 1
fi
echo "✅ Test PASSED"이 방법은 테스트가 완료될 때까지 기다리는 동안에도 GitHub Actions 호스티드 러너의 실행 시간을 소비합니다.
3단계: 워크플로우 실행 및 결과 확인
워크플로우가(push 또는 수동 실행으로) 트리거되면 GitHub Actions가 실행됩니다.
저장소의 Actions 탭으로 이동합니다.
실행된 워크플로우(예: Run Autify Nexus Test Plan)를 클릭합니다.
작업 이름(예: run-nexus-test)을 클릭하고 실행 단계(Run Autify Nexus Test Plan and Wait 등)를 열어 로그를 확인합니다.
테스트 플랜 실행이 실패하는 경우 다음을 확인하세요:
테스트 플랜에 최소 1개의 클라우드 실행 환경이 설정되어 있는지
테스트 플랜에 최소 1개의 시나리오가 포함되어 있는지