Jenkins 통합 가이드

Prev Next

이 문서에서는 Autify Nexus와 Jenkins를 연동하는 방법을 설명합니다. 구체적으로는 Jenkins 노드에서 Autify Nexus API를 사용해 테스트 플랜을 실행하는 방법을 이해하는 데 도움이 됩니다.

필수 구성 요소

Autify Nexus에서 다음 정보가 필요합니다.

  • Nexus 서버 URL

  • API 클라이언트 시크릿

  • 테스트 플랜 이름

또한 이 페이지의 코드 예제를 실행하려면 Jenkins 노드에 jq 명령을 설치가 필요합니다.

전제 조건 정보의 자세한 내용은 다음 표를 참고해 주시기 바랍니다.

Nexus 서버 URL

Autify Nexus에 로그인할 때 사용하는 URL입니다. https://1234.cloud.autify.com

API 클라이언트 시크릿

Autify Nexus에서 생성한 API 클라이언트의 클라이언트 시크릿입니다. 자세한 내용은 Autify Nexus API를 참고해 주세요.

테스트 플랜 이름

Jenkins에서 실행할 테스트 플랜의 대/소문자를 구분하는 이름입니다. Autify Nexus에 표시된 것과 완전히 동일해야 합니다.

클라이언트 시크릿을 자격 증명으로 저장하기

클라이언트 시크릿은 Jenkins에 자격 증명으로 저장합니다.

  1. 대시보드 페이지에서 Manage Jenkins를 클릭

Screenshot_2025-04-15_at_10_29_05_2.png

  1. Credentials를 클릭

Screenshot_2025-04-15_at_10_29_33.png

  1. 시크릿을 추가할 도메인을 선택

Screenshot_2025-04-15_at_10_29_54.png

  1. + Add Credentials를 클릭

Screenshot_2025-04-15_at_10_30_24.png

  1. Kind 섹션에서 Secret text 옵션을 선택

  2. Secret 필드에 API 클라이언트 시크릿을 입력

  3. 자격 증명 이름을 ID로 입력(예: AUTIFY_CLIENT_SECRET).

  4. Create를 클릭

Screenshot_2025-04-15_at_15_18_25.png

추가한 자격 증명은 자격 증명 목록에서 확인할 수 있습니다.

Screenshot_2025-04-15_at_16_08_37.png

잡 만들기

  1. 새 잡을 정의하려면 대시보드에서 + New Item을 클릭합니다.

Screenshot_2025-04-15_at_10_29_05.png

  1. 아이템 이름에 잡 이름을 입력

  2. 아이템 타입으로 Freestyle project를 선택

  3. OK를 클릭

Screenshot_2025-04-15_at_10_22_05.png

  1. Build Environment 섹션에서 Use secret text(s) or file(s)에 체크

  2. 앞 섹션에서 추가한 클라이언트 시크릿의 이름을 Variable로 입력

  3. 해당 클라이언트 시크릿 자격 증명을 Credentials 목록에서 선택

Screenshot_2025-04-15_at_16_13_13.png

  1. Build Steps 섹션에서 빌드 단계로 Execute shell 을 선택

Screenshot_2025-04-15_at_10_22_56.png

  1. 코드 입력 필드에 코드를 입력

예를 들어 다음 코드는 이름으로 찾은 테스트 플랜을 실행합니다. 사용 방식에 따라 필요한 정보가 달라질 수 있으니, 상황에 맞게 조정해 주세요.

image.png

# ENV vars
SERVER_URL='https://<your-nexus-server>'
TEST_PLAN_NAME='<your-test-plan-name>'
# WORKSPACE_ID='<your-workspace-id>'  # Optional: specify if you have multiple workspaces

# Set authorization header using API client secret directly
AUTH_HEADER="Authorization: Bearer ${AUTIFY_CLIENT_SECRET}"
ACCEPT_HEADER='Accept: application/json'

# Get workspace ID (use first workspace if not specified)
res=$(
  curl \
    --silent \
    --show-error \
    --url "${SERVER_URL}/nexus/api/workspaces" \
    --header "$AUTH_HEADER" \
    --header "$ACCEPT_HEADER"
)

if [ -z "${WORKSPACE_ID:-}" ]; then
  WORKSPACE_ID=$(echo "$res" | jq -r '.[0].id')
fi

if [ -z "$WORKSPACE_ID" ] || [ "$WORKSPACE_ID" = "null" ]; then
  echo "Workspace not found. Response: ${res}"
  exit 1
fi

echo "Workspace ID: ${WORKSPACE_ID}"

# Get test plan ID
res=$(
  curl \
    --silent \
    --show-error \
    --url "${SERVER_URL}/nexus/api/workspaces/${WORKSPACE_ID}/testPlans" \
    --header "$AUTH_HEADER" \
    --header "$ACCEPT_HEADER"
)
TEST_PLAN_ID=$(echo "$res" | jq -r --arg NAME "$TEST_PLAN_NAME" '.[] | select(.name == $NAME) | .id')

if [ -z "$TEST_PLAN_ID" ]; then
  echo "Test plan '${TEST_PLAN_NAME}' not found. Response: ${res}"
  exit 1
fi

echo "Test plan ID for '${TEST_PLAN_NAME}': ${TEST_PLAN_ID}"

# Run the test plan
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 "$res" | jq -r '.resultId')

if [ "$RESULT_ID" = "null" ]; then
  echo "Failed to start test plan. Response: ${res}"
  exit 1
fi

echo "Test started. Result ID: ${RESULT_ID}"
echo "Waiting for test to complete..."

# Polling for result status
STATUS="QUEUED"
while [ "$STATUS" = "QUEUED" ] || [ "$STATUS" = "RUNNING" ]; do
  sleep 5
  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 "$res" | jq -r '.status')

  if [ "$STATUS" = "null" ]; then
    echo "Failed to fetch result status. Response: ${res}"
    exit 1
  fi

  echo "Current status: $STATUS"
done

echo "Final status: $STATUS"
  1. Save를 클릭해서 잡 등록을 완료합니다.

잡을 실행해서 동작을 확인하기

잡을 정의한 후에는 잡이 기대한 대로 동작하는지 확인합니다.

  1. 대시보드에서 잡 이름을 클릭

image.png

  1. Build Now를 클릭해서 잡을 시작

image.png

빌드 상태는 페이지 왼쪽에 표시됩니다

  1. Builds 창에서 맨 위 항목을 클릭.

image.png

출력은 Console Output을 클릭하여 볼 수 있습니다.

image.png


이 예시의 로그 "Final status: PASSED"는 Autify Nexus의 테스트 결과를 나타냅니다. "PASSED"는 테스트 결과가 성공했음을 의미 합니다. 테스트 결과가 실패하면 "FAILED"로 표시됩니다.

로그 "Finished: SUCCESS"는 로그의 마지막 줄에 표시됩니다. 이는 Autify Nexus API와 통신하는 동안 오류 없이 잡이 종료되었음을 의미합니다. 이 상태는 Autify Nexus에서의 테스트 결과가 성공했음을 의미하는 것은 아닙니다.

image.png