데브옵스 API

  • 릴리스 버전: Xanadu
  • 업데이트 날짜 2024년 08월 01일
  • 읽기196분
  • DevOps API는 외부 DevOps 도구와의 상호작용을 가능하게 하는 엔드포인트를 제공합니다.

    이 REST API를 통해 통합자는 다음을 수행할 수 있습니다.

    • 인스턴스와 연결된 사용 가능한 DevOps 도구를 검색합니다.
    • 코드 자원, 계획 또는 오케스트레이션 자원에 대한 스키마 객체를 검색합니다.
    • 오케스트레이션 작업이 변경 제어 하에 있는지 확인하고 변경 제어 상태를 확인합니다.
    • 콜백을 생성하여 변경 통제 중인 작업 실행과 연결합니다.
    • 정규화된 객체로 변환되고 코드, 오케스트레이션 및 계획 객체로 저장되는 다양한 이벤트 페이로드를 보냅니다.
    • 인코딩된 쿼리와 특정 검색/정렬 기준을 사용하여 커밋, 분기 또는 리포지토리를 검색합니다.
    • 아티팩트 버전 및 패키지를 연결된 파이프라인 실행 및 커밋과 함께 등록합니다.
    • 온보딩 애플리케이션 및 도구 이벤트를 생성하고 관리합니다.

    자세한 내용은 DevOps Config 문서를 참조하십시오.

    v2부터 이 API는 토큰 기반 인증을 지원합니다. 도구 [sn_devops_tool] 테이블에 있는 도구 기록에서 토큰 복사 버튼을 클릭하여 토큰을 얻을 수 있습니다. 그런 다음 토큰을 Authorization: sn_devops 형식의 권한 부여 헤더에서 사용할 수 있습니다. DevOpsToken <tool_sys_id>:<tool_token>입니다.
    주:
    토큰이 있는 인증 헤더 외에 기본 인증 세부 정보(사용자 이름 및 암호)가 제공되면 기본 인증이 우선합니다.

    인스턴스에서 devops.system 사용자를 사용할 수 없는 경우 토큰 기반 인증이 성공한 후 이 사용자로 전환 속성을 사용합니다. 이 속성을 사용하면 토큰 인증을 완료하는 데 필요한 sn_devops.integration 역할을 가진 모든 사용자를 설정할 수 있습니다. 자세한 내용은 DevOps Change Velocity properties 문서를 참조하십시오.

    DevOps - GET /devops/code/schema

    지정된 코드 자원(커밋, 리포지토리 또는 분기)에 대한 스키마 객체를 반환합니다.

    필요한 스키마 개체가 있으면 이를 사용하여 해당 POST 호출에 대한 요청 본문을 만듭니다. POST /code/commit, POST /code/repository 또는 POST /code/branch.

    주:
    이 엔드포인트는 필요한 요청 본문 요소만 반환합니다.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/code/schema

    기본 URL: /api/sn_devops/devops/code/schema

    지원되는 요청 매개변수

    표 1. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 2. 쿼리 매개변수
    이름 설명
    resource 필수 반환할 자원 스키마의 유형입니다.

    유효한 값(대소문자 구분 안 함):

    • 커밋
    • 리포지토리
    • 분기

    데이터 유형: 문자열

    표 3. 요청 본문 매개변수(XML 또는 JSON)
    이름 설명
    없음

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 4. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 5. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 6. 상태 코드
    상태 코드 설명
    200 요청이 성공적으로 완료되었습니다.
    401 인증이 잘못되었거나 누락되었습니다.
    500 내부 서버 오류입니다. 요청을 처리하는 동안 예기치 않은 오류가 발생했습니다. 응답에는 오류에 대한 추가 정보가 포함되어 있습니다.

    응답 본문 매개변수

    이름 설명
    분기 코드 커밋이 이루어진 분기에 대한 설명입니다.

    데이터 유형: 객체

    "branch": {
      "name": "String",
      "path": "String"
    }
    branch.name 코드 커밋이 이루어진 분기의 이름입니다.

    데이터 유형: 문자열

    branch.path (분기.경로) 분기의 상대 경로입니다.

    데이터 유형: 문자열

    커밋 커밋에 대한 설명입니다.

    데이터 유형: 배열

    "commits": [
       {
          "committedDate": "String",
          "committer": Object,
          "details": Array,
          "id": "String",
          "url": "String"      
       }
    ]
    commits.committedDate 소스 DevOps 도구에서 코드가 커밋된 날짜/시간입니다.

    데이터 유형: 문자열

    형식: 표준 시간대 오프셋이 있는 ISO 8601

    예: 1970-01-01T08:15:30-05:00

    커밋.커밋터 커밋을 요청한 사람/엔터티에 대한 설명입니다.

    데이터 유형: 객체

    "committer": {
      "email": "String"
    }
    commits.committer.email 커밋을 요청한 사람의 이메일 주소입니다.

    데이터 유형: 문자열

    커밋.세부 정보 커밋에 대한 상세 정보입니다.
    주:
    커밋에 세부 정보를 포함하는 것은 필수가 아닙니다. 이 엔드포인트는 커밋에 포함되지 않은 경우 세부 정보를 위해 빈 배열을 반환합니다.

    데이터 유형: 배열

    "details": [
       {
          "action": "String",
          "additions": Number,
          "changes": Number,
          "deletions": Number,
          "file": "String",
          "totalChanges": Number
       }
    ]
    commits.details.action 파일에서 수행된 작업입니다.

    데이터 유형: 문자열

    커밋.세부 정보.추가 파일에 추가된 총 개수입니다.

    데이터 유형: 숫자

    커밋.세부 정보.변경 사항 변경된 총 수입니다.

    데이터 유형: 숫자

    커밋.세부 정보.삭제 파일의 총 삭제 수입니다.

    데이터 유형: 숫자

    커밋.세부 정보.파일 분기를 기준으로 수정된 파일의 경로입니다.

    데이터 유형: 문자열

    commits.details.totalChanges 총 추가 및 삭제 수입니다.

    데이터 유형: 숫자

    commits.id 소스 플랫폼 식별자 또는 커밋 SHA입니다.

    데이터 유형: 문자열

    커밋.url "https://github.com/mycompany/mobileplatform/commit/3fa85f6457174562b3fc2c963f66afa6"와 같은 커밋의 URL입니다.

    데이터 유형: 문자열

    이름 분기 또는 리포지토리의 이름(예: "마스터" 또는 "플랫폼-모바일")입니다.

    데이터 유형: 문자열

    path 분기의 상대 경로입니다.

    데이터 유형: 문자열

    리포지토리 커밋이 만들어진 리포지토리에 대한 설명입니다.

    데이터 유형: 객체

    "repository": {
      "name": "String",
      "url": "String"
    }
    repository.name 리포지토리의 이름입니다.

    데이터 유형: 문자열

    리포지토리.url 소스 DevOps 도구의 리포지토리 URL입니다.

    데이터 유형: 문자열

    URL 리포지토리의 URL(예: "https://github.com/mycompany/mobileplatform")입니다.

    데이터 유형: 문자열

    resource=branch에 대한 샘플 cURL 요청

    curl "https://instance.servicenow.com/api/sn_devops/v1/devops/code/schema?resource=branch" \
    --request GET \
    --header "Accept:application/json" \
    --user "username":"password"
    
    {
       "result": {
          "name": "Master",
          "path": "refs/heads/master",
          "repository": {
             "name": "Platform-Mobile",
             "url": "https://github.com/mycompany/mobileplatform"
          }
       }
    }

    resource=commit에 대한 샘플 cURL 요청

    curl "https://instance.servicenow.com/api/sn_devops/v1/devops/code/schema?resource=commit" \
    --request GET \
    --header "Accept:application/json" \
    --user "username":"password"
    
    {
       "result": {
          "repository": {
             "name": "Platform-Mobile",
             "url": "https://github.com/mycompany/mobileplatform"
          },
          "branch": {
             "name": "refs/heads/master"
          },
          "commits": [
             {
                "committer": {
                   "email": "name@email.com"
                },
                "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                "url": "https://github.com/mycompany/mobileplatform/commit/3fa85f6457174562b3fc2c963f66afa6",
                "committedDate": "2022-01-01T08:15:30-05:00",
                "details": [
                   {
                      "action": "edit",
                      "changes": "",
                      "file": "/azure-pipelines.yml",
                      "additions": 1,
                      "deletions": 0,
                      "totalChanges": 1
                   }
                ]
             }
          ]
       }
    }

    resource=repository에 대한 샘플 cURL 요청

    curl "https://instance.servicenow.com/api/sn_devops/v1/devops/code/schema?resource=repository" \
    --request GET \
    --header "Accept:application/json" \
    --user "username":"password"
    
    {
        "result": {
            "name": "Platform-Mobile",
            "url": "https://github.com/mycompany/mobileplatform"
        }
    }

    DevOps - GET /devops/onboarding/status

    서비스에 의해 비동기적으로 처리되거나 처리 중인 지정된 온보딩 이벤트의 DevOps 현재 상태를 반환합니다.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/onboarding/status

    기본 URL: /api/sn_devops/devops/onboarding/status

    지원되는 요청 매개변수

    표 7. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 8. 쿼리 매개변수
    이름 설명
    id 상태가 반환되는 온보딩 이벤트의 고유 식별자입니다. 이 값은 이벤트 요청을 호출한 엔드포인트( 예: /devops/onboarding/app 또는 /devops/onboarding/tool)의 반환 결과에 제공됩니다.

    데이터 유형: 문자열

    표 9. 요청 본문 매개변수
    이름 설명
    없음

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 10. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 11. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 12. 상태 코드
    상태 코드 설명
    200 성공입니다. 요청이 성공적으로 처리되었습니다.
    202 보류 중 - 온보딩 요청이 생성되었으며 DevOps 서비스에서 요청을 처리 중입니다.
    207 부분 성공 - 온보딩 요청이 생성되었으며 DevOps 서비스에서 요청을 처리합니다.
    400 실패 - 온보딩 이벤트가 실패했습니다.
    404 실패 - 엔드포인트가 지정된 이벤트 ID와 일치하는 요청을 찾지 못했습니다.

    응답 본문 매개변수

    이름 설명
    결과 온보딩 요청의 결과입니다.
    데이터 유형: 객체
    "result": {
      "code": "String",
      "importRequestsSysIds": "[Array],
      "messageDetails": {Object],
      "onboardingRequestID": "String",
      "status": "String"
    }
    결과.코드 HTTP 상태 코드입니다.

    데이터 유형: 문자열

    result.importRequestsSysIds 온보딩 요청의 일부로 생성된 임포트 요청 목록입니다.

    데이터 형식: 문자열 배열

    result.messageDetails 온보딩 이벤트 진행률에 대한 상세 정보입니다.
    데이터 유형: 객체
    "messageDetails": {
      "apps": [Array],
      "pipelines": [Array],
      "plans": [Array],
      "repositories": [Array],
      "status": "String",
      "toolResponse": [Array]
    }
    result.messageDetails.apps 연결된 ServiceNow 인스턴스 내에서 만들 앱을 정의하는 객체의 배열입니다.

    데이터 유형: 배열

    "apps": [{
      "appId": "String",
      "message": "String",
      "name": "String",
      "status": "String",
    }]
    result.messageDetails.apps.appId 애플리케이션이 온보딩될 때 생성된 애플리케이션의 Sys_id입니다. 앱 [sn_devops_app] 테이블에 있습니다.

    데이터 유형: 문자열

    result.messageDetails.apps.message 애플리케이션 온보딩의 상태를 설명하는 메시지입니다.

    데이터 유형: 문자열

    result.messageDetails.apps.name 온보딩 중인 애플리케이션의 이름입니다.

    데이터 유형: 문자열

    result.messageDetails.apps.status 애플리케이션 온보딩의 현재 상태입니다.
    가능한 값:
    • 실패함
    • 부분 성공
    • 성공

    데이터 유형: 문자열

    result.messageDetails.pipelines 온보딩 이벤트와 연결된 파이프라인 목록과 해당 상세 정보입니다.

    데이터 유형: 배열

    "pipelines": [{
      "changeStepAssociation": [Array],
      "errors": "String",
      "message": "String",
      "name": "String",
      "status": "String",
    }]
    result.messageDetails.pipelines.changeStepAssociation 온보딩과 연결된 변경 단계를 설명하는 객체의 배열입니다.

    데이터 유형: 배열

    "changeStepAssociation": [{
      "changeStepName": "String",
      "status": "String",
      "summary": "String",
    }]
    result.messageDetails.pipelines.changeStepAssociation.changeStepName 변경 단계의 이름입니다.

    데이터 유형: 문자열

    result.messageDetails.pipelines.changeStepAssociation.status 파이프라인에 대한 변경 단계 연결의 상태입니다.
    가능한 값:
    • 실패함
    • 성공

    데이터 유형: 문자열

    result.messageDetails.pipelines.changeStepAssociation.summary 변경 단계 연결의 상태에 대한 요약입니다.

    데이터 유형: 문자열

    result.messageDetails.pipelines.errors 파이프라인을 연결할 때 탐지된 오류 목록입니다.

    데이터 유형: 배열

    result.messageDetails.pipelines.message 파이프라인 연결의 상태를 설명하는 메시지입니다.

    데이터 유형: 문자열

    result.messageDetails.pipelines.name 파이프라인의 이름입니다.

    데이터 유형: 문자열

    result.messageDetails.pipelines.status 파이프라인 연결의 상태입니다.

    데이터 유형: 문자열

    result.messageDetails.plans 온보딩 이벤트와 연결된 계획 목록 및 해당 상세 정보입니다.

    데이터 유형: 배열

    "plans": [{
      "errors": "String",
      "message": "String",
      "name": "String",
      "status": "String",
    }]
    결과.message상세정보.계획.오류 계획을 연결할 때 탐지된 오류 목록입니다.

    데이터 유형: 배열

    result.messageDetails.plans.message 파이프라인 연결의 상태를 설명하는 메시지입니다.

    데이터 유형: 문자열

    result.messageDetails.plans.name 계획 이름.

    데이터 유형: 문자열

    결과.message상세사항.계획.상태 계획 연결의 상태입니다.

    데이터 유형: 문자열

    result.messageDetails.리포지토리 온보딩 이벤트와 연결된 리포지토리 목록과 해당 상세 정보입니다.

    데이터 유형: 배열

    "repositories": [{
      "configureStatus": {Object}, 
      "name": "String",
      "status": "String",
    }]
    result.messageDetails.repositories.configureStatus 리포지토리의 웹후크 구성 상태에 대한 상세 정보입니다.

    데이터 유형: 객체

    "configureStatus": {
      "message": "String",
      "status": "String",
    }
    result.messageDetails.repositories.configureStatus.message 현재 웹후크 구성 상태를 설명하는 메시지입니다.

    데이터 유형: 문자열

    result.messageDetails.repositories.configureStatus.status 웹후크 구성의 상태입니다.

    데이터 유형: 문자열

    result.messageDetails.repositories.message 현재 리포지토리 연결 상태를 설명하는 메시지입니다.

    데이터 유형: 문자열

    result.messageDetails.repositories.name 리포지토리의 이름입니다.

    데이터 유형: 문자열

    result.messageDetails.repositories.status 리포지토리 연결의 상태입니다.

    데이터 유형: 문자열

    result.messageDetails.status 온보딩 요청의 상태입니다.
    가능한 값:
    • 실패함
    • 부분 성공
    • 성공

    데이터 유형: 문자열

    result.messageDetails.toolResponse 연결된 ServiceNow 인스턴스 내에서 온보딩할 도구를 정의하는 객체의 배열입니다.

    데이터 유형: 배열

    "toolResponse": [{
      "configureStatus": {Object},
      "connectStatus": {Object},
      "createStatus": {Object},
      "discoveryStatus": {Object},
      "name": "String",
      "status": "String",
      "type": "String"
    }]
    result.messageDetails.toolResponse.configureStatus 도구의 구성 상태를 설명합니다. 성공 status 하면 및 message. 오류가 status 발생하면 및 error.

    데이터 유형: 객체

    "configureStatus": {
      "error": "String",
      "message": "String",
      "status": "String"
    }
    result.messageDetails.toolResponse.configureStatus.error 공구를 구성하는 동안 오류가 감지되었습니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.configureStatus.message 도구 구성의 성공 상태를 설명하는 메시지입니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.configureStatus.status 도구 구성의 상태입니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.connectStatus 도구의 연결 상태를 설명합니다. 성공 status 하면 및 message. 오류가 status 발생하면 및 error.

    데이터 유형: 객체

    "connectStatus": {
      "error": "String",
      "message": "String",
      "status": "String"
    }
    result.messageDetails.toolResponse.connectStatus.error 공구 연결 중 오류가 감지되었습니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.connectStatus.message 도구 연결의 성공 상태를 설명하는 메시지입니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.connectStatus.status 도구 연결 상태입니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.createStatus 도구의 생성 상태를 설명합니다. 성공 status 하면 및 message. 오류가 status 발생하면 및 error.

    데이터 유형: 객체

    "createStatus": {
      "error": "String",
      "message": "String",
      "status": "String"
    }
    result.messageDetails.toolResponse.createStatus.error 공구를 생성하는 동안 오류가 감지되었습니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.createStatus.message 도구 생성의 성공 상태를 설명하는 메시지입니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.createStatus.status 도구 생성의 상태입니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.discoveryStatus 도구의 검색 상태를 설명합니다. 성공 status 하면 및 message. 오류가 status 발생하면 및 error.

    데이터 유형: 객체

    "discoveryStatus": {
      "error": "String",
      "imports: [Array],
      "message": "String",
      "status": "String"
    }
    result.messageDetails.toolResponse.discoveryStatus.error 도구 검색 중 오류가 탐지되었습니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.discoveryStatus.imports 검색된 각 엔터티를 설명하는 객체의 배열입니다.

    데이터 유형: 배열

    "imports": [{
      "details": "String",
      "id": "String",
      "status": "String"
    }]
    result.messageDetails.toolResponse.discoveryStatus.imports.details 수행된 임포트를 설명하는 상세 정보입니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.discoveryStatus.imports.id 임포트 요청의 Sys_id입니다. sn_devops_m2m_inbound_event_import_request 테이블에 있습니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.discoveryStatus.imports.status 임포트의 상태입니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.discoveryStatus.message 도구 검색의 상태를 설명하는 메시지입니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.discoveryStatus.status 도구 검색의 상태입니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.name 온보딩 중인 도구의 이름입니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.status 도구 온보딩의 상태입니다.

    데이터 유형: 문자열

    result.messageDetails.toolResponse.type 도구 유형(예: Jira 또는 Jenkins)입니다.

    데이터 유형: 문자열

    result.onboardingRequestID 온보딩 요청의 고유 식별자입니다. /devops/onboarding/status 엔드포인트를 호출할 때 이 값을 사용하여 연결된 도구 온보딩 프로세스의 상태를 가져옵니다.

    데이터 유형: 문자열

    결과.상태 온보딩 요청의 상태입니다.
    가능한 값:
    • 실패함
    • 부분 성공
    • 성공

    데이터 유형: 문자열

    cURL 요청

    다음 예는 도구 온보딩의 상태 요청을 보여줍니다.

    curl -X GET "https://servicenow-instance/api/sn_devops/v1/devops/onboarding/status?id=IBE0001603" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -u "username":"password" \

    {
        "result": {
            "code": "207",
            "onboardingRequestID": "IBE0001603",
            "status": "partial-success",
            "messageDetails": {
                "status": "Partial Success",
                "toolResponse": [
                    {
                        "name": "Primary Azure",
                        "type": "Azure DevOps",
                        "status": "Partial Success",
                        "createStatus": {
                            "status": "Success",
                            "message": "Created successfully"
                        },
                        "connectStatus": {
                            "status": "Failed",
                            "error": "Method failed: (/testFirst/_apis/work/boards) with code: 401 - Invalid username/password combo"
                        }
                    },
                    {
                        "name": "Primary Jenkins",
                        "type": "Jenkins",
                        "status": "Success",
                        "createStatus": {
                            "status": "Success",
                            "message": "Created successfully"
                        },
                        "connectStatus": {
                            "status": "Success",
                            "message": "Connected successfully"
                        },
                        "discoveryStatus": {
                            "status": "Success",
                            "message": "Discovered successfully",
                            "imports": [
                                {
                                    "status": "completed",
                                    "id": "2a4d216bdb2d2450fe4fd6a75e9619c3",
                                    "details": "Discovered 1 new job(s) and 3 new pipeline(s)\n"
                                }
                            ]
                        }
                    },
                    {
                        "name": "Primary GitHub",
                        "type": "GitHub",
                        "status": "Success",
                        "createStatus": {
                            "status": "Success",
                            "message": "Created successfully"
                        },
                        "connectStatus": {
                            "status": "Success",
                            "message": "Connected successfully"
                        },
                        "discoveryStatus": {
                            "status": "Success",
                            "message": "Discovered successfully",
                            "imports": [
                                {
                                    "status": "completed",
                                    "id": "7f4d616bdb2d2450fe4fd6a75e9619c2",
                                    "details": "Discovered 5 new repositories. "
                                }
                            ]
                        }
                    },
                    {
                        "name": "Primary Bitbucket",
                        "type": "BitBucket",
                        "status": "Success",
                        "createStatus": {
                            "status": "Success",
                            "message": "Created successfully"
                        },
                        "connectStatus": {
                            "status": "Success",
                            "message": "Connected successfully"
                        },
                        "discoveryStatus": {
                            "status": "Success",
                            "message": "Discovered successfully",
                            "imports": [
                                {
                                    "status": "completed",
                                    "id": "815da16bdb2d2450fe4fd6a75e9619d0",
                                    "details": "Discovered 11 new repositories. "
                                }
                            ]
                        }
                    },
                    {
                        "name": "Primary Gitlab",
                        "type": "GitLab",
                        "status": "Partial Success",
                        "createStatus": {
                            "status": "Success",
                            "message": "Created successfully"
                        },
                        "connectStatus": {
                            "status": "Failed",
                            "error": "The current operation ended in state: ERROR"
                        }
                    }
                ],
                "importRequestsSysIds": [
                    "2a4d216bdb2d2450fe4fd6a75e9619c3",
                    "7f4d616bdb2d2450fe4fd6a75e9619c2",
                    "815da16bdb2d2450fe4fd6a75e9619d0"
                ]
            }
        }
    }

    cURL 요청

    다음 예는 애플리케이션 온보딩의 상태 요청을 보여줍니다.

    curl -X POST "https://servicenow-instance/api/sn_devops/v1/devops/onboarding/status?onboardingRequestID=IBE0001604" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -u "username":"password" \

    {
        "result": {
            "code": "207",
            "onboardingRequestID": "IBE0001604",
            "status": "partial-success",
            "messageDetails": {
                "status": "Partial Success",
                "apps": [
                    {
                        "name": "Bike Rentals Service",
                        "status": "Success",
                        "appId": "c7fd696bdb2d2450fe4fd6a75e961993",
                        "message": "App by name 'Bike Rentals Service' has been successfully created"
                    }
                ],
                "pipelines": [
                    {
                        "name": "Bike Rentals",
                        "status": "Success",
                        "message": "Successfully associated with app 'Bike Rentals Service'",
                        "changeStepAssociation": [
                            {
                                "status": "Success",
                                "changeStepName": "Prod",
                                "summary": "Change step with name 'Prod' has been created"
                            }
                        ]
                    }
                ],
                "repositories": [
                    {
                        "name": "nowdevops01/BikeRentals",
                        "status": "Partial Success",
                        "message": "Successfully associated with app 'Bike Rentals Service'",
                        "configureStatus": {
                            "status": "Failed",
                            "message": "Webhook configuration failed due to empty credentials for repository by name nowdevops01/BikeRentals in tool Primary GitHub"
                        }
                    }
                ],
                "plans": [
                    {
                        "status": "Failed",
                        "name": "testFirst",
                        "errors": [
                            "Plan by name 'testFirst' does not exist in tool Primary Azure"
                        ]
                    }
                ]
            }
        }
    }

    DevOps - GET /devops/orchestration/changeControl

    오케스트레이션 작업에 변경 통제가 적용되는지 확인합니다.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/orchestration/changeControl

    기본 URL: /api/sn_devops/devops/orchestration/changeControl

    지원되는 요청 매개변수

    표 13. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 14. 쿼리 매개변수
    이름 설명
    orchestrationTaskName (오케스트레이션 작업 이름) 확인할 오케스트레이션 작업의 이름입니다.

    데이터 유형: 문자열

    테스트 커넥션 인스턴스와 도구 간의 엔드 투 엔드 연결을 테스트할지 여부를 나타내는 플래그입니다 DevOps .
    유효한 값은 다음과 같습니다.
    • true: 종단 간 연결을 테스트합니다.
    • false: 종단 간 연결을 테스트하지 않습니다.

    데이터 유형: 부울

    기본값: false

    toolId 필수 오케스트레이션 도구의 Sys_id입니다. 오케스트레이션 도구 [sn_devops_orchestration_tool] 테이블에 있습니다.

    데이터 유형: 문자열

    도구 유형 도구의 유형입니다.

    유효한 값은 다음과 같습니다.

    젠킨스

    데이터 유형: 문자열

    표 15. 요청 본문 매개변수
    이름 설명
    없음

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 16. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    권한 부여
    v2부터 이 API는 토큰 기반 인증을 지원합니다. 도구 [sn_devops_tool] 테이블에 있는 도구 기록에서 토큰 복사 버튼을 클릭하여 토큰을 얻을 수 있습니다. 그런 다음 토큰을 Authorization: sn_devops 형식의 권한 부여 헤더에서 사용할 수 있습니다. DevOpsToken <tool_sys_id>:<tool_token>입니다.
    주:
    토큰이 있는 인증 헤더 외에 기본 인증 세부 정보(사용자 이름 및 암호)가 제공되면 기본 인증이 우선합니다.

    인스턴스에서 devops.system 사용자를 사용할 수 없는 경우 토큰 기반 인증이 성공한 후 이 사용자로 전환 속성을 사용합니다. 이 속성을 사용하면 토큰 인증을 완료하는 데 필요한 sn_devops.integration 역할을 가진 모든 사용자를 설정할 수 있습니다. 자세한 내용은 DevOps Change Velocity properties 문서를 참조하십시오.

    표 17. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 18. 상태 코드
    상태 코드 설명
    200 성공입니다. 요청이 성공적으로 처리되었습니다.
    401 인증이 잘못되었거나 누락되었습니다.
    500 내부 서버 오류입니다. 요청을 처리하는 동안 예기치 않은 오류가 발생했습니다. 응답에는 오류에 대한 추가 정보가 포함되어 있습니다.

    응답 본문 매개변수(JSON 또는 XML)

    이름 설명
    변경 제어 오케스트레이션 작업에 변경 제어가 적용되는지 여부를 나타내는 플래그입니다.
    가능한 값:
    • true: 변경 통제 하에 있습니다.
    • false: 변경 제어 대상이 아님

    데이터 유형: 부울

    변경 통제 하에 있으며 API v2 사용 중

    curl -X GET "https://instance.servicenow.com/api/sn_devops/v2/devops/orchestration/changeControl?toolId=1c219f7e8708f1508ca933383cbb3543&orchestrationTaskName=Platform-Analytics-UAT-Deployment&orchestrationTaskURL=https%253A%252F%252Fjenkins.mycompany.com%253A8080%252Fjob%252FMobile-Platform-deploy%252F&toolType=jenkins" 
    -H "accept: application/json"\
    -H "Authorization: sn_devops.DevOpsToken 1c219f7e8708f1508ca933383cbb3543:FtN13dfDuahYEtdfDvhHorh0QPp9na3u"

    응답 본문입니다.

    {
    "result": {
      "changeControl": true,
      "status": "Success" 
      } 
    }

    변경 제어 대상이 아니며 API v1을 사용하고 있지 않음

    curl -X GET "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/changeControl?toolId=f0ca45679323008b52f3b457415ae6&orchestrationTaskName=Platform-Analytics-UAT-Deployment&orchestrationTaskURL=https%253A%252F%252Fjenkins.mycompany.com%253A8080%252Fjob%252FMobile-Platform-deploy%252F&toolType=jenkins" 
    -H "accept: application/json"\
    -u "username":"password"

    응답 본문입니다.

    {
        "result": {
            "changeControl": false
        }
    }

    DevOps - GET /devops/orchestration/changeInfo

    지정된 오케스트레이션 파이프라인 실행에 대한 변경 요청 상세 정보를 검색합니다.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/orchestration/changeInfo

    기본 URL: /api/sn_devops/devops/orchestration/changeInfo

    지원되는 요청 매개변수

    표 19. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 20. 쿼리 매개변수
    이름 설명
    분기 이름 오케스트레이션 작업과 연결된 분기의 이름입니다.
    주:
    다중 분기 파이프라인을 참조할 때 이 매개 변수를 제공해야 하거나 응답에 잘못된 변경 세부 정보가 포함될 수 있습니다.

    데이터 유형: 문자열

    buildNumber 필수 오케스트레이션 도구 내의 파이프라인 빌드 번호입니다.

    데이터 유형: 문자열

    pipelineName Jenkins Freestyle 또는 Maven 프로젝트의 경우 선택 사항이며 다른 모든 프로젝트에 필요합니다. 오케스트레이션 파이프라인 이름입니다.

    데이터 유형: 문자열

    projectName Jenkins Freestyle 또는 Maven 프로젝트의 경우 필수이며 다른 모든 프로젝트의 경우 선택 사항입니다. 오케스트레이션 도구 프로젝트 이름입니다.

    데이터 유형: 문자열

    스테이지 이름 Jenkins Freestyle 또는 Maven 프로젝트의 경우 선택 사항이며 다른 모든 프로젝트에 필요합니다. 오케스트레이션 스테이지 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160

    toolId 필수 오케스트레이션 도구의 Sys_id입니다. 오케스트레이션 도구 [sn_devops_orchestration_tool] 테이블에 있습니다.

    데이터 유형: 문자열

    표 21. 요청 본문 매개변수(XML 또는 JSON)
    이름 설명
    없음

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 22. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    권한 부여
    v2부터 이 API는 토큰 기반 인증을 지원합니다. 도구 [sn_devops_tool] 테이블에 있는 도구 기록에서 토큰 복사 버튼을 클릭하여 토큰을 얻을 수 있습니다. 그런 다음 토큰을 Authorization: sn_devops 형식의 권한 부여 헤더에서 사용할 수 있습니다. DevOpsToken <tool_sys_id>:<tool_token>입니다.
    주:
    토큰이 있는 인증 헤더 외에 기본 인증 세부 정보(사용자 이름 및 암호)가 제공되면 기본 인증이 우선합니다.

    인스턴스에서 devops.system 사용자를 사용할 수 없는 경우 토큰 기반 인증이 성공한 후 이 사용자로 전환 속성을 사용합니다. 이 속성을 사용하면 토큰 인증을 완료하는 데 필요한 sn_devops.integration 역할을 가진 모든 사용자를 설정할 수 있습니다. 자세한 내용은 DevOps Change Velocity properties 문서를 참조하십시오.

    표 23. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 24. 상태 코드
    상태 코드 설명
    200 성공입니다. 요청이 성공적으로 처리되었습니다.
    400 잘못된 요청입니다. 잘못된 요청 유형 또는 잘못된 형식의 요청이 탐지되었습니다.
    404 찾을 수 없습니다. 요청한 항목을 찾을 수 없습니다.

    응답 본문 매개변수(JSON 또는 XML)

    이름 설명
    changeFound 변경 요청의 위치를 나타내는 플래그입니다.
    가능한 값:
    • true: 변경 요청을 찾았습니다.
    • false: 변경 요청을 찾을 수 없습니다.

    데이터 유형: 부울

    번호 변경 요청 번호.

    데이터 유형: 문자열

    단계 현재 단계입니다.

    데이터 유형: 문자열

    phase_state 현재 단계의 상태입니다.

    데이터 유형: 문자열

    우선순위 변경 요청의 우선순위입니다. 우선순위는 요청의 영향과 긴급도를 기준으로 합니다. 서비스 데스크에서 요청을 얼마나 빨리 처리해야 하는지를 식별합니다.
    가능한 값:
    • 1: 심각
    • 2: 높음
    • 3: 보통
    • 4: 낮음

    데이터 유형: 문자열

    위험 변경에 대한 위험 수준입니다.
    가능한 값:
    • 낮음
    • 높음
    • 보통

    데이터 유형: 문자열

    상태 변경 요청의 상태입니다.
    가능한 값:
    • 평가
    • 인증
    • 취소됨
    • 종결
    • 구현
    • 신규
    • 검토
    • 예약됨

    데이터 유형: 문자열

    기본값: 신규

    sys_id 변경 요청의 Sys_id입니다.

    데이터 유형: 문자열

    유형 변경 요청의 유형입니다.
    가능한 값:
    • 응급
    • 정상
    • 표준

    데이터 유형: 문자열

    URL 연결된 ServiceNow 인스턴스 내 변경 요청의 URL입니다.

    데이터 유형: 문자열

    변경 할당 그룹 변경 요청의 할당 그룹입니다.

    데이터 유형: 문자열

    changeApprovers (변경 승인자) 변경 승인을 보류 중인 승인자 목록입니다.

    데이터 유형: 문자열

    plannedStartDate 변경의 계획된 시작 날짜 및 시간입니다.

    데이터 유형: 문자열

    plannedEndDate 변경의 계획된 종료 날짜 및 시간입니다.

    데이터 유형: 문자열

    cURL 요청

    curl -X GET "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/changeInfo?toolId=1487f457db642810765555535e9619d3&pipelineName=Automation/apps HR/family release&stageName=deployfamilyrelease&buildNumber=1639"  
    -H "accept: application/json"\ 
    -u "username":"password"
    {  
      "result": {  
        "changeFound": true,  
        "sys_id": "ee89341bdb642810765555535e96196e",  
        "number": "CHG0030001",  
        "type": "normal",  
        "state": "0",  
        "phase": "requested",  
        "phase_state": "open",  
        "priority": "4",  
        "risk": "4",  
        "url": "https://instance.servicenow.com/change_request.do?sys_id=ee89341bdb642810765555535e96196e",  
        "changeAssignmentGroup": "Change Management", 
        "changeApprovers": "Ron Kettering, Christen Mitchell, Howard Johnson, Luke Wilson", 
        "plannedStartDate": "2023-02-05 08:00:00", 
        "plannedEndDate": "2024-02-05 08:00:00" 
      }  
    }

    DevOps - GET /devops/orchestration/schema

    지정된 오케스트레이션 자원에 대한 스키마 객체를 반환합니다.

    필요한 스키마 개체가 있으면 이를 사용하여 해당 POST 호출에 대한 요청 본문을 만듭니다. /orchestration/orchestrationTask 또는 /orchestration/taskExecution.

    주:
    이 엔드포인트는 필요한 요청 본문 요소만 반환합니다.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/orchestration/schema

    기본 URL: /api/sn_devops/devops/orchestration/schema

    지원되는 요청 매개변수

    표 25. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 26. 쿼리 매개변수
    이름 설명
    resource 반환할 자원 스키마의 유형입니다.
    유효한 값(대소문자 구분 안 함):
    • build_details
    • 콜백
    • orchestration_task
    • task_execution

    데이터 유형: 문자열

    표 27. 요청 본문 매개변수
    이름 설명
    없음

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 28. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 29. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 30. 상태 코드
    상태 코드 설명
    200 요청이 성공적으로 완료되었습니다.
    401 인증이 잘못되었거나 누락되었습니다.
    500 내부 서버 오류입니다. 요청을 처리하는 동안 예기치 않은 오류가 발생했습니다. 응답에는 오류에 대한 추가 정보가 포함되어 있습니다.

    응답 본문 매개변수

    이름 설명
    콜백 URL 콜백의 URL입니다.

    데이터 유형: 문자열

    종료 날짜 시간 작업 실행이 종료된 날짜/시간입니다.

    데이터 유형: 문자열

    이름 오케스트레이션 작업의 이름입니다.

    데이터 유형: 문자열

    번호 작업 실행 번호입니다. 인시던트 번호와 동일합니다.

    데이터 유형: 문자열

    orchestrationTaskDetails 오케스트레이션 작업에 대한 설명입니다.

    데이터 유형: 객체

    "orchestrationTaskDetails": {
      "message": "String",
      "name": "String",
      "triggerType": "String",
      "url": "String"
    }
    orchestrationTaskDetails.message 자유 형식의 문자 메시지입니다.

    데이터 유형: 문자열

    orchestrationTaskDetails.name 오케스트레이션 작업의 이름입니다.

    데이터 유형: 문자열

    orchestrationTaskDetails.triggerType 오케스트레이션 작업이 시작된 방식입니다.

    데이터 유형: 문자열

    orchestrationTaskDetails.url 연결된 오케스트레이션 도구의 오케스트레이션 작업 URL입니다.

    데이터 유형: 문자열

    orchestrationTaskURL (영문) 오케스트레이션 작업의 URL입니다.

    데이터 유형: 문자열

    결과 작업 실행의 실행 결과입니다.
    유효한 값은 다음과 같습니다.
    • 실패함
    • 성공

    데이터 유형: 문자열

    startDateTime 작업 실행이 시작된 날짜/시간입니다.

    데이터 유형: 문자열

    작업 실행 URL 실행할 작업의 URL입니다.

    데이터 유형: 문자열

    트리거 유형 오케스트레이션 작업이 시작된 방식입니다.

    유효한 값은 다음과 같습니다.

    • scm: Git/scm 도구 코드 커밋이 작업을 트리거했습니다.
    • 업스트림: 업스트림 작업이 이 작업을 트리거했습니다.
    • user: 사용자가 수동으로 작업을 시작했습니다.

    데이터 유형: 문자열

    URL 연결된 오케스트레이션 도구의 오케스트레이션 작업 URL입니다.

    데이터 유형: 문자열

    resource=task_execution를 사용하는 샘플 cURL 요청

    curl -X GET \
    'https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/schema?resource=task_execution' \
    -H 'Accept: application/json'\
    -u 'username':'password'
    {
    "result": {
      "number": 40,
      "url": "https://jenkins.mycompany.com:8080/job/Mobile-Platform-CI/40/",
      "startDateTime": "1970-01-01T08:15:30-05:00",
      "endDateTime": "1970-01-01T08:25:30-05:00",
      "triggerType": "upstream",
      "result": "Success",
      "orchestrationTaskDetails": {
        "name": "Mobile-Platform-CI",
        "url": "https://jenkins.mycompany.com:8080/job/Mobile-Platform-CI/"
        }
      }
    }

    resource=orchestration_task가 있는 샘플 cURL 요청

    curl -X GET \ 
    'https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/schema?resource=orchestration_task' \
    -H 'Accept: application/json'\
    -u 'username':'password' 
    
    { 
    "result": { 
      "name": "Mobile-Platform-CI", 
      "url": "https://jenkins.mycompnay.com:8080/job/Mobile-Platform-CI/" 
      } 
    } 

    resource=callback을 사용한 샘플 cURL 요청

    curl -X GET \
    'https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/schema?resource=task_execution' \
    -H 'Accept: application/json' \
    -u 'username':'password'
    
    { 
      "result": { 
        "callbackURL": "http://127.0.0.1:8090/jenkins/sn-devops/9b0feb79-f0b9-4661-83ef-2861b8924784", 
        "orchestrationTaskURL": "http://127.0.0.1:8090/jenkins/job/felipe-downstream/", 
        "orchestrationTaskDetails": { 
          "message": "Started by upstream project \"felipe-upstream\" build number 27", 
          "triggerType": "upstream" 
        } 
      } 
    } 

    DevOps - GET /devops/orchestration/stepMapping

    전달되는 정보가 오케스트레이션 작업을 만드는 데 유효하고 이전에 만든 단계에 연결하는 데 유효한지 확인합니다.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/orchestration/stepMapping

    기본 URL: /api/sn_devops/devops/orchestration/stepMapping

    지원되는 요청 매개변수

    표 31. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 32. 쿼리 매개변수
    이름 설명
    분기 이름 오케스트레이션 작업과 연결된 분기의 이름입니다.

    데이터 유형: 문자열

    isMultiBranch (영문) 오케스트레이션 도구가 Jenkins인 경우 프로젝트가 다중 분기 형식인지 여부를 나타내는 플래그입니다.
    유효한 값은 다음과 같습니다.
    • true: 프로젝트가 다중 분기 형식입니다.
    • false: 프로젝트가 다중 분기 형식이 아닙니다.

    데이터 유형: 부울

    기본값: false

    parent스테이지 이름 오케스트레이션 작업이 상위 오케스트레이션 작업 내에 중첩된 하위 작업인 경우 상위 오케스트레이션 작업의 이름입니다.

    데이터 유형: 문자열

    parentStageURL (영문) 오케스트레이션 작업이 상위 오케스트레이션 작업 내에 중첩된 하위 작업인 경우 상위 오케스트레이션 작업의 URL입니다.

    데이터 유형: 문자열

    orchestrationTaskName (오케스트레이션 작업 이름) 필수 오케스트레이션 작업의 이름입니다.

    데이터 유형: 문자열

    orchestrationTaskURL (영문) 필수 오케스트레이션 작업의 URL입니다.
    주:
    백분율(%)로 인코딩되어야 합니다(예: https%3A%2F%2Fjenkins.mycompany.com%3A8080%2Fjob%2FMobile-Platform-deploy%2F).
    데이터 유형: 문자열
    테스트 커넥션 인스턴스와 도구 간의 엔드 투 엔드 연결을 테스트할지 여부를 나타내는 플래그입니다 DevOps .
    유효한 값은 다음과 같습니다.
    • true: 종단 간 연결을 테스트합니다.
    • false: 종단 간 연결을 테스트하지 않습니다.

    데이터 유형: 부울

    기본값: false

    toolId 필수 오케스트레이션 도구의 Sys_id입니다. 오케스트레이션 도구 [sn_devops_orchestration_tool] 테이블에 있습니다.

    데이터 유형: 문자열

    도구 유형 필수 도구의 유형입니다.

    유효한 값: jenkins

    데이터 유형: 문자열

    표 33. 요청 본문 매개변수
    이름 설명
    없음

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 34. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 35. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 36. 상태 코드
    상태 코드 설명
    200 성공입니다. 요청이 성공적으로 처리되었습니다.
    401 승인되지 않았습니다. 사용자 자격 증명이 잘못되었거나 전달되지 않았습니다.
    500 내부 서버 오류입니다. 요청을 처리하는 동안 예기치 않은 오류가 발생했습니다. 응답에는 오류에 대한 추가 정보가 포함되어 있습니다.

    응답 본문 매개변수

    요소 설명
    상태 검증이 성공했는지 여부를 나타내는 플래그입니다.
    유효한 값은 다음과 같습니다.
    • true: 검증에 성공했습니다.
    • false: 검증에 성공하지 못했습니다.

    데이터 유형: 부울

    step유효 전송된 정보가 유효한지 여부를 나타내는 플래그입니다.
    유효한 값은 다음과 같습니다.
    • true: 전송된 정보가 유효합니다.
    • false: 전송된 정보가 유효하지 않습니다.

    데이터 유형: 부울

    샘플 cURL 요청

    curl -X GET "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/stepMapping?toolId=f0ca45679323008b52f3b457415ae6&orchestrationTaskName=Platform-Analytics-UAT-Deployment&orchestrationTaskURL=https%253A%252F%252Fjenkins.mycompany.com%253A8080%252Fjob%252FMobile-Platform-deploy%252F&toolType=jenkins "
     -H "Accept: application/json" \
     -u "username":"password"
    

    정보가 유효한 경우 결과입니다.

    {
      "result": {
        "stepValid": true,
        "status": "Success"
      }
    }

    샘플 cURL 요청

    curl -X GET "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/stepMapping?toolId=f0ca45679323008b52f3b457415ae6&orchestrationTaskName=Platform-Analytics-UAT-Deployment&orchestrationTaskURL=https%253A%252F%252Fjenkins.mycompany.com%253A8080%252Fjob%252FMobile-Platform-deploy%252F&toolType=jenkins "
     -H "Accept: application/json" \
     -u "username":"password"
    

    정보가 잘못된 경우 결과가 발생합니다.

    {
    "result": {
      "stepValid": false,
      "status": "Success"
    }
    

    DevOps - GET /devops/plan/schema

    특정 계획(앱, 버전 또는 작업 항목)에 대한 스키마 객체를 반환합니다.

    필요한 스키마 개체가 있으면 이를 사용하여 해당 POST 호출에 대한 요청 본문을 만듭니다. POST /plan/app, POST /plan/version 또는 POST /plan/workitem.

    주:
    이 엔드포인트는 필요한 요청 본문 요소만 반환합니다.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/plan/schema

    기본 URL: /api/sn_devops/devops/plan/schema

    지원되는 요청 매개변수

    표 37. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 38. 쿼리 매개변수
    이름 설명
    resource 반환할 자원 스키마의 유형입니다.

    유효한 값(대소문자 구분 안 함):

    • 버전
    • work_item

    데이터 유형: 문자열

    표 39. 요청 본문 매개변수
    이름 설명
    없음

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 40. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 41. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 42. 상태 코드
    상태 코드 설명
    200 성공입니다. 요청이 성공적으로 처리되었습니다.
    401 인증이 잘못되었거나 누락되었습니다.
    404 찾을 수 없습니다. 지정된 기록을 찾을 수 없습니다.
    500 내부 서버 오류입니다. 요청을 처리하는 동안 예기치 않은 오류가 발생했습니다. 응답에는 오류에 대한 추가 정보가 포함되어 있습니다.

    응답 본문 매개변수

    이름 설명
    버전과 연결할 애플리케이션에 대한 설명입니다.

    데이터 유형: 객체

    "app": {
      "createdDateTime": "String",
      "id": "String",
      "shortDescription": "String",
      "team": {Object},
      "url": "String"
    }
    app.createdDateTime 소스 DevOps 도구에서 애플리케이션을 만든 날짜/시간입니다.

    데이터 유형: 문자열

    app.id 애플리케이션의 고유 식별자입니다. 소스 계획 수립 도구에서 생성됩니다.

    데이터 유형: 문자열

    app.shortDescription 연결된 애플리케이션에 대한 간략한 설명입니다.

    데이터 유형: 문자열

    앱.팀 애플리케이션과 연결된 팀에 대한 설명입니다.

    데이터 유형: 객체

    "team": {
      "id": "String",
      "name": "String"
    }
    app.team.id 애플리케이션과 연결된 팀의 고유 식별자입니다. 소스 계획 수립 도구에서 생성됩니다.

    데이터 유형: 문자열

    app.team.name 애플리케이션과 연결된 팀의 이름입니다.

    데이터 유형: 문자열

    앱.url 소스 계획 수립 도구 사이트에 있는 애플리케이션의 URL입니다.

    데이터 유형: 문자열

    assignedTo 작업 항목이 할당된 사람에 대한 설명입니다.

    데이터 유형: 객체

    "assignedTo": {
      "email": "String",
      "id": "String",
      "name": "String",
      "userName": "String"
    }
    assignedTo.email 작업 항목에 할당된 사람의 이메일 주소입니다.

    데이터 유형: 문자열

    assignedTo.id 작업 항목에 할당된 사람의 고유 식별자입니다.

    데이터 유형: 문자열

    assignedTo.name 작업 항목에 할당된 사람의 이름입니다.

    데이터 유형: 문자열

    assignedTo.사용자 이름 작업 항목에 할당된 사람의 사용자 이름입니다.

    데이터 유형: 문자열

    createDateTime 애플리케이션, 버전 또는 작업 항목 기록이 생성된 날짜 및 시간입니다.

    데이터 유형: 문자열

    id 애플리케이션, 버전 또는 작업 항목의 고유 식별자입니다. 소스 계획 수립 도구에서 생성됩니다.

    데이터 유형: 문자열

    이름 애플리케이션의 이름입니다.

    데이터 유형: 문자열

    path 애플리케이션에 대한 상대 경로입니다.

    데이터 유형: 문자열

    shortDescription 애플리케이션, 버전 또는 작업 항목에 대한 간략한 설명입니다.

    데이터 유형: 문자열

    상태 작업 항목의 상태입니다. 소스 계획 수립 도구에서 생성됩니다.

    데이터 유형: 문자열

    애플리케이션과 연결된 팀에 대한 설명입니다.

    데이터 유형: 객체

    "team": {
      "id": "String",
      "name": "String"
    }
    team.id 애플리케이션과 연결된 팀의 고유 식별자입니다. 소스 계획 수립 도구에서 생성됩니다.

    데이터 유형: 문자열

    team.name 애플리케이션과 연결된 팀의 이름입니다.

    데이터 유형: 문자열

    유형 작업 항목의 유형입니다. 계획 수립 도구에서 생성됩니다.

    데이터 유형: 문자열

    URL 애플리케이션, 버전 또는 작업 항목에 접근하는 데 사용할 URL입니다.

    데이터 유형: 문자열

    버전 버전을 설명하는 배열입니다.

    데이터 유형: 객체

    "version": {
      "app": {Object},
      "createdDateTime": "String",
      "id": "String",
      "shortDescription": "String",
      "url": "String"
    }
    version.app 버전과 연결할 애플리케이션에 대한 설명입니다.

    데이터 유형: 객체

    "app": {
      "createdDateTime": "String",
      "id": "String",
      "shortDescription": "String",
      "team": {Object},
      "url": "String"
    }
    version.app.createdDateTime 소스 DevOps 도구에서 버전이 생성된 날짜/시간입니다.

    데이터 유형: 문자열

    version.app.id 애플리케이션의 고유 식별자입니다. 소스 계획 수립 도구에서 생성됩니다.

    데이터 유형: 문자열

    version.app.shortDescription 연결된 애플리케이션에 대한 간략한 설명입니다.

    데이터 유형: 문자열

    version.app.team 애플리케이션과 연결된 팀에 대한 설명입니다.

    데이터 유형: 객체

    "team": {
      "id": "String",
      "name": "String"
    }
    version.app.team.id 애플리케이션과 연결된 팀의 고유 식별자입니다. 소스 계획 수립 도구에서 생성됩니다.

    데이터 유형: 문자열

    version.app.team.name 애플리케이션과 연결된 팀의 이름입니다.

    데이터 유형: 문자열

    version.app.url 소스 계획 수립 도구 사이트에 있는 애플리케이션의 URL입니다.

    데이터 유형: 문자열

    version.createdDateTime 소스 DevOps 도구에서 버전이 생성된 날짜/시간입니다.

    데이터 유형: 문자열

    version.id 버전의 고유 식별자입니다. 소스 계획 수립 도구에서 생성됩니다.

    데이터 유형: 문자열

    version.shortDescription 연결된 버전에 대한 간략한 설명입니다.

    데이터 유형: 문자열

    version.url 소스 계획 수립 도구 사이트의 버전 URL입니다.

    데이터 유형: 문자열

    resource=app에 대한 샘플 cURL 요청

    curl "https://instance.servicenow.com/api/sn_devops/v1/devops/plan/schema?resource=app" \
    --request GET \
    --header "Accept:application/json" \
    --user "username":"password"
    {
      "result": {
        "id": "PRODUCT1234",
        "shortDescription": "Mobile UI",
        "createdDateTime": "1970-01-01T08:15:30-05:00",
        "team": {
          "name": "Mobile UI",
          "id": "f0ca45679323008b52f3b457415ae6"
        },
        "url": "https://jira.com/mycompany/browse/PRODUCT-125"
      }
    }

    resource=version에 대한 샘플 cURL 요청

    curl "https://instance.servicenow.com/api/sn_devops/v1/devops/plan/schema?resource=version" \
    --request GET \
    --header "Accept:application/json" \
    --user "username":"password"
    
    {
      "result": {
        "id": "REL1234",
        "shortDescription": "APIs Release",
        "createdDateTime": "1970-01-01T08:15:30-05:00",
        "app": {
          "id": "PRODUCT1234",
          "shortDescription": "Mobile UI",
          "createdDateTime": "1970-01-01T08:15:30-05:00",
          "team": {
            "name": "Mobile UI",
            "id": "f0ca45679323008b52f3b457415ae6"
          },
          "url": "https://jira.com/mycompany/browse/PRODUCT-125"
        },
        "url": "https://jira.com/mycompany/browse/REL-125"
      }
    }

    resource=work_item에 대한 샘플 cURL 요청

    curl "https://instance.servicenow.com/api/sn_devops/v1/devops/plan/schema?resource=work_item" \
    --request GET \
    --header "Accept:application/json" \
    --user "username":"password"
    
    {
      "result": {
        "id": "STR1234",
        "type": "Story",
        "shortDescription": "Planning API Spec",
        "state": "In-progress",
        "createdDateTime": "1970-01-01T08:15:30-05:00",
        "assignedTo": {
          "name": "Leo Neo",
          "userName": "lenn",
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "email": "lenn@smithworksinc.com"
        },
        "version": {
          "id": "REL1234",
          "shortDescription": "APIs Release",
          "createdDateTime": "1970-01-01T08:15:30-05:00",
          "app": {
            "id": "PRODUCT1234",
            "shortDescription": "Mobile UI",
            "createdDateTime": "1970-01-01T08:15:30-05:00",
            "team": {
              "name": "Mobile UI",
              "id": "f0ca45679323008b52f3b457415ae6"
            },
            "url": "https://jira.com/mycompany/browse/PRODUCT-125"
            },
            "url": "https://jira.com/mycompany/browse/REL-125"
        },
        "app": {
          "id": "PRODUCT1234",
          "shortDescription": "Mobile UI",
          "createdDateTime": "1970-01-01T08:15:30-05:00",
          "team": {
            "name": "Mobile UI",
            "id": "f0ca45679323008b52f3b457415ae6"
          },
          "url": "https://jira.com/mycompany/browse/PRODUCT-125"
        },
        "url": "https://jira.com/mycompany/browse/HALOKEY-25"
      }
    }

    DevOps - POST /devops/artifact/registration

    오케스트레이션 도구가 인스턴스에 아티팩트를 ServiceNow 등록할 수 있도록 합니다.

    이 엔드포인트는 새 아티팩트 및 아티팩트 버전을 만들고 커밋에 연결합니다. 다음은 엔드포인트 프로세스 흐름에 대한 설명입니다.
    • 요청에 전달 toolId 되면 엔드포인트는 도구가 인스턴스 내에 있는지 확인합니다. 또한 지정된 artifacts.repositoryName 아티팩트 리포지토리가 있는지 확인하고, 없는 경우 연결된 아티팩트 도구 아래에 만듭니다.
    • toolId 요청에 전달되지 않으면 리포지토리가 생성되지만 아티팩트 도구에 연결되지 않습니다.
    • 그런 다음 지정된 아티팩트가 artifacts.name 이미 있는지 확인하고, 없는 경우 연결된 리포지토리 아래에 아티팩트를 만듭니다.
    • artifact.version 요청에 전달된 경우:
      • 기록이 없는 경우 연결된 아티팩트 버전 [sn_devops_artifact_version] 테이블에 새 아티팩트 버전 기록이 생성됩니다.
      • 그런 다음 엔드포인트는 제공된 빌드 상세 정보(pipelineName 또는 projectName, , taskExecutionNumberbranchName및 ) stageName및 매개 변수를 기반으로 연결된 작업 실행을 orchestrationToolId 찾습니다.
      • 작업 실행이 발견되고 사후 처리가 완료되면 아티팩트 버전이 작업 실행에 연결되고 TaskExecution에 대한 아티팩트 [sn_devops_m2m_artifact_execution] 테이블에 저장됩니다. 이러한 작업 실행에 연결된 커밋은 아티팩트 버전에도 연결되고 커밋할 아티팩트 버전 [sn_devops_m2m_artifact_version_commit] 테이블에 저장됩니다. 아티팩트를 생성하지 않은 이전 작업 실행에 연결된 모든 커밋도 아티팩트 버전과 연결됩니다.
      • 작업 실행이 발견되고 사후 처리가 완료되지 않은 경우 요청은 아티팩트 스테이징 요청 [sn_devops_artifact_staging] 테이블에 유지됩니다. 준비된 요청에는 작업 실행에 대한 참조가 포함되어 있습니다.
      • 작업 실행을 찾을 수 없는 경우 요청은 스테이징 테이블에 유지됩니다. 스테이징된 요청에는 빌드 세부 정보가 포함됩니다.
    • artifact.version 이 전달되지 않은 경우 도구 구성에 따라 아티팩트 버전이 /devops/tool/artifact 엔드포인트(아티팩트 도구가 웹후크를 지원하는 경우) 또는 아티팩트 도구에서 아티팩트 버전을 검색하는 사용자 지정 하위 플로우를 통해 검색됩니다.

    아티팩트에 대한 자세한 내용은 릴리스에 DevOps 변경 가속화 사용을 참조하세요.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/artifact/registration

    기본 URL: /api/sn_devops/devops/artifact/registration

    지원되는 요청 매개변수

    표 43. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 44. 쿼리 매개변수
    이름 설명
    orchestrationToolId 필수 아티팩트와 연결된 오케스트레이션 도구의 Sys_id입니다. 오케스트레이션 도구 [sn_devops_orchestration_tool] 테이블에 있습니다. 엔드포인트는 이 정보를 사용하여 작업 실행 정보를 찾습니다.

    데이터 유형: 문자열

    toolId 아티팩트와 연결된 아티팩트 도구의 Sys_id입니다. 아티팩트 도구 [sn_devops_artifact_tool] 테이블에 있습니다.

    데이터 유형: 문자열

    표 45. 요청 본문 매개변수(XML 또는 JSON)
    이름 설명
    아티팩트 하나 이상의 항목이 필요합니다. 각 개체가 등록할 아티팩트 버전을 고유하게 식별하는 개체의 배열입니다.

    데이터 유형: 배열

    "artifacts": [
      {
        "name": "String",
        "repositoryName": "String",
        "semanticVersion": "String",
        "version": "String"
      }
    ]
    artifacts.name 필수 아티팩트 파일 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160자

    artifacts.repositoryName 필수 아티팩트 리포지토리 이름입니다.

    지정된 리포지토리 기록이 없으면 새로 만들어집니다.

    데이터 유형: 문자열

    최대 길이: 160자

    artifacts.semanticVersion 아티팩트의 의미 체계 버전입니다.

    데이터 유형: 문자열

    형식: MAJOR. 사소한. 패치

    가능한 값의 예는 다음과 같습니다.
    • 2.0.0
    • 2.0.0-rc.2
    • 2.0.0-rc.1
    • 1.0.0- 베타

    최대 길이: 160자

    기본값: Null

    artifacts.version (아티팩트.버전) 전달되지 않은 경우 toolId 필요합니다. 아티팩트 버전입니다.

    데이터 유형: 문자열

    형식: MAJOR. 사소한

    최대 길이: 160자

    기본값: Null

    분기 이름 다중 분기 프로젝트인 경우 필요합니다. 아티팩트가 저장되는 리포지토리의 분기 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160

    기본값: Null

    pipelineName 전달되지 않은 경우 projectName 필요합니다. 파이프라인 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160

    기본값: Null

    projectName 전달되지 않은 경우 pipelineName 필요합니다. 자유 형식 프로젝트 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160

    기본값: Null

    스테이지 이름 전달된 경우 pipelineName 필요합니다. 스테이지 이름.

    데이터 유형: 문자열

    최대 길이: 160

    기본값: Null

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 46. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    권한 부여
    v2부터 이 API는 토큰 기반 인증을 지원합니다. 도구 [sn_devops_tool] 테이블에 있는 도구 기록에서 토큰 복사 버튼을 클릭하여 토큰을 얻을 수 있습니다. 그런 다음 토큰을 Authorization: sn_devops 형식의 권한 부여 헤더에서 사용할 수 있습니다. DevOpsToken <tool_sys_id>:<tool_token>입니다.
    주:
    토큰이 있는 인증 헤더 외에 기본 인증 세부 정보(사용자 이름 및 암호)가 제공되면 기본 인증이 우선합니다.

    인스턴스에서 devops.system 사용자를 사용할 수 없는 경우 토큰 기반 인증이 성공한 후 이 사용자로 전환 속성을 사용합니다. 이 속성을 사용하면 토큰 인증을 완료하는 데 필요한 sn_devops.integration 역할을 가진 모든 사용자를 설정할 수 있습니다. 자세한 내용은 DevOps Change Velocity properties 문서를 참조하십시오.

    컨텐츠-형식 요청 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 47. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 48. 상태 코드
    상태 코드 설명
    200 성공. 응답 본문의 성공입니다.
    201 만든. 응답 본문의 성공입니다.
    400 잘못된 요청입니다. 요청 URI가 시스템의 API와 일치하지 않거나 알 수 없는 이유로 작업이 실패했습니다. 잘못된 헤더로 인해 이 오류가 발생할 수도 있습니다.
    500 내부 서버 오류입니다. 요청을 처리하는 동안 예기치 않은 오류가 발생했습니다. 응답에는 오류에 대한 추가 정보가 포함되어 있습니다.

    응답 본문 매개변수

    이름 설명
    response 아티팩트 등록 요청의 결과입니다.

    데이터 유형: 객체

    "response": {
      "artifact": {Object},
      "artifact_register_requests": {Object},
      "artifact_repository": {Object},
      "artifact_version": {Object}
    }
    응답.아티팩트 처리된 각 아티팩트에 대한 결과입니다.

    데이터 유형: 객체

    "artifact": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    응답.아티팩트.생성 요청에서 아티팩트 기록을 생성한 경우 아티팩트 [sn_devops_artifact] 테이블에 생성된 기록의 sys_ids 목록입니다.

    데이터 유형: 배열

    "create": [
      {
        "id": "String"
      }
    ]
    response.artifact.create.id 요청에 의해 생성된 아티팩트 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.artifact.found 아티팩트가 아티팩트 테이블에 이미 있는 경우 기존 아티팩트 기록의 sys_ids 목록입니다.
    주:
    기존 패키지는 수정되지 않습니다.

    데이터 유형: 배열

    "found": [
      {
        "id": "String"
      }
    ]
    response.artifact.found.id 기존 아티팩트 기록의 Sys_id입니다.

    데이터 유형: 문자열

    응답.아티팩트.업데이트 현재 사용되지 않음
    response.artifact.update.id 현재 사용되지 않음
    response.artifact_register_requests 모든 아티팩트에 대한 결과는 처리를 완료하지 않고 아티팩트 준비 요청 테이블에 저장된 요청을 등록합니다.

    데이터 유형: 객체

    "artifact_register_requests": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    response.artifact_register_requests.생성 요청이 아티팩트 스테이징 기록을 생성한 경우 생성된 기록의 sys_ids 목록입니다.

    데이터 유형: 배열

    "create": [
      {
        "id": "String"
      }
    ]
    response.artifact_register_requests.create.id 요청에 의해 생성된 아티팩트 스테이징 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.artifact_register_requests.찾음 아티팩트에 이미 연결된 아티팩트 스테이징 기록이 있는 경우 기존 아티팩트 스테이징 기록의 sys_ids 목록입니다.
    주:
    기존 패키지는 수정되지 않습니다.

    데이터 유형: 배열

    "found": [
      {
        "id": "String"
      }
    ]
    response.artifact_register_requests.found.id 기존 아티팩트 스테이징 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.artifact_register_requests.업데이트 현재 사용되지 않음
    response.artifact_register_requests.update.id 현재 사용되지 않음
    response.artifact_repository 요청을 처리하는 동안 조작된 모든 아티팩트 리포지토리 기록에 대한 결과입니다.

    데이터 유형: 객체

    "artifact_repository": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    response.artifact_repository.생성 요청에 의해 아티팩트 리포지토리가 작성된 경우 작성된 기록의 sys_ids 목록입니다.

    데이터 유형: 배열

    "create": [
      {
        "id": "String"
      }
    ]
    response.artifact_repository.create.id 요청에 의해 생성된 아티팩트 리포지토리 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.artifact_repository.찾음 등록 요청에 사용된 아티팩트 리포지토리 레코드가 이미 있는 경우 기존 레코드의 sys_ids 목록입니다.
    주:
    기존 패키지는 수정되지 않습니다.

    데이터 유형: 배열

    "found": [
      {
        "id": "String"
      }
    ]
    response.artifact_repository.found.id 요청에서 사용하는 기존 아티팩트 리포지토리 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.artifact_repository.업데이트 엔드포인트가 리포지토리의 추적 플래그를 true(false)에서 true로 업데이트하면 수정된 리포지토리 기록의 sys_ids 목록입니다.

    데이터 유형: 배열

    "update": [
      {
        "id": "String"
      }
    ]
    response.artifact_repository.update.id 추적 플래그가 수정된 리포지토리 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.artifact_version 요청을 처리하는 동안 조작된 아티팩트 버전 기록에 대한 결과입니다.

    데이터 유형: 객체

    "artifact_version": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    response.artifact_version.생성 요청을 처리하는 동안 생성된 모든 아티팩트 버전 기록에 대한 결과입니다.

    데이터 유형: 배열

    "create": [
      {
        "id": "String"
      }
    ]
    response.artifact_version.create.id 요청에 의해 생성된 아티팩트 버전 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.artifact_version.찾음 등록 요청에 사용된 아티팩트 버전 레코드가 이미 있는 경우 기존 레코드의 sys_ids 목록입니다.

    데이터 유형: 배열

    "found": [
      {
        "id": "String"
      }
    ]
    response.artifact_version.found.id 요청에 사용되는 기존 아티팩트 버전 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.artifact_version.업데이트 현재 사용되지 않음
    response.artifact_version.update.id 현재 사용되지 않음
    상태 등록 요청의 상태입니다.
    가능한 값:
    • 성공: 응답 본문에 반환 결과가 포함되었습니다.
    • 오류: 응답 본문에 모든 오류 목록이 포함되어 있습니다.

    데이터 유형: 문자열

    샘플 cURL 요청

    curl -X POST \
    'https://instance.servicenow.com/api/sn_devops/devops/artifact/registration?toolId=391b4ff6dba24010bc8cdd384b96198f&orchestrationToolId=99d70b36dba24010bc8cdd384b961985' \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -u 'username':'password' \
    -d ' {"artifacts": [\
     {\
     "name": "sa-web.jar",\
     "version": "3.1",\
     "semanticVersion": "3.1.0",\
     "repositoryName": "services-1031"\
     },\
     {\
     "name": "sa-frontend.jar",\
     "version": "3.2",\
     "semanticVersion": "3.2.0",\
     "repositoryName": "services-1031"\
     }\
     ],\
     "pipelineName": "spring-boot-app",\
     "taskExecutionNumber": "160",\
     "stageName": "Build",\
     "branchName": "primary"\
    }]'
    {
    "result": {
      "status": "Success",
      "response": {
        "artifact_repository": {
          "create": [
            {
              "id": "2e50ba8bdbaa4010bc8cdd384b961988"
            }
          ],
          "update": [],
          "found": [
            {
              "id": "2e50ba8bdbaa4010bc8cdd384b961988"
            }
          ]
        },
        "artifact": {
          "create": [
            {
              "id": "6a50f603dbea4010bc8cdd384b96193d"
            },
            {
              "id": "2e50f603dbea4010bc8cdd384b96193f"
            }
          ],
          "update": [],
          "found": []
        },
        "artifact_version": {
          "create": [
            {
              "id": "a650f603dbea4010bc8cdd384b96193e"
            },
            {
              "id": "6250f603dbea4010bc8cdd384b961940"
            }
          ],
          "update": [],
          "found": []
        },
        "artifact_register_requests": {
          "create": [
            {
              "id": "6250f603dbea4010bc8cdd384b96193f"
            },
            {
              "id": "6650f603dbea4010bc8cdd384b961940"
            }
          ],
          "update": [],
          "found": []
        }
      }
     }
    }

    DevOps - /devops/onboarding/app 게시

    서비스에서 비동기적으로 처리 DevOps 되는 온보딩 앱 이벤트를 생성합니다.

    이 엔드포인트는 다음 작업을 수행할 수 있습니다.
    • 애플리케이션을 생성합니다.
    • 계획, 리포지토리, 파이프라인과 같은 객체를 애플리케이션에 연결합니다 DevOps .
    • 변경 단계 기록을 생성하고 변경 승인 프로세스를 파이프라인에 연결합니다.

    이러한 모든 작업은 도구 및 역량에 따라 다릅니다. 다음 표에서는 지원되는 각 도구에 사용할 수 있는 작업을 간략하게 설명합니다.

    애플리케이션 온보딩 매트릭스

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/onboarding/app

    기본 URL: /api/sn_devops/devops/onboarding/app

    지원되는 요청 매개변수

    표 49. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 50. 쿼리 매개변수
    이름 설명
    없음
    표 51. 요청 본문 매개변수
    이름 설명
    연결된 ServiceNow 인스턴스 내에서 만들 앱을 정의하는 객체의 배열입니다.

    데이터 유형: 배열

    "apps": [{
      "bussinessApp": "String",
      "name": "String"
    }]
    apps.bussinessApp 애플리케이션을 매핑하는 cmdb_ci_business_app의 이름입니다. 이렇게 하면 애플리케이션이 지정된 CMDB 애플리케이션에 연결됩니다 DevOps .

    데이터 유형: 문자열

    apps.name 필수 만들기 위해 만들 애플리케이션의 사용자 이름입니다. 앱은 DevOps 계획, 리포지토리 및 파이프라인을 함께 연결하는 제품 컨테이너 개체입니다.

    데이터 유형: 문자열

    credentials 필수 웹후크 생성에 사용할 자격 증명입니다. 생성된 웹후크는 도구에서 알림을 보내는 데 사용됩니다.

    데이터 유형: 객체

    "credentials": {
      "name": "String",
      "password": "String"
    }
    credentials.name 필수. ServiceNow 엔드포인트 요청을 하는 사용자의 사용자 ID입니다. 사용자 [sys_user] 테이블에 있습니다. 이 사용자에게는 devops.integration.user 역할이 있어야 합니다. 버전 1.34.1부터 이 사용자에게 sn_devops.admin 역할이 있어야 합니다.

    데이터 유형: 문자열

    자격 증명.암호 필수 매개변수에 지정된 사용자의 암호입니다 credenitals.name .

    데이터 유형: 문자열

    파이프라인 애플리케이션과 연결할 파이프라인을 정의하는 객체의 배열입니다.

    데이터 유형: 배열

    "pipelines": [{
      "app": "String",
      "name": "String",
      "tool": "String"
    }]
    pipelines.app 개체가 pipelines 지정된 경우 필수입니다. 매개변수에 지정된 pipelines.name 계획과 연결할 애플리케이션의 이름입니다. 응용 프로그램이 이미 만들어졌거나 이 요청의 개체에 apps 지정되어 있어야 합니다.

    데이터 유형: 문자열

    pipelines.changeSteps 필드에 지정된 파이프라인에 대해 생성할 변경 단계를 정의하는 객체의 배열입니다 pipelines.name .

    데이터 유형: 배열

    "changeSteps": [{
      "changeApprovalGroup": "String",
      "changeControlledBranches": "String",
      "changeType": "String",
      "name": "String",
      "type": "String"
    }]

    데이터 유형: 문자열

    pipelines.changeSteps.changeApprovalGroup 개체가 changeSteps 지정된 경우 필수입니다. 파이프라인과 연결할 변경 승인 그룹의 이름입니다. 그룹 [sys_user_group] 테이블에 있습니다. 이 그룹은 인스턴스에 이미 있어야 ServiceNow 합니다.

    데이터 유형: 문자열

    pipelines.changeSteps.changeControlledBranches 변경 제어 중인 코드 분기의 쉼표로 구분된 목록입니다. 이는 다중 분기 지원에만 적용됩니다.

    데이터 유형: 문자열

    기본값: *(모든 분기)

    pipelines.changeSteps.changeType 개체가 changeSteps 지정된 경우 필수입니다. 작성할 변경 요청의 유형입니다. 사용 가능한 유형은 변경 요청 [change_request] 테이블의 유형 필드에 정의됩니다.

    데이터 유형: 문자열

    pipelines.changeSteps.name 개체가 changeSteps 지정된 경우 필수입니다. 작성할 단계의 이름입니다. 단계 이름은 오케스트레이션 도구의 파이프라인에 있는 해당 단계의 이름과 일치해야 합니다.

    데이터 유형: 문자열

    pipelines.changeSteps.type 개체가 changeSteps 지정된 경우 필수입니다. 작성할 단계의 유형입니다. 사용 가능한 단계 유형은 단계 [sn_devops_step] 테이블의 유형 필드에 정의되어 있습니다.

    데이터 유형: 문자열

    pipelines.name 개체가 pipelines 지정된 경우 필수입니다. 매개변수에 지정된 pipelines.app 애플리케이션과 연결할 파이프라인의 이름입니다. 이 파이프라인은 인스턴스에서 ServiceNow 이미 검색되어 있어야 합니다.

    데이터 유형: 문자열

    pipelines.project pipelines 개체가 지정되고 pipelines.tool이 프로젝트 엔터티(예: ADO 도구)를 지원하는 경우에 필요합니다. 고유한 파이프라인/도구 식별자를 생성하기 위해 파이프라인과 연결할 프로젝트입니다. 매개 변수 값은 프로젝트 [sn_devops_project] 테이블의 프로젝트에서 파생되어야 합니다.

    데이터 유형: 문자열

    pipelines.tool 개체가 pipelines 지정된 경우 필수입니다. 고유한 파이프라인/도구 식별자를 생성하기 위해 파이프라인과 연결할 도구입니다.

    데이터 유형: 문자열

    계획 애플리케이션과 연결할 계획을 정의하는 객체의 배열입니다.

    데이터 유형: 배열

    "plans": [{
      "app": "String",
      "name": "String",
      "tool": "String"
    }]
    plans.apps 개체가 plans 지정된 경우 필수입니다. 매개변수에 지정된 plans.name 계획과 연결할 애플리케이션의 이름입니다. 이러한 애플리케이션은 이미 작성되었거나 이 요청의 객체에 apps 지정되어 있어야 합니다.

    데이터 형식: 문자열 배열

    plans.name 개체가 plans 지정된 경우 필수입니다. 매개변수에 지정된 plans.app 애플리케이션과 연결할 계획의 이름입니다. 이 계획은 인스턴스에서 ServiceNow 이미 검색되어야 합니다.

    데이터 유형: 문자열

    plans.project plans 객체가 지정되고 plans.tool이 프로젝트 엔터티(예: ADO 도구)를 지원하는 경우 필요합니다. 고유한 계획/도구 식별자를 생성하기 위해 파이프라인과 연결하는 도구입니다. 매개 변수 값은 프로젝트 [sn_devops_project] 테이블의 프로젝트에서 파생되어야 합니다.

    데이터 유형: 문자열

    plans.tool 개체가 plans 지정된 경우 필수입니다. 고유한 계획/도구 식별자를 생성하기 위해 계획과 연결할 도구입니다.

    데이터 유형: 문자열

    리포지토리 애플리케이션과 연결된 리포지토리를 정의하는 객체의 배열입니다. repositories 개체에 app 매개 변수가 포함되어 있으면 리포지토리를 애플리케이션에 매핑합니다.

    데이터 유형: 배열

    "repositories": [{
      "app": "String",
      "name": "String",
      "tool": "String"
    }]
    repositories.app 개체가 repositories 지정된 경우 필수입니다. 이 리포지토리와 연결할 애플리케이션의 이름입니다. 응용 프로그램이 이미 만들어졌거나 이 요청의 개체에 apps 지정되어 있어야 합니다.

    데이터 유형: 문자열

    repositories.name 개체가 repositories 지정된 경우 필수입니다. 매개변수에 지정된 repositories.app 애플리케이션과 연결할 리포지토리의 이름입니다. 이 리포지토리는 인스턴스에서 ServiceNow 이미 검색된 상태여야 합니다.

    데이터 유형: 문자열

    리포지토리.프로젝트 리포지토리 개체가 지정되고 repositories.tool 프로젝트 엔터티(예: ADO 도구)를 지원하는 경우에 필요합니다. 고유한 리포지토리/도구 식별자를 만들기 위해 리포지토리와 연결할 도구입니다. 매개 변수 값은 프로젝트 [sn_devops_project] 테이블의 프로젝트에서 파생되어야 합니다.

    데이터 유형: 문자열

    리포지토리.도구 개체가 repositories 지정된 경우 필수입니다. 고유한 리포지토리/도구 식별자를 생성하기 위해 리포지토리와 연결할 사용자에게 친숙한 도구 이름입니다. 도구는 인스턴스에 이미 생성 ServiceNow 되어 있어야 합니다.

    데이터 유형: 문자열

    artifactRepositories.app artifactRepositories 객체가 지정된 경우 필수입니다. 이 아티팩트 리포지토리와 연결할 애플리케이션의 이름입니다. 응용 프로그램이 이미 만들어졌거나 이 요청의 개체에 지정되어 있어야 합니다.

    데이터 유형: 문자열

    artifactRepositories.name artifactRepositories 객체가 지정된 경우 필수입니다. 매개변수에 지정된 artifactRepositories애플리케이션과 연결할 artifactRepositories의 이름.app. 이 아티팩트 리포지토리는 ServiceNow 인스턴스에서 이미 검색되어야 합니다.

    데이터 유형: 문자열

    artifactRepositories.tool artifactRepositories 객체가 지정된 경우 필수입니다. 고유한 아티팩트를 생성하기 위해 artifactRepositories와 연결할 사용자 친화적인 도구 이름Repositories /tool 식별자입니다. 도구는 ServiceNow 인스턴스에 이미 생성되어 있어야 합니다.

    데이터 유형: 문자열

    artifactRepositories.project artifactRepositories 개체가 지정되고 프로젝트 엔터티(예: ADO 도구)를 repositories.tool 지원하는 경우 필수입니다. 고유한 파이프라인/도구 식별자를 생성하기 위해 연결할 artifactRepositories 도구입니다.

    데이터 유형: 문자열

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 52. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    컨텐츠-형식 요청 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 53. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 54. 상태 코드
    상태 코드 설명
    202 온보딩 요청이 성공적으로 생성되었습니다.

    응답 본문 매개변수

    이름 설명
    결과 온보딩 요청의 결과입니다.
    데이터 유형: 객체
    "result": {
      "code": "String",
      "details": "String",
      "errors": {Object],
      "onboardingRequestID": "String",
      "status": "String"
    }
    결과.코드 HTTP 상태 코드입니다.

    데이터 유형: 문자열

    결과.상세정보 온보딩 요청에 대한 상세 정보입니다.

    데이터 유형: 문자열

    결과.오류 발생한 오류에 대한 설명입니다.

    데이터 유형: 객체

    결과.오류.메시지 오류 메시지.

    데이터 유형: 문자열

    result.onboardingRequestID 온보딩 요청의 고유 식별자입니다. /devops/onboarding/status 엔드포인트를 호출하여 연결된 온보딩 프로세스의 상태를 가져올 때 이 값을 사용합니다.

    데이터 유형: 문자열

    결과.상태 온보딩 요청의 상태(성공 또는 실패)입니다.

    데이터 유형: 문자열

    cURL 요청

    이 예제에서는 Bike Rental Service 애플리케이션을 만들고 Jenkins 파이프라인 Bike Rentals, GitHub 리포지토리 nowDevops01/CorpSite 및 Azure 플랜 testPlan_Bike_Rental와 연결합니다.

    curl -X POST "https://servicenow-instance/api/sn_devops/v1/devops/onboarding/app" \ 
    -H "Accept: application/json" \ 
    -H "Content-Type: application/json" \ 
    -u "username":"password" \ 
    -d "{ 
      "apps": [ 
        { 
          "name": "Bike Rental Service" 
        } 
      ] 
      "pipelines": [ 
        { 
          "tool": "Primary Jenkins", 
          "name": "Bike Rentals", 
          "app": "Bike Rental Service", 
          "changeSteps": [ 
            { 
              "name": "Prod", 
              "type": "deploy", 
              "changeApprovalGroup": "Change Management", 
              "changeType": "normal" 
            } 
          ] 
        } 
      ], 
      "repositories": [ 
        { 
          "tool": "Primary GitHub", 
          "name": "nowDevops01/CorpSite", 
          "app": "Bike Rental Service" 
        } 
      ] 
      "plans": [ 
        { 
          "tool": "Primary Azure", 
          "name": "testPlan_Bike_Rental", 
    "project": "DemoProjecttt", 
          "apps": [ 
            "Bike Rental Service" 
          ] 
        } 
      ] 
    "artifactRepositories": [ 
    { 
    "tool": "AdoTool", 
    "name": "empb5-sonar", 
    "apps": [ 
    "appXXXXtz" 
    ] 
    } 
    ] 
     
      "credentials" : { 
        "name": "devops_user", 
        "password": "devops_password" 
      }  
    } 

    출력:

    { 
      "result":{ 
        "status": "Success", 
        "details": "Onboarding request has been created. Please use the /status api and the onboarding request number to get the status of the request", 
        "onboardingRequestID": "IBE0001045", 
        "code": "202" 
      } 
    } 

    DevOps - POST /devops/onboarding/tool

    서비스에서 비동기식으로 처리 DevOps 되는 온보딩 도구 이벤트를 생성합니다.

    요청이 게시되는 도구의 유형에 따라 엔드포인트는 다음 작업을 수행합니다.
    • 연결된 ServiceNow 인스턴스 내에 도구를 작성합니다.
    • 도구에 연결
    • 도구 구성을 시도합니다(연결에 성공한 경우에만).
    • 도구를 검색합니다(연결에 성공한 경우에만)
    이러한 모든 작업은 도구에 따라 다르며 지정된 도구의 통합 기능에 따라 실행됩니다.

    도구 온보딩 매트릭스

    이 엔드포인트에 대한 반환 결과는 요청이 게시되었는지 여부만 나타내며 연결된 도구가 만들어졌는지 여부는 나타내지 않습니다. 실제 도구 생성은 비동기식으로 처리됩니다. 도구 생성 및 기타 모든 작업의 상태를 가져오려면 /devops/onboarding/status 엔드포인트를 호출하고 이 엔드포인트에서 onboardingRequestID 반환되는 매개변수를 전달해야 합니다.

    이 엔드포인트에 액세스하려면 먼저 관리자가 인스턴스에서 도구를 설정하도록 연결 및 자격 증명 별칭(CreateDevOpsTool)을 구성해야 DevOps 합니다. 자세한 내용은 DevOps Change Velocity 설치를 참조하십시오. 또한 호출 엔터티에는 devops.integration.user 역할이 있어야 합니다.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/onboarding/tool

    기본 URL: /api/sn_devops/devops/onboarding/tool

    지원되는 요청 매개변수

    표 55. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 56. 쿼리 매개변수
    이름 설명
    없음
    표 57. 요청 본문 매개변수
    이름 설명
    credentials 필수 웹후크 생성에 사용할 자격 증명입니다. 이 도구는 생성된 웹후크를 사용하여 알림을 보냅니다.

    데이터 유형: 객체

    "credentials": {
      "name": "String",
      "password": "String"
    }
    credentials.name 필수. ServiceNow 엔드포인트를 요청하는 사용자의 식별자입니다. 사용자 [sys_user] 테이블에 있습니다. 이 사용자에게는 devops.integration.user 역할이 있어야 합니다. 버전 1.34.1부터 이 사용자에게 sn_devops.admin 역할이 있어야 합니다.

    데이터 유형: 문자열

    자격 증명.암호 필수 매개변수에 지정된 사용자의 암호입니다 credenitals.name .

    데이터 유형: 문자열

    도구 필수 연결된 ServiceNow 인스턴스 내에서 작성할 도구를 정의하는 객체의 배열입니다. 단일 요청으로 하나 이상의 도구를 생성할 수 있습니다.

    데이터 유형: 배열

    "tools": [{
      "name": "String",
      "password": "String",
      "type": "String",
      "useMidServer": Boolean,
      "username": "String",
      "url": "String"
    }]
    tools.name 필수 작성할 도구의 사용자 친화적 이름 또는 레이블입니다. 이 이름은 서비스에서 도구를 DevOps 식별하는 데 사용됩니다.

    데이터 유형: 문자열

    도구.암호 Agile 도구를 제외하고 필요합니다. 도구에 액세스하는 데 사용할 암호입니다. 지원되는 인증은 기본 및 토큰입니다. OAuth는 지원되지 않습니다.

    데이터 유형: 문자열

    도구.유형 필수 만들 도구의 유형입니다(예: GitHub 또는 BitBucket). 지정된 값은 도구 통합 [sn_devops_tool_integration] 테이블의 도구 레이블 중 하나여야 합니다.

    데이터 유형: 문자열

    tools.useMidServer 도구가 를 통해 연결되는지 여부를 나타내는 플래그입니다 MID 서버.

    유효한 값은 다음과 같습니다.

    • true: 를 MID 서버통해 연결합니다.
    • false: 를 MID 서버통해 연결되지 않습니다.

    데이터 유형: 부울

    도구.사용자 이름 Agile 도구를 제외하고 필요합니다. 이 엔드포인트를 통해 도구에 액세스하는 데 사용할 사용자 이름입니다.

    데이터 유형: 문자열

    도구.url Agile 도구를 제외하고 필요합니다. 생성할 도구의 URL입니다. 서비스는 DevOps 이 URL을 사용하여 도구와 통합합니다. "Azure DevOps" 도구를 tools.url 사용하는 경우 ADO 조직 URL 또는 ADO 프로젝트 URL을 포함할 수 있습니다.

    ADO 조직 URL을 제공할 때 API는 지정된 조직의 모든 프로젝트를 검색하고 프로젝트를 구성하지 않습니다. ADO 프로젝트 URL을 제공할 때 API는 프로젝트와 관련된 엔터티(예: 파이프라인, 리포지토리 및 계획)를 검색하고 개체가 credentials 있는 경우 프로젝트를 구성합니다. API에 프로젝트 구성을 건너뛰도록 명시적으로 지시하려면 플래그 configureTool (type: boolean)를 false로 구성합니다. 페이로드에 명시적으로 제공되지 않았거나 true로 설정된 경우 configureTool 도구가 자동으로 구성됩니다.

    데이터 유형: 문자열

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 58. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    컨텐츠-형식 요청 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 59. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 60. 상태 코드
    상태 코드 설명
    202 온보딩 요청이 성공적으로 생성되었습니다.

    응답 본문 매개변수

    이름 설명
    결과 온보딩 요청의 결과입니다.
    데이터 유형: 객체
    "result": {
      "code": "String",
      "details": "String",
      "errors": {Object},
      "onboardingRequestID": "String",
      "status": "String"
    }
    결과.코드 HTTP 상태 코드입니다.

    데이터 유형: 문자열

    결과.상세정보 온보딩 요청에 대한 자세한 메시지입니다.

    데이터 유형: 문자열

    결과.오류 발생한 오류에 대한 설명입니다.

    데이터 유형: 객체

    결과.오류.메시지 오류 메시지.

    데이터 유형: 문자열

    result.onboardingRequestID 온보딩 요청의 고유 식별자입니다. /devops/onboarding/status 엔드포인트를 호출할 때 이 값을 사용하여 연결된 도구 온보딩 프로세스의 상태를 가져옵니다.

    데이터 유형: 문자열

    결과.상태 온보딩 요청의 상태(성공 또는 실패)입니다.

    데이터 유형: 문자열

    cURL 요청

    다음 예제에서는 GitHub를 온보딩하는 방법을 보여 줍니다.

    curl -X POST "https://servicenow-instance/api/sn_devops/v1/devops/onboarding/tool" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -u "username":"password" \
    -d {
      "tool":[{
        "name": "Primary GitHub",
        "type": "GitHub",
        "url": "https"//api.github.com",
        "username": "username",
        "password": "password",
        "useMidServer": false 
      }]
      "credentials" : {
        "name": "devops_user",
        "password": "devops_password"
      }
    }

    {
      "result":{
        "status": "Success",
        "details": "Onboarding request has been created. Please use the /status api and the onboarding request number to get the status of the request",
        "onboardingRequestID": "IBE0001041",
        "code": "202"
      }
    }

    DevOps - POST /devops/orchestration/changeControl

    변경 통제 하에 있는 오케스트레이션 작업에 대한 인스턴스와 ServiceNow 콜백을 등록합니다. 이는 변경 요청에 대한 결정이 내려진 후에 호출할 수 있습니다.

    이 엔드포인트를 호출하기 전에 인스턴스에서 ServiceNow 오케스트레이션 작업을 만들어야 합니다. 검색을 통해 또는 엔드포인트를 DevOps - POST /devops/orchestration/stepMapping 호출하여 이 작업을 만들 수 있습니다. 또한 오케스트레이션 작업이 이전에 정의된 파이프라인 단계에 연결되어 있고 변경 제어가 활성화되어 있는지 확인해야 합니다(앱 단계 양식에서 변경 제어 옵션 선택). 자세한 내용은 DevOps 변경 가속화를 참조하세요.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/orchestration/changeControl

    기본 URL: /api/sn_devops/devops/orchestration/changeControl

    지원되는 요청 매개변수

    표 61. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 62. 쿼리 매개변수
    이름 설명
    toolId 필수 지정된 작업을 변경 제어 하에 배치할 도구의 DevOps Sys_id입니다. 오케스트레이션 도구 sn_devops_orchestration_tool 테이블에 있습니다.

    데이터 유형: 문자열

    도구 유형 도구의 유형입니다.

    유효한 값: 도구를 식별하는 모든 값입니다(예: "jenkins").

    데이터 유형: 문자열

    표 63. 요청 본문 매개변수
    이름 설명
    콜백 URL 필수 연결된 변경 요청 승인 프로세스가 완료된 후 인스턴스가 ServiceNow 콜백할 수 있는 URL입니다. 이 콜백은 승인 결과에 따라 파이프라인 실행을 계속할지 여부를 허용해야 합니다.

    데이터 유형: 문자열

    changeRequestDetails 변경 요청을 종결할 때 설정할 필드의 이름-값 쌍입니다. 이 객체는 다음을 제외한 변경 요청 기록의 모든 필드를 포함할 수 있습니다.
    • 영향도
    • 번호
    • 위험
    • risk_impact_analysis
    • sys_id

    이러한 필드가 요청에 포함된 경우 엔드포인트는 400 오류를 반환하고 변경 요청은 업데이트되지 않습니다. 또한 다른 필수 필드를 설정해야 하는 필드를 포함하고 해당 필드가 전송되지 않은 경우 나중에 파이프라인을 처리하는 동안 요청이 실패합니다. 이 실패는 변경 요청의 작업 메모에 다음과 같은 특정 변경 요청에 대한 오류 메시지와 함께 기록됩니다. 변경 요청 업데이트 실패 사유: <플랫폼의 오류 메시지>. 변경 요청 및 관련 단계 실행을 취소하는 중입니다.

    또한 이 객체에 부울 매개변수 setCloseCode 를 전달하여 연결된 변경 요청 기록에 대한 종결 정보를 설정할지 여부를 지정할 수 있습니다.
    • true로 설정하면 close_code 필드는 작업 상태로 설정되고 close_notes 필드는 관련 변경 요청 기록의 단계 실행에 대한 링크로 설정됩니다. 기본값은 true입니다.
    • false로 설정하면 close_code 및 close_notes 필드가 설정되지 않고 단계 실행에 대한 링크가 work_notes 필드에 설정됩니다.

    데이터 유형: 객체

    isMultiBranch (영문) 오케스트레이션 도구가 Jenkins인 경우 프로젝트가 다중 분기 형식인지 여부를 나타내는 플래그입니다.
    유효한 값은 다음과 같습니다.
    • true: 프로젝트가 다중 분기 형식입니다.
    • false: 프로젝트가 다중 분기 형식이 아닙니다.

    데이터 유형: 부울

    기본값: false

    orchestrationTaskDetails 필수 오케스트레이션 작업에 대한 설명입니다.

    데이터 유형: 객체

    "orchestrationTaskDetails": {
      "message": "String",
      "triggerType": "String",
      "upstreamTaskExecutionURL": "String"
    }
    orchestrationTaskDetails.message 자유 형식의 문자 메시지입니다.

    데이터 유형: 문자열

    orchestrationTaskDetails.triggerType 필수 오케스트레이션 작업이 시작된 방식입니다.

    유효한 값은 다음과 같습니다.

    • scm: Git/scm 도구 코드 커밋이 작업을 트리거했습니다.
    • 업스트림: 업스트림 작업이 이 작업을 트리거했습니다.
    • user: 사용자가 수동으로 작업을 시작했습니다.

    데이터 유형: 문자열

    orchestrationTaskDetails.upstreamTaskExecutionURL 업스트림으로 설정된 경우 triggerType 필요합니다. 업스트림 작업 실행 URL입니다.

    예: https://jenkins.mycompany.com:8080/job/Mobile-Platform-test/40/

    데이터 유형: 문자열

    orchestrationTaskURL (영문) 필수 콜백을 만들 오케스트레이션 작업의 URL입니다.

    예: https://jenkins.mycompany.com:8080/orchestration_task/Mobile-Platform-deploy/

    데이터 유형: 문자열

    상위 노드 오케스트레이션 작업이 상위 오케스트레이션 작업 내에 중첩된 하위 작업인 경우 이 값에는 상위 노드 세부 정보가 포함됩니다.

    데이터 유형: 객체

    "parentNode": {
      "id": "String",
      "name": "String",
      "upstreamStageName": "String",
      "upstreamTaskExecutionURL": "String"
    }
    parentNode.id 상위 노드의 고유 ID입니다.

    Jenkins에서 이 값은 파이프라인 단계 ID에 해당합니다.

    데이터 유형: 문자열
    parentNode.name 상위 노드의 이름입니다.

    Jenkins에서 이 값은 파이프라인 단계 이름에 해당합니다.

    데이터 유형: 문자열
    parentNode.upstreamStageName 상위 노드의 업스트림 오케스트레이션 작업 이름입니다.

    Jenkins에서 이 값은 파이프라인 단계 이름에 해당합니다.

    데이터 유형: 문자열
    parentNode.upstreamTaskExecutionURL 상위 노드의 업스트림 작업 실행에 대한 URL입니다.

    Jenkins에서 이 값은 파이프라인 단계 실행 URL에 해당합니다.

    데이터 유형: 문자열
    parent스테이지 이름 오케스트레이션 작업이 상위 오케스트레이션 작업 내에 중첩된 하위 작업인 경우 상위 오케스트레이션 작업의 이름입니다.

    데이터 유형: 문자열

    parentStageURL (영문) 오케스트레이션 작업이 상위 오케스트레이션 작업 내에 중첩된 하위 작업인 경우 상위 오케스트레이션 작업의 URL입니다.

    데이터 유형: 문자열

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 64. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. 지원되는 유형은 application/json 또는 application/xml입니다.

    기본값: application/json

    권한 부여
    v2부터 이 API는 토큰 기반 인증을 지원합니다. 도구 [sn_devops_tool] 테이블에 있는 도구 기록에서 토큰 복사 버튼을 클릭하여 토큰을 얻을 수 있습니다. 그런 다음 토큰을 Authorization: sn_devops 형식의 권한 부여 헤더에서 사용할 수 있습니다. DevOpsToken <tool_sys_id>:<tool_token>입니다.
    주:
    토큰이 있는 인증 헤더 외에 기본 인증 세부 정보(사용자 이름 및 암호)가 제공되면 기본 인증이 우선합니다.

    인스턴스에서 devops.system 사용자를 사용할 수 없는 경우 토큰 기반 인증이 성공한 후 이 사용자로 전환 속성을 사용합니다. 이 속성을 사용하면 토큰 인증을 완료하는 데 필요한 sn_devops.integration 역할을 가진 모든 사용자를 설정할 수 있습니다. 자세한 내용은 DevOps Change Velocity properties 문서를 참조하십시오.

    컨텐츠-형식 요청 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 65. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 66. 상태 코드
    상태 코드 설명
    201 요청이 성공적으로 완료되었습니다.
    400 잘못된 요청입니다. 잘못된 요청 유형 또는 잘못된 형식의 요청이 탐지되었습니다.
    401 인증이 잘못되었거나 누락되었습니다.
    500 내부 서버 오류입니다. 요청을 처리하는 동안 예기치 않은 오류가 발생했습니다. 응답에는 오류에 대한 추가 정보가 포함되어 있습니다.

    응답 본문 매개변수

    이름 설명
    변경 제어 오케스트레이션 작업에 변경 제어가 적용되는지 여부를 나타내는 플래그입니다.
    가능한 값:
    • true: 변경 통제 하에 있습니다.
    • false: 변경 제어 대상이 아님

    데이터 유형: 부울

    cURL 요청

    curl -X POST "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/changeControl?toolId=f0ca45679323008b52f3b457415ae6&toolType=jenkins"
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{
      \"orchestrationTaskURL\":\"https://jenkins.mycompany.com:8080/orchestration task/Mobile-Platform-deploy/\",
      \"callbackURL\":\"https://jenkins.mycompany.com:8080/sn-devops/964aca59-0cae-4d9b-a36d-5929f426cf31\",
      \"orchestrationTaskDetails\":{
        \"message\":\"Started by upstream project \\\"Mobile-Platform-test\\\" build number 40\",
        \"triggerType\":\"upstream\",
        \"upstreamTaskExecutionURL\":\"https://jenkins.mycompany.com:8080/job/Mobile-Platform-test/40/\"}
    }"

    응답 본문입니다.

    {
    "result": {
       "changeControl": true,
       "status": "Success"
       }
    }

    cURL 요청

    이 예는 변경 요청을 닫을 때 객체의 changeRequestDetails 필드를 전달하는 방법을 보여줍니다.

    curl -X POST "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/changeControl?toolId=f0ca45679323008b52f3b457415ae6&toolType=jenkins"
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{
      "callbackURL":"http://192.168.0.4:3000/jenkins/sn-devops/pipeline_839b7605-b98d-4831-bc87-96829de7da37",
      "orchestrationTaskURL":"http://192.168.0.4:3000/jenkins/job/java_sample_tests#deploy/",
      "isMultiBranch":"false",
      "orchestrationTaskName":"java_sample_tests#deploy",
      "orchestrationTaskDetails":{
        "triggerType":"upstream",
        "upstreamTaskExecutionURL":"http://192.168.0.4:3000/jenkins/job/java_sample_tests/129/execution/node/35/wfapi/describe",
        "taskExecutionURL":"http://192.168.0.4:3000/jenkins/job/java_sample_tests/129/execution/node/50/wfapi/describe"
      },
      "changeRequestDetails":{
        "setCloseCode":false,
        "attributes":{
          "sys_created_by":"1832fbe1d701120035ae23c7ce610369",
          "sys_updated_by":"56826bf03710200044e0bfc8bcbe5dca",
          "requested_by":{
             "name":"test user1"
          },
          "watch_list":[
            {
              "name":"test user1"
            },
            {
              "name":"test user2"
            },
            {
              "name":"Alejandra Prenatt"
            },
              "56826bf03710200044e0bfc8bcbe5dca"
          ],
          "work_notes_list":[
            "56826bf03710200044e0bfc8bcbe5dca",
            "46c6f9efa9fe198101ddf5eed9adf6e7",
            "d8f57f140b20220050192f15d6673a98"
          ],
          "assigned_to":"1832fbe1d701120035ae23c7ce610369",
          "category":"Service",
          "sys_created_on":"2021-02-09 18:58:41",
          "priority":"2",
        }
      }
    }"

    응답 본문입니다.

    {
    "result": {
       "changeControl": true,
       "status": "Success"
       }
    }

    DevOps - POST /devops/orchestration/stepMapping

    전달되는 정보가 오케스트레이션 작업을 만드는 데 유효하고 이전에 만든 단계에 연결하는 데 유효한지 확인합니다. 둘 다 유효하면 오케스트레이션 작업을 만들고 연결을 만듭니다.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/orchestration/stepMapping

    기본 URL: /api/sn_devops/devops/orchestration/stepMapping

    지원되는 요청 매개변수

    표 67. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 68. 쿼리 매개변수
    이름 설명
    toolId 필수 오케스트레이션 도구의 Sys_id입니다. 오케스트레이션 도구 [sn_devops_orchestration_tool] 테이블에 있습니다.

    데이터 유형: 문자열

    도구 유형 필수 도구의 유형입니다.

    유효한 값: jenkins

    데이터 유형: 문자열

    표 69. 요청 본문 매개변수
    이름 설명
    분기 이름 오케스트레이션 작업과 연결된 분기의 이름입니다.

    데이터 유형: 문자열

    isMultiBranch (영문) 오케스트레이션 도구가 Jenkins인 경우 프로젝트가 다중 분기 형식인지 여부를 나타내는 플래그입니다.
    유효한 값은 다음과 같습니다.
    • true: 프로젝트가 다중 분기 형식입니다.
    • false: 프로젝트가 다중 분기 형식이 아닙니다.

    데이터 유형: 부울

    기본값: false

    상위 노드 오케스트레이션 작업이 상위 오케스트레이션 작업 내에 중첩된 하위 작업인 경우 이 값에는 상위 노드 세부 정보가 포함됩니다.

    데이터 유형: 객체

    "parentNode": {
      "id": "String",
      "name": "String",
      "upstreamStageName": "String",
      "upstreamTaskExecutionURL": "String"
    }
    parentNode.id 상위 노드의 고유 ID입니다.

    Jenkins에서 이 값은 파이프라인 단계 ID에 해당합니다.

    데이터 유형: 문자열
    parentNode.name 상위 노드의 이름입니다.

    Jenkins에서 이 값은 파이프라인 단계 이름에 해당합니다.

    데이터 유형: 문자열
    parentNode.upstreamStageName 상위 노드의 업스트림 오케스트레이션 작업 이름입니다.

    Jenkins에서 이 값은 파이프라인 단계 이름에 해당합니다.

    데이터 유형: 문자열
    parentNode.upstreamTaskExecutionURL 상위 노드의 업스트림 작업 실행에 대한 URL입니다.

    Jenkins에서 이 값은 파이프라인 단계 실행 URL에 해당합니다.

    데이터 유형: 문자열
    parent스테이지 이름 오케스트레이션 작업이 상위 오케스트레이션 작업 내에 중첩된 하위 작업인 경우 상위 오케스트레이션 작업의 이름입니다.

    데이터 유형: 문자열

    parentStageURL (영문) 오케스트레이션 작업이 상위 오케스트레이션 작업 내에 중첩된 하위 작업인 경우 상위 오케스트레이션 작업의 URL입니다.

    데이터 유형: 문자열

    orchestrationTaskName (오케스트레이션 작업 이름) 필수 오케스트레이션 작업의 이름입니다. 이것은 에서 참조된 것과 동일한 작업입니다 orchestrationTaskURL.

    데이터 유형: 문자열

    orchestrationTaskURL (영문) 필수 오케스트레이션 작업의 URL입니다.

    예: https://jenkins.mycompany.com:8080/orchestration_task/Mobile-Platform-deploy/

    데이터 유형: 문자열

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 70. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    권한 부여
    v2부터 이 API는 토큰 기반 인증을 지원합니다. 도구 [sn_devops_tool] 테이블에 있는 도구 기록에서 토큰 복사 버튼을 클릭하여 토큰을 얻을 수 있습니다. 그런 다음 토큰을 Authorization: sn_devops 형식의 권한 부여 헤더에서 사용할 수 있습니다. DevOpsToken <tool_sys_id>:<tool_token>입니다.
    주:
    토큰이 있는 인증 헤더 외에 기본 인증 세부 정보(사용자 이름 및 암호)가 제공되면 기본 인증이 우선합니다.

    인스턴스에서 devops.system 사용자를 사용할 수 없는 경우 토큰 기반 인증이 성공한 후 이 사용자로 전환 속성을 사용합니다. 이 속성을 사용하면 토큰 인증을 완료하는 데 필요한 sn_devops.integration 역할을 가진 모든 사용자를 설정할 수 있습니다. 자세한 내용은 DevOps Change Velocity properties 문서를 참조하십시오.

    컨텐츠-형식 요청 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 71. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 72. 상태 코드
    상태 코드 설명
    201 성공입니다. 요청이 성공적으로 처리되었습니다.
    400 잘못된 요청입니다. 잘못된 요청 유형 또는 잘못된 형식의 요청이 탐지되었습니다.
    401 승인되지 않았습니다. 사용자 자격 증명이 잘못되었거나 전달되지 않았습니다.
    500 내부 서버 오류입니다. 요청을 처리하는 동안 예기치 않은 오류가 발생했습니다. 응답에는 오류에 대한 추가 정보가 포함되어 있습니다.

    응답 본문 매개변수

    요소 설명
    상태 검증이 성공했는지 여부를 나타내는 플래그입니다.
    유효한 값은 다음과 같습니다.
    • true: 검증에 성공했습니다.
    • false: 검증에 성공하지 못했습니다.

    데이터 유형: 부울

    step유효 전송된 정보가 유효한지 여부를 나타내는 플래그입니다.
    유효한 값은 다음과 같습니다.
    • true: 전송된 정보가 유효합니다.
    • false: 전송된 정보가 유효하지 않습니다.

    데이터 유형: 부울

    샘플 cURL 요청

    curl -X POST "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/stepMapping?toolId=f0ca45679323008b52f3b457415ae6&toolType=jenkins"
    -H "Accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{
      \"orchestrationTaskURL\":\" http://127.0.0.1:8090/jenkins/job/CorpSite/job/primary#deploy PROD/\",
      \"orchestrationTaskName\":\" primary#deploy PROD\"
    }"

    정보가 유효한 경우 결과입니다.

    {
      "result": {
        "stepValid": true,
        "status": "Success"
      }
    }

    정보가 잘못된 경우 결과가 발생합니다.

    {
      "result": {
        "stepValid": false,
        "status": "Success"
      }
    }

    DevOps - POST /devops/package/registration

    오케스트레이션 도구가 지정된 아티팩트 버전을 포함하는 새 아티팩트 패키지를 만들 수 있도록 합니다.

    아티팩트 패키지는 변경 요청을 볼 때 변경 승인자에 대한 커밋을 표시하는 데 사용됩니다. 커밋이 변경 요청에 표시되려면 변경 승인을 포함하는 스테이지 이전의 스테이지에서 패키지를 만들어야 합니다.

    패키지 등록 요청에 포함된 모든 아티팩트 버전은 이미 DevOps에 등록되어 있어야 합니다. 아티팩트 버전 등록에 대한 자세한 내용은 을 참조하십시오 DevOps - POST /devops/artifact/registration.

    일반적으로 패키지에 포함할 아티팩트 버전을 식별할 때 및 artifacts.name 매개변수를 전달합니다artifacts.version. 또한 이 엔드포인트의 고급 기능을 사용하여 버전 자체가 아닌 각 아티팩트 버전에 대한 빌드 세부 정보를 전달할 수 있습니다. 아티팩트별 빌드 세부정보에는 다음 매개변수가 포함됩니다.
    • artifacts.pipelineName 또는 artifacts.projectName
    • artifacts.taskExecutionNumber
    • artifacts.stageName
    • artifacts.branchName
    엔드포인트는 이러한 아티팩트별 빌드 세부 정보를 사용하여 작업 실행 정보를 조회한 다음, 연결된 버전을 패키지에 복사합니다. 아티팩트가 아닌 특정 빌드 세부 정보(pipelineNameprojectName또는 , taskExecutionNumber, branchNamestageName)를 사용하여 생성된 패키지를 파이프라인 실행에 연결합니다.
    주:
    이 엔드포인트는 업데이트를 지원하지 않습니다. 이름이 같은 패키지가 이미 있는 경우에도 항상 새 패키지를 만듭니다.

    아티팩트 패키지에 대한 자세한 내용은 릴리스에 DevOps 변경 가속화 사용을 참조하세요.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/package/registration

    기본 URL: /api/sn_devops/devops/package/registration

    지원되는 요청 매개변수

    표 73. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 74. 쿼리 매개변수
    이름 설명
    orchestrationToolId 필수 아티팩트 패키지와 연결된 오케스트레이션 도구의 Sys_id입니다. 오케스트레이션 도구 [sn_devops_orchestration_tool] 테이블에 있습니다. 엔드포인트는 이 정보를 사용하여 작업 실행 정보를 찾습니다.

    데이터 유형: 문자열

    toolId 아티팩트 패키지와 연결된 아티팩트 도구의 Sys_id입니다. 아티팩트 도구 [sn_devops_artifact_tool] 테이블에 있습니다.

    데이터 유형: 문자열

    표 75. 요청 본문 매개변수
    이름 설명
    아티팩트 하나 이상의 항목이 필요합니다. 각 개체가 패키지에 포함할 아티팩트 버전을 고유하게 식별하는 개체의 배열입니다.

    데이터 유형: 배열

    "artifacts": [
    {
      "branchName": "String",
      "name": "String",
      "pipelineName": "String",
      "projectName": "String",
      "repositoryName": "String",
      "stageName": "String",
      "taskExecutionNumber": "String",
      "version": "String"
    ]
    artifacts.branchName (아티팩트.브랜치 이름) 전달되지 않고 다중 분기 설정인 경우 artifact.version 필요합니다. 아티팩트 버전이 저장되는 분기의 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160

    기본값: Null

    artifacts.name 필수 아티팩트 파일 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160자

    artifacts.pipelineName (아티팩트.파이프라인 이름) 통과되지 않은 경우 artifact.versionartifacts.projectName 필수입니다. 파이프라인 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160

    기본값: Null

    artifacts.projectName (아티팩트.프로젝트 이름) 통과되지 않은 경우 artifact.versionartifact.pipelineName 필수입니다. 자유 형식 프로젝트 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160

    기본값: Null

    artifacts.repositoryName 필수 아티팩트 리포지토리 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160자

    artifacts.stageName (아티팩트.스테이지 이름) 전달되지 않은 경우 artifact.version 필요합니다. 스테이지 이름.

    데이터 유형: 문자열

    최대 길이: 160

    기본값: Null

    artifacts.taskExecutionNumber 전달되지 않은 경우 artifact.version 필요합니다. 파이프라인 실행 번호입니다.

    데이터 유형: 문자열

    기본값: Null

    artifacts.version (아티팩트.버전) 빌드 상세 정보가 제공되지 않은 경우 필요합니다. 아티팩트의 버전입니다.

    데이터 유형: 문자열

    형식: <주 버전>.<부 형식>

    기본값: Null

    분기 이름 다중 분기 프로젝트인 경우 필요합니다. 아티팩트가 저장되는 리포지토리의 분기 이름입니다.

    데이터 유형: 문자열

    최대 길이: 200자

    기본값: Null

    이름 필수 패키지의 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160자

    pipelineName 전달되지 않은 경우 projectName 필요합니다. 파이프라인 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160자

    기본값: Null

    projectName 전달되지 않은 경우 pipelineName 필요합니다. 자유 형식 프로젝트 이름입니다.

    데이터 유형: 문자열

    최대 길이: 160

    기본값: Null

    스테이지 이름 전달된 경우 pipelineName 필요합니다. 스테이지 이름.

    데이터 유형: 문자열

    최대 길이: 160자

    기본값: Null

    작업 실행 번호 필수 파이프라인 실행 번호입니다.

    데이터 유형: 문자열

    최대 길이: 128자

    기본값: Null

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 76. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    권한 부여
    v2부터 이 API는 토큰 기반 인증을 지원합니다. 도구 [sn_devops_tool] 테이블에 있는 도구 기록에서 토큰 복사 버튼을 클릭하여 토큰을 얻을 수 있습니다. 그런 다음 토큰을 Authorization: sn_devops 형식의 권한 부여 헤더에서 사용할 수 있습니다. DevOpsToken <tool_sys_id>:<tool_token>입니다.
    주:
    토큰이 있는 인증 헤더 외에 기본 인증 세부 정보(사용자 이름 및 암호)가 제공되면 기본 인증이 우선합니다.

    인스턴스에서 devops.system 사용자를 사용할 수 없는 경우 토큰 기반 인증이 성공한 후 이 사용자로 전환 속성을 사용합니다. 이 속성을 사용하면 토큰 인증을 완료하는 데 필요한 sn_devops.integration 역할을 가진 모든 사용자를 설정할 수 있습니다. 자세한 내용은 DevOps Change Velocity properties 문서를 참조하십시오.

    컨텐츠-형식 요청 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 77. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 78. 상태 코드
    상태 코드 설명
    200 성공. 응답 본문의 성공입니다.
    201 만든. 응답 본문의 성공입니다.
    400 잘못된 요청입니다. 요청 URI가 시스템의 API와 일치하지 않거나 알 수 없는 이유로 작업이 실패했습니다. 잘못된 헤더로 인해 이 오류가 발생할 수도 있습니다.
    500 내부 서버 오류입니다. 요청을 처리하는 동안 예기치 않은 오류가 발생했습니다. 응답에는 오류에 대한 추가 정보가 포함되어 있습니다.

    응답 본문 매개변수

    이름 설명
    response 패키지 등록 요청의 결과입니다.

    데이터 유형: 객체

    "response": {
      "artifact_register_requests": {Object},
      "sn_devops_m2m_artifact_version_package": {Object},
      "sn_devops_package": {Object}
    }
    response.artifact_register_requests 처리를 완료하지 않고 아티팩트 준비 요청 [sn_devops_artifact_staging] 테이블에 저장된 모든 레지스터 요청에 대한 결과입니다.

    데이터 유형: 객체

    "artifact_register_requests": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    response.artifact_register_requests.생성 요청이 패키지 스테이징 기록을 생성한 경우 생성된 스테이징 기록의 sys_ids 목록입니다.

    데이터 유형: 배열

    "create": [
      {
        "id": "String"
      }
    ]
    response.artifact_register_requests.create.id 요청에 의해 생성된 패키지 준비 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.artifact_register_requests.찾음 연결된 패키지 스테이징 기록이 이미 있는 경우 기존 기록의 sys_ids 목록입니다.
    주:
    기존 패키지는 수정되지 않습니다.

    데이터 유형: 배열

    "found": [
      {
        "id": "String"
      }
    ]
    response.artifact_register_requests.found.id 기존 패키지 스테이징 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.artifact_register_requests.업데이트 현재 사용되지 않습니다.
    response.artifact_register_requests.update.id 현재 사용되지 않습니다.
    response.sn_devops_m2m_artifact_version_package 패키지와 연결된 각 아티팩트 버전에 대한 결과입니다.

    데이터 유형: 객체

    "sn_devops_m2m_artifact_version_package": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    response.sn_devops_m2m_artifact_version_package.생성 요청에서 아티팩트 버전을 패키지에 연결하는 기록을 생성한 경우 패키지에 대한 아티팩트 버전 [sn_devops_m2m_artifact_version_package] 테이블에 생성된 기록의 sys_ids 목록입니다.

    데이터 유형: 배열

    "create": [
      {
        "id": "String"
      }
    ]
    response.sn_devops_m2m_artifact_version_package.create.id 요청에 의해 생성된 패키지에 대한 아티팩트 버전 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.sn_devops_m2m_artifact_version_package.찾음 패키지할 아티팩트 버전 테이블에 연결 기록이 이미 있는 경우 기존 연결 기록의 sys_ids 목록입니다.
    주:
    기존 기록은 수정되지 않습니다.

    데이터 유형: 배열

    "found": [
      {
        "id": "String"
      }
    ]
    response.sn_devops_m2m_artifact_version_package.found.id 패키지 기록에 대한 기존 아티팩트 버전 Sys_id입니다.

    데이터 유형: 문자열

    response.sn_devops_m2m_artifact_version_package.업데이트

    현재 사용되지 않습니다.

    response.sn_devops_m2m_artifact_version_package.update.id

    현재 사용되지 않습니다.

    response.sn_devops_package 요청 처리 중 조작된 패키지 [sn_devops_package] 테이블의 모든 패키지 기록에 대한 결과입니다.

    데이터 유형: 객체

    "sn_devops_package": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    response.sn_devops_package.생성 요청에 의해 패키지 기록이 생성된 경우 생성된 기록의 sys_ids 목록입니다.

    데이터 유형: 배열

    "create": [
      {
        "id": "String"
      }
    ]
    response.sn_devops_package.create.id 요청에 의해 생성된 패키지 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.sn_devops_package.찾음 등록 요청에 사용된 패키지 레코드가 이미 있는 경우 기존 레코드의 sys_ids 목록입니다.
    주:
    기존 기록은 수정되지 않습니다.

    데이터 유형: 배열

    "found": [
      {
        "id": "String"
      }
    ]
    response.sn_devops_package.found.id 요청에서 참조하는 기존 패키지 기록의 Sys_id입니다.

    데이터 유형: 문자열

    response.sn_devops_package.업데이트 현재 사용되지 않습니다.
    response.sn_devops_package.update.id 현재 사용되지 않습니다.
    상태 등록 요청의 상태입니다.
    가능한 값:
    • 성공: 응답 본문에 반환 결과가 포함되었습니다.
    • 오류: 응답 본문에 모든 오류 목록이 포함되어 있습니다.

    데이터 유형: 문자열

    샘플 cURL 요청

    # Example passing the artifact version
    curl -X POST "https://instance.servicenow.com/api/sn_devops/devops/package/registration?toolId=f0ca45679323008b52f3b457415ae6"\
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{\
    "name": "sentimentpackage",\
    "artifacts": [\
    {\
    "name": "sa-web.jar",\
    "repositoryName": "services-1031",\
    "version": "3.1"\
    },\
    {\
    "name": "sa-frontend.jar",\
    "repositoryName": "services-1031",\
    "version": "9.2"\
    }\
    ],\
    "pipelineName": "spring-boot-app",\
    "taskExecutionNumber": "160",\
    "stageName": "Build",\
    "branchName": "primary"\
    }"

    응답 - 패키지 작성됨:

    "result": {
    "status": "Success",
    "response": {
      "sn_devops_package": {
        "create": [
            {
              "id": "0d57367a532e00107109ddeeff7b122a"
            } 
          ],
        "update": [],
        "found": []
      },
      "sn_devops_m2m_artifact_version_package": {
        "create": [
          {
            "id": "c957367a532e00107109ddeeff7b122b"
          },
          {
            "id": "8157367a532e00107109ddeeff7b122c"
          }
        ],
        "update": [],
        "found": []
        }
      },
      "responseCode": 201
      }
    }

    샘플 cURL 요청

    # Example passing the build details
    curl -X POST "https://instance.servicenow.com/api/sn_devops/devops/package/registration?toolId=f0ca45679323008b52f3b457415ae6"
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{\
    "name": "sentimentpackage",\
    "artifacts": [\
    {\
    "name": "sa-web.jar",\
    "repositoryName": "services-1031",\
    "pipelineName": "spring-boot-app",\
    "taskExecutionNumber": "160",\
    "stageName": "Build",\
    "branchName": "primary"\
    },\
    {\
    "name": "sa-frontend.jar",\
    "repositoryName": "services-1031",\
    "pipelineName": "spring-boot-fe",\
    "taskExecutionNumber": "991",\
    "stageName": "Build",\
    "branchName": "primary"\
    }\
    ],\
    "pipelineName": "spring-boot-app",\
    "taskExecutionNumber": "160",\
    "stageName": "Build",\
    "branchName": "primary"\
    }"

    응답 - 요청 준비된 패키지 생성:

    {
    "result": {
      "status": "Success",
      "response": {
        "artifact_register_requests": {
          "create": [
            { 
              "id": "4628f276532e00107109ddeeff7b1245"
            },
            {
              "id": "4e28f276532e00107109ddeeff7b1245"
            },
            {
              "id": "ce28f276532e00107109ddeeff7b1245"
            }
          ],
          "update": [],
          "found": []
        }
      }, 
      "responseCode": 201 
     }
    }

    DevOps - POST /devops/tool/{capability}

    사용자 지정 DevOps 하위 플로우에서 처리할 수 있도록 전달된 페이로드를 인바운드 이벤트 [sn_devops_inbound] 테이블에 게시합니다.

    전달 capability 된 매개변수로 지정된 도구의 연결된 웹후크에서 이 엔드포인트를 호출합니다. 전달된 페이로드를 처리하기 위한 사용자 지정 하위 플로우가 인스턴스에 ServiceNow 이미 정의되어 있어야 합니다. 미리 정의된 일정 DevOps 에 따라 마스터 플로우는 인바운드 이벤트 테이블에서 웹후크 이벤트 정보를 선택하여 사용자 지정 하위 플로우에 전달한 다음 페이로드를 처리합니다. 사용자 지정 하위 플로우 생성에 대한 자세한 내용은 DevOps 하위 플로우 생성 섹션을 참조하세요.

    테스트 도구 통합에 대한 자세한 내용은 DevOps 테스트 도구 통합을 참조하세요.

    사용자 지정 DevOps 도구에 대해 이 엔드포인트를 호출하기 전에 sn_devops에서 handleTool()getNativeIdForOrchestrationTask() 메서드를 구현해야 합니다 . DevOpsOrchestrationToolIntegrationHandler입니다. 자세한 내용은 DevOpsOrchestrationToolIntegrationHandler - 범위 지정됨DevOpsOrchestrationToolIntegrationHandler - 범위 지정을 참조하세요.

    주:
    1.34.1 버전부터 이 API의 새 버전이 도입되었습니다. 이 API를 사용하면 적응형 인증 정책이 예상대로 실행되지 않을 수 있습니다. 이러한 정책에 대한 자세한 내용은 을 참조하십시오 Adaptive authentication.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/tool/{capability}

    기본 URL: /api/sn_devops/devops/tool/{capability}

    지원되는 요청 매개변수

    표 79. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    역량 인바운드 이벤트 테이블에 저장할 페이로드를 전달하는 도구의 유형입니다.
    유효한 값(대소문자 구분 안 함):
    • 아티팩트
    • 코드
    • 오케스트레이션
    • 계획
    • 테스트

    데이터 유형: 문자열

    표 80. 쿼리 매개변수
    이름 설명
    orchestrationToolId 옵션입니다. 관련 파이프라인이 속한 오케스트레이션 도구의 sys_id입니다. orchestrationToolId 요청 매개변수가 Test 또는 SoftwareQuality로 설정된 경우 capability 필수입니다.

    toolId 는 orchestrationToolId가 없는 경우 기본 오케스트레이션 도구입니다.

    테스트 유형 테스트로 설정된 경우 capability 필수입니다. 실행 중인 테스트의 유형입니다.

    이 매개변수에 유효한 값은 테스트 종류 [sn_devops_test_type] 테이블의 테스트 유형 열에 있는 값입니다.

    toolId 필수 엔드포인트가 호출되는 도구의 Sys_id입니다.
    표 81. 요청 본문 매개변수
    이름 설명
    도구에 따라 다름 이 도구는 페이로드의 내용을 결정합니다.

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 82. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    권한 부여
    v2부터 이 API는 토큰 기반 인증을 지원합니다. 도구 [sn_devops_tool] 테이블에 있는 도구 기록에서 토큰 복사 버튼을 클릭하여 토큰을 얻을 수 있습니다. 그런 다음 토큰을 Authorization: sn_devops 형식의 권한 부여 헤더에서 사용할 수 있습니다. DevOpsToken <tool_sys_id>:<tool_token>입니다.
    주:
    토큰이 있는 인증 헤더 외에 기본 인증 세부 정보(사용자 이름 및 암호)가 제공되면 기본 인증이 우선합니다.

    인스턴스에서 devops.system 사용자를 사용할 수 없는 경우 토큰 기반 인증이 성공한 후 이 사용자로 전환 속성을 사용합니다. 이 속성을 사용하면 토큰 인증을 완료하는 데 필요한 sn_devops.integration 역할을 가진 모든 사용자를 설정할 수 있습니다. 자세한 내용은 DevOps Change Velocity properties 문서를 참조하십시오.

    컨텐츠-형식 요청 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 83. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 84. 상태 코드
    상태 코드 설명
    201 요청이 성공적으로 완료되었습니다.
    400 잘못된 요청입니다. 잘못된 요청 유형 또는 잘못된 형식의 요청이 탐지되었습니다.
    401 인증이 잘못되었거나 누락되었습니다.
    500 내부 서버 오류입니다. 서버 측 코드에서 논리 오류가 발생했습니다.

    응답 본문 매개변수

    이름 설명
    상세 정보 모든 오류 조건에 대한 항목입니다.

    데이터 유형: 객체

    "details": {
      "errors": [Array]
    }
    상세 정보.오류 단일 오류에 대한 설명입니다.

    데이터 유형: 배열

    "errors": [
      {
        "message": "String"
      }
    ]
    상세 정보.오류.메시지 자세한 오류 메시지입니다.
    • 요청에 경로 매개 변수가 없음: 호출에 경로 매개 변수가 포함되어 있지 않습니다.
    • 요청에 역량 경로 매개변수가 없음: 역량 경로 매개변수가 호출에 포함되지 않았습니다.
    • 지원되지 않는 기능 유형: 지정된 기능 매개변수가 올바른 값이 아닙니다.

    데이터 유형: 문자열

    상태 "성공" 또는 "데이터 오류"와 같은 응답 상태입니다.

    데이터 유형: 문자열

    sys_id 인바운드 이벤트 테이블에 생성된 기록의 Sys_id입니다.

    데이터 유형: 문자열

    아티팩트에 대한 샘플 cURL 요청

    curl -X POST "https://instance.service-now.com/api/sn_devops/v1/tool/artifact?toolId=3b59043ee4ea556e6850d61bc1a77e8a" 
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{
       "artifacts": [
          {
             "name": "sp-boot-app",
             "version": "1.320",
             "semanticVersion": "1.320.0",
             "repositoryName": "sp-boot-app-repo"
          }
       ],
       "pipelineName": "spring-boot-app-gitea",
       "taskExecutionNumber": "320",
       "stageName": "Build"
    }"

    성공 응답:

    {
       "result": {
          "status": "Success",
          "sysId": "33c57245dbf68410bc8cdd384b961966"
       }
    }

    아티팩트에 대한 샘플 cURL 요청

    curl -X POST "https://instance.service-now.com/api/sn_devops/v1/tool/artifact?toolId=3b59043ee4ea556e6850d61bc1a77e8a" 
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\ 
    -d "{\
       "timestamp": "2020-01-11T00:52:01.541+0000",\
       "nodeId": "137BEECF-E1BF7BC1-90212D1C-0749A6D4-BC670F6B",\
       "initiator": "admin/172.17.0.1",\
       "repositoryName": "maven-releases29",\
       "action": "CREATED",\
       "component": {\
          "id": "2a59043ed2ea556e6850d61bc1a77c7b",\
          "componentId": "c3AtYm9vdC1hcHAtcmVwbzoyYTU5MDQzZWQyZWE1NTZlNjg1MGQ2MWJjMWE3N2M3Yg",\
          "format": "maven2",\
          "name": "sentiment-analysis-web",\
          "group": "com.spboot",\
          "version": "1.1"\
       }\
    }"

    오류 응답:

    {
       "result": {
          "status": "Data Error",
          "details": {
             "errors": [
                {
                   "message": "Unsupported capability type"
                }
             ]
          }
       }
    }

    코드에 대한 샘플 cURL 요청

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/code?toolId=8d4f56598702c510f894419d0ebb35aa&testType=junit" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
       "commits": [
          {
             "totalFiles": 1,
             "nativeIdList": [
                "49",
                "50"
             ],
             "id": "f14732d0cc854ce3ec374b97ecd4ec3c383386cd",
             "url": "https://dev.azure.com/xyzabcd/adoTests/_git/DeployableRepo/commit/f14732d0cc854ce3ec374b97ecd4ec3c383386cd",
             "apiURL": "https://dev.azure.com/xyzabcd/9fe32a65-60a5-46fe-bc8d-11a92bf059f9/_apis/git/repositories/8d7ba019-1739-431c-beb4-6025dd41f1ac/commits/f14732d0cc854ce3ec374b97ecd4ec3c383386cd",
             "message": "Fixes #49 and #50",
             "committedDate": "2022-03-23T11:59:46Z",
             "committer": {
                "email": "xyz.abcd@email.com"
             },
             "details": [
                {
                   "action": "edit",
                   "changes": "",
                   "file": "/LICENSE",
                   "additions": 0,
                   "deletions": 0,
                   "totalChanges": 0
                }
             ]
          }
       ],
       "repository": {
          "id": "8d7ba019-1739-431c-beb4-6025dd41f1ac",
          "name": "DeployableRepo",
          "url": "https://dev.azure.com/xyzabcd/adoTests/_git/DeployableRepo"
       },
       "branch": {
          "name": "refs/heads/master",
          "url": "https://dev.azure.com/xyzabcd/adoTests/_git/DeployableRepo?version=GBmaster"
       }
    }" \
    --user 'username':'passsword'
    

    성공 응답:

    {
       "result": {
          "status": "Success",
          "sysId: "1f8e586b879e85100f71cbfc0ebb3526"
       }
    }

    오케스트레이션을 위한 샘플 cURL 요청

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/orchestration?toolId=8d4f56598702c510f894419d0ebb35aa&testType=junit" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
      "toolId": "d450f5c887e609100f71cbfc0ebb35e5",
      "buildNumber": 5676,
      "nativeId": "adoTests/DeployableRepo#deploy#5676",
      "pipelineId": "2",
      "name": "adoTests/DeployableRepo#deploy",
      "id": "adoTests/DeployableRepo#deploy#5676",
      "url": "https://dev.azure.com/xyzabcd/_build/results?buildId=5676#deploy/",
      "previousAttemptUrl": "",
      "attemptNumber": 1,
      "pipelineExecutionUrl": "https://dev.azure.com/xyzabcd/_build/results?buildId=5676",
      "orchestrationTaskUrl": "https://dev.azure.com/xyzabcd/adoTests/_build?name=DeployableRepo#deploy",
      "orchestrationTaskName": "adoTests/DeployableRepo #deploy",
      "orchestrationTask": {
        "orchestrationTaskName": "adoTests/DeployableRepo#deploy",
        "toolId": "d450f5c887e609100f71cbfc0ebb35e5",
        "orchestrationTaskURL": "https://dev.azure.com/xyzabcd/adoTests/_build?name=DeployableRepo#deploy",
        "stageName": "deploy"
      },
      "upstreamTaskUrl": [],
      "result": "building",
      "startDateTime": "2022-03-23 12:01:31",
      "log": "https://dev.azure.com/xyzabcd/adoTests/_build/results?buildId=5676&view=logs&j=5264e576-3c6f-51f6-f055-fab409685f20",
      "logUrl": "https://dev.azure.com/xyzabcd/adoTests/_build/results?buildId=5676&view=logs&j=5264e576-3c6f-51f6-f055-fab409685f20"
    }" \
    --user 'username':'password'
    

    성공 응답:

    {
       "result": {
          "status": "Success",
          "sysId: "37dfd8a7879e85100f71cbfc0ebb35c0"
       }
    }

    계획에 대한 샘플 cURL 요청

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/plan?toolId=8d4f56598702c510f894419d0ebb35aa&testType=junit" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
       "id": "1053",
       "type": "bug",
       "state": "planned",
       "shortDescription": "Title - Work Item test in 1.33.3",
       "createdDateTime": "2022-03-23T10:45:53.02Z",
       "parentId": "",
       "url": "https://dev.azure.com/xyzabcd/9fe32a65-60a5-46fe-bc8d-11a92bf059f9/_workitems/edit/1053",
       "version": {
          "id": "adoTests",
          "shortDescription": "adoTests",
          "createdDateTime": "2022-03-23T10:46:12.355Z",
          "url": "https://dev.azure.com/xyzabcd/adoTests",
          "app": {
             "id": "adoTests",
             "shortDescription": "adoTests",
             "createdDateTime": "2022-03-23T10:46:12.355Z",
             "url": "https://dev.azure.com/xyzabcd/9fe32a65-60a5-46fe-bc8d-11a92bf059f9/_workitems/edit/1053"
          }
       },
       "app": {
          "id": "adoTests",
          "shortDescription": "adoTests",
          "createdDateTime": "2022-03-23T10:46:12.355Z",
          "url": "https://dev.azure.com/xyzabcd/adoTests"
       },
       "native_type": "Issue",
       "native_state": "To Do",
       "assignedTo": {
          "name": "Xyz Abcd",
          "userName": "xyz.abcd@email.com",
          "id": "84c92fcd-e08b-6a5f-a8a6-ccda27055560",
          "email": "xyz.abcd@email.com"
       },
       "createdBy": {
          "name": "Xyz Abcd",
          "userName": "xyz.abcd@email.com",
          "id": "84c92fcd-e08b-6a5f-a8a6-ccda27055560",
          "email": "xyz.abcd@email.com"
       }
    }" \
    --user 'username':'password'
    

    성공 응답:

    {
       "result": {
          "status": "Success",
          "sysId: "533020eb879e85100f71cbfc0ebb3591"
       }
    }

    테스트용 샘플 cURL 요청

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/test?toolId=8d4f56598702c510f894419d0ebb35aa&testType=junit" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
       "attemptNumber": 1,
       "blockedTests": 0,
       "buildNumber": 675,
       "duration": 0.079,
       "failedTests": 0,
       "finishTime": "2022-03-23T12:02:25.957Z",
       "name": "adoTests/DeployableRepo/Test #675-2982",
       "passedTests": 20,
       "pipelineName": "adoTests/DeployableRepo",
       "skippedTests": 0,
       "stageName": "Test",
       "startTime": "2022-03-23T12:02:24.36Z",
       "taskExecutionUrl": "https://dev.azure.com/xyzabcd/adoTests/_build/results?buildId=675#Test/{Job name}",
       "totalTests": 20,
       "url": "https://dev.azure.com/xyzabcd/adoTests/_TestManagement/Runs?runId=2982&_a=runCharts"
    }" \
    --user 'username':'password'
    

    성공 응답:

    {
       "result": {
          "status": "Success",
          "sysId: "fd3fdc6b879e85100f71cbfc0ebb356a"
       }
    }

    DevOps - POST /devops/tool/event/{sn_tool_id}

    사전 구축된 하위 플로우에서 처리할 수 있도록 , Jira또는 Bitbucket 이벤트 [sn_devops_event] 테이블에 전달된 페이로드GitHub를 게시합니다.

    이 엔드포인트를 호출하기 전에 사용 중인 도구와의 통합을 생성해야 합니다.

    , Jira또는 Bitbucket가 아닌 GitHub다른 도구에서 이벤트를 처리하려면 엔드포인트를 DevOps - POST /devops/tool/{capability} 대신 사용합니다.

    주:
    1.34.1 버전부터 이 API의 새 버전이 도입되었습니다. 이 API를 사용하면 적응형 인증 정책이 예상대로 실행되지 않을 수 있습니다. 이러한 정책에 대한 자세한 내용은 을 참조하십시오 Adaptive authentication.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/tool/event/{sn_tool_id}

    기본 URL: /api/sn_devops/devops/tool/event/{sn_tool_id}

    지원되는 요청 매개변수

    표 85. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    sn_tool_id 요청에 사용할 도구의 Sys_id입니다. DevOps 도구 [sn_devops_tool] 테이블에 있습니다.

    데이터 유형: 문자열

    표 86. 쿼리 매개변수
    이름 설명
    없음
    표 87. 요청 본문 매개변수
    이름 설명
    도구에 따라 다름 이 도구는 페이로드의 내용을 결정합니다. 페이로드는 웹후크 정보 아래의 도구에 있습니다.

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 88. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    권한 부여
    v2부터 이 API는 토큰 기반 인증을 지원합니다. 도구 [sn_devops_tool] 테이블에 있는 도구 기록에서 토큰 복사 버튼을 클릭하여 토큰을 얻을 수 있습니다. 그런 다음 토큰을 Authorization: sn_devops 형식의 권한 부여 헤더에서 사용할 수 있습니다. DevOpsToken <tool_sys_id>:<tool_token>입니다.
    주:
    토큰이 있는 인증 헤더 외에 기본 인증 세부 정보(사용자 이름 및 암호)가 제공되면 기본 인증이 우선합니다.

    인스턴스에서 devops.system 사용자를 사용할 수 없는 경우 토큰 기반 인증이 성공한 후 이 사용자로 전환 속성을 사용합니다. 이 속성을 사용하면 토큰 인증을 완료하는 데 필요한 sn_devops.integration 역할을 가진 모든 사용자를 설정할 수 있습니다. 자세한 내용은 DevOps Change Velocity properties 문서를 참조하십시오.

    컨텐츠-형식 요청 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 89. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 90. 상태 코드
    상태 코드 설명
    200 성공입니다. 요청이 성공적으로 처리되었습니다.
    201 요청이 성공적으로 완료되었습니다.
    400 잘못된 요청입니다. 잘못된 요청 유형 또는 잘못된 형식의 요청이 탐지되었습니다.
    401 인증이 잘못되었거나 누락되었습니다.
    500 내부 서버 오류입니다. 서버 측 코드에서 논리 오류가 발생했습니다.

    응답 본문 매개변수

    이름 설명
    결과 응답 상태입니다.
    가능한 값:
    • 실패: 도구 ID가 잘못되었습니다. 이벤트가 작성되지 않았습니다.
    • success: 이벤트 [sn_devops_event] 테이블에서 이벤트가 작성되었습니다. 그러나 잘못된 페이로드가 제공된 경우 이벤트 상태는 오류 일 수 있습니다.

    데이터 유형: 문자열

    cURL 요청

    GitHub

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/event/46a07b2f471e011028c23a34846d43b2" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
       "ref": "refs/heads/master",
       "before": "59078a17cad1f4129754971c808d6c399b6141a5",
       "after": "b7957bab20835449c4d597fee24075a9a5a2c099",
       "repository": {
          "id": 252146476,
          "node_id": "MDEwOlJlcG9zaXRvcnkyNTIxNDY0NzY=",
          "name": "test",
          "full_name": "Xyz002/test",
          "private": false,
          "owner": {
             "name": "Xyz002",
             "email": "62993516+Xyz002@users.noreply.github.com",
             "login": "Xyz002",
             "id": 62993516,
             "node_id": "MDQ6VXNlcjYyOTkzNTE2",
             "avatar_url": "https://avatars.githubusercontent.com/u/62993516?v=4",
             "gravatar_id": "",
             "url": "https://api.github.com/users/Xyz002",
             "html_url": "https://github.com/Xyz002",
             "followers_url": "https://api.github.com/users/Xyz002/followers",
             "following_url": "https://api.github.com/users/Xyz002/following{/other_user}",
             "gists_url": "https://api.github.com/users/Xyz002/gists{/gist_id}",
             "starred_url": "https://api.github.com/users/Xyz002/starred{/owner}{/repo}",
             "subscriptions_url": "https://api.github.com/users/Xyz002/subscriptions",
             "organizations_url": "https://api.github.com/users/Xyz002/orgs",
             "repos_url": "https://api.github.com/users/Xyz002/repos",
             "events_url": "https://api.github.com/users/Xyz002/events{/privacy}",
             "received_events_url": "https://api.github.com/users/Xyz002/received_events",
             "type": "User",
             "site_admin": false
          },
          "html_url": "https://github.com/Xyz002/test",
          "description": null,
          "fork": false,
          "url": "https://github.com/Xyz002/test",
          "forks_url": "https://api.github.com/repos/Xyz002/test/forks",
          "keys_url": "https://api.github.com/repos/Xyz002/test/keys{/key_id}",
          "collaborators_url": "https://api.github.com/repos/Xyz002/test/collaborators{/collaborator}",
          "teams_url": "https://api.github.com/repos/Xyz002/test/teams",
          "hooks_url": "https://api.github.com/repos/Xyz002/test/hooks",
          "issue_events_url": "https://api.github.com/repos/Xyz002/test/issues/events{/number}",
          "events_url": "https://api.github.com/repos/Xyz002/test/events",
          "assignees_url": "https://api.github.com/repos/Xyz002/test/assignees{/user}",
          "branches_url": "https://api.github.com/repos/Xyz002/test/branches{/branch}",
          "tags_url": "https://api.github.com/repos/Xyz002/test/tags",
          "blobs_url": "https://api.github.com/repos/Xyz002/test/git/blobs{/sha}",
          "git_tags_url": "https://api.github.com/repos/Xyz002/test/git/tags{/sha}",
          "git_refs_url": "https://api.github.com/repos/Xyz002/test/git/refs{/sha}",
          "trees_url": "https://api.github.com/repos/Xyz002/test/git/trees{/sha}",
          "statuses_url": "https://api.github.com/repos/Xyz002/test/statuses/{sha}",
          "languages_url": "https://api.github.com/repos/Xyz002/test/languages",
          "stargazers_url": "https://api.github.com/repos/Xyz002/test/stargazers",
          "contributors_url": "https://api.github.com/repos/Xyz002/test/contributors",
          "subscribers_url": "https://api.github.com/repos/Xyz002/test/subscribers",
          "subscription_url": "https://api.github.com/repos/Xyz002/test/subscription",
          "commits_url": "https://api.github.com/repos/Xyz002/test/commits{/sha}",
          "git_commits_url": "https://api.github.com/repos/Xyz002/test/git/commits{/sha}",
          "comments_url": "https://api.github.com/repos/Xyz002/test/comments{/number}",
          "issue_comment_url": "https://api.github.com/repos/Xyz002/test/issues/comments{/number}",
          "contents_url": "https://api.github.com/repos/Xyz002/test/contents/{+path}",
          "compare_url": "https://api.github.com/repos/Xyz002/test/compare/{base}...{head}",
          "merges_url": "https://api.github.com/repos/Xyz002/test/merges",
          "archive_url": "https://api.github.com/repos/Xyz002/test/{archive_format}{/ref}",
          "downloads_url": "https://api.github.com/repos/Xyz002/test/downloads",
          "issues_url": "https://api.github.com/repos/Xyz002/test/issues{/number}",
          "pulls_url": "https://api.github.com/repos/Xyz002/test/pulls{/number}",
          "milestones_url": "https://api.github.com/repos/Xyz002/test/milestones{/number}",
          "notifications_url": "https://api.github.com/repos/Xyz002/test/notifications{?since,all,participating}",
          "labels_url": "https://api.github.com/repos/Xyz002/test/labels{/name}",
          "releases_url": "https://api.github.com/repos/Xyz002/test/releases{/id}",
          "deployments_url": "https://api.github.com/repos/Xyz002/test/deployments",
          "created_at": 1585737871,
          "updated_at": "2022-01-04T14:37:36Z",
          "pushed_at": 1648103939,
          "git_url": "git://github.com/Xyz002/test.git",
          "ssh_url": "git@github.com:Xyz002/test.git",
          "clone_url": "https://github.com/Xyz002/test.git",
          "svn_url": "https://github.com/Xyz002/test",
          "homepage": null,
          "size": 1378,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Java",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "forks_count": 0,
          "mirror_url": null,
          "archived": false,
          "disabled": false,
          "open_issues_count": 2,
          "license": null,
          "allow_forking": true,
          "is_template": false,
          "topics": [],
          "visibility": "public",
          "forks": 0,
          "open_issues": 2,
          "watchers": 0,
          "default_branch": "master",
          "stargazers": 0,
          "master_branch": "master"
       },
       "pusher": {
          "name": "Xyz002",
          "email": "62993516+Xyz002@users.noreply.github.com"
       },
       "sender": {
          "login": "Xyz002",
          "id": 62993516,
          "node_id": "MDQ6VXNlcjYyOTkzNTE2",
          "avatar_url": "https://avatars.githubusercontent.com/u/62993516?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/Xyz002",
          "html_url": "https://github.com/Xyz002",
          "followers_url": "https://api.github.com/users/Xyz002/followers",
          "following_url": "https://api.github.com/users/Xyz002/following{/other_user}",
          "gists_url": "https://api.github.com/users/Xyz002/gists{/gist_id}",
          "starred_url": "https://api.github.com/users/Xyz002/starred{/owner}{/repo}",
          "subscriptions_url": "https://api.github.com/users/Xyz002/subscriptions",
          "organizations_url": "https://api.github.com/users/Xyz002/orgs",
          "repos_url": "https://api.github.com/users/Xyz002/repos",
          "events_url": "https://api.github.com/users/Xyz002/events{/privacy}",
          "received_events_url": "https://api.github.com/users/Xyz002/received_events",
          "type": "User",
          "site_admin": false
       },
       "created": false,
       "deleted": false,
       "forced": false,
       "base_ref": null,
       "compare": "https://github.com/Xyz002/test/compare/59078a17cad1...b7957bab2083",
       "commits": [
          {
             "id": "b7957bab20835449c4d597fee24075a9a5a2c099",
             "tree_id": "fa8d699762ec0a25868fa1ab4d299da392f0a974",
             "distinct": true,
             "message": "updated this file",
             "timestamp": "2022-03-24T12:08:59+05:30",
             "url": "https://github.com/Xyz002/test/commit/b7957bab20835449c4d597fee24075a9a5a2c099",
             "author": {
                "name": "Xyz002",
                "email": "62993516+Xyz002@users.noreply.github.com",
                "username": "Xyz002"
             },
             "committer": {
                "name": "GitHub",
                "email": "noreply@github.com",
                "username": "web-flow"
             },
             "added": [],
             "removed": [],
             "modified": [
                "README.me"
             ]
          }
       ],
       "head_commit": {
          "id": "b7957bab20835449c4d597fee24075a9a5a2c099",
          "tree_id": "fa8d699762ec0a25868fa1ab4d299da392f0a974",
          "distinct": true,
          "message": "updated this file",
          "timestamp": "2022-03-24T12:08:59+05:30",
          "url": "https://github.com/Xyz002/test/commit/b7957bab20835449c4d597fee24075a9a5a2c099",
          "author": {
             "name": "Xyz002",
             "email": "62993516+Xyz002@users.noreply.github.com",
             "username": "Xyz002"
          },
          "committer": {
             "name": "GitHub",
             "email": "noreply@github.com",
             "username": "web-flow"
          },
          "added": [],
          "removed": [],
          "modified": [
             "README.me"
          ]
       },
       "sn_tool_id": "46a07b2f471e011028c23a34846d43b2"
    }" \
    --user 'username':'password'
    

    성공 응답:

    {
       "result": "success"
    }

    cURL 요청

    Jira

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/event/9ed237af471e011028c23a34846d4327" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
       "timestamp": 1648104684180,
       "webhookEvent": "jira:issue_created",
       "issue_event_type_name": "issue_created",
       "user": {
          "self": "http://jira1.sndevops.xyz/rest/api/2/user?username=admin",
          "name": "admin",
          "key": "admin",
          "emailAddress": "username@email.com",
          "avatarUrls": {
             "48x48": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=48",
             "24x24": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=24",
             "16x16": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=16",
             "32x32": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=32"
          },
          "displayName": "Administrator",
          "active": true,
          "timeZone": "America/Los_Angeles"
       },
       "issue": {
          "id": "84800",
          "self": "http://jira1.sndevops.xyz/rest/api/2/issue/84800",
          "key": "BAL-2",
          "fields": {
             "issuetype": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/issuetype/10002",
                "id": "10002",
                "description": "A task that needs to be done.",
                "iconUrl": "http://jira1.sndevops.xyz/secure/viewavatar?size=xsmall&avatarId=10318&avatarType=issuetype",
                "name": "Task",
                "subtask": false,
                "avatarId": 10318
             },
             "timespent": null,
             "project": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/project/10507",
                "id": "10507",
                "key": "BAL",
                "name": "balu_devops",
                "projectTypeKey": "software",
                "avatarUrls": {
                   "48x48": "http://jira1.sndevops.xyz/secure/projectavatar?avatarId=10324",
                   "24x24": "http://jira1.sndevops.xyz/secure/projectavatar?size=small&avatarId=10324",
                   "16x16": "http://jira1.sndevops.xyz/secure/projectavatar?size=xsmall&avatarId=10324",
                   "32x32": "http://jira1.sndevops.xyz/secure/projectavatar?size=medium&avatarId=10324"
                }
             },
             "fixVersions": [],
             "aggregatetimespent": null,
             "resolution": null,
             "customfield_10302": null,
             "customfield_10105": null,
             "resolutiondate": null,
             "workratio": 0,
             "lastViewed": null,
             "watches": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/issue/BAL-2/watchers",
                "watchCount": 0,
                "isWatching": false
             },
             "created": "2022-03-24T06:51:22.896+0000",
             "priority": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/priority/3",
                "iconUrl": "http://jira1.sndevops.xyz/images/icons/priorities/medium.svg",
                "name": "Medium",
                "id": "3"
             },
             "customfield_10100": "0|i0cprw:",
             "customfield_10101": "SCRUMBOARD-14",
             "customfield_10300": null,
             "labels": [],
             "timeestimate": 240,
             "aggregatetimeoriginalestimate": 300,
             "versions": [],
             "issuelinks": [
                {
                   "id": "10701",
                   "self": "http://jira1.sndevops.xyz/rest/api/2/issueLink/10701",
                   "type": {
                      "id": "10000",
                      "name": "Blocks",
                      "inward": "is blocked by",
                      "outward": "blocks",
                      "self": "http://jira1.sndevops.xyz/rest/api/2/issueLinkType/10000"
                   },
                   "outwardIssue": {
                      "id": "84741",
                      "key": "BAL-1",
                      "self": "http://jira1.sndevops.xyz/rest/api/2/issue/84741",
                      "fields": {
                         "summary": "log4jtesting",
                         "status": {
                            "self": "http://jira1.sndevops.xyz/rest/api/2/status/3",
                            "description": "This issue is being actively worked on at the moment by the assignee.",
                            "iconUrl": "http://jira1.sndevops.xyz/images/icons/statuses/inprogress.png",
                            "name": "In Progress",
                            "id": "3",
                            "statusCategory": {
                               "self": "http://jira1.sndevops.xyz/rest/api/2/statuscategory/4",
                               "id": 4,
                               "key": "indeterminate",
                               "colorName": "yellow",
                               "name": "In Progress"
                            }
                         },
                         "priority": {
                            "self": "http://jira1.sndevops.xyz/rest/api/2/priority/3",
                            "iconUrl": "http://jira1.sndevops.xyz/images/icons/priorities/medium.svg",
                            "name": "Medium",
                            "id": "3"
                         },
                         "issuetype": {
                            "self": "http://jira1.sndevops.xyz/rest/api/2/issuetype/10004",
                            "id": "10004",
                            "description": "A problem which impairs or prevents the functions of the product.",
                            "iconUrl": "http://jira1.sndevops.xyz/secure/viewavatar?size=xsmall&avatarId=10303&avatarType=issuetype",
                            "name": "Bug",
                            "subtask": false,
                            "avatarId": 10303
                         }
                      }
                   }
                }
             ],
             "assignee": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/user?username=admin",
                "name": "admin",
                "key": "admin",
                "emailAddress": "username@email.com",
                "avatarUrls": {
                   "48x48": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=48",
                   "24x24": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=24",
                   "16x16": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=16",
                   "32x32": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=32"
                },
                "displayName": "Administrator",
                "active": true,
                "timeZone": "America/Los_Angeles"
             },
             "updated": "2022-03-24T06:51:22.896+0000",
             "status": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/status/10000",
                "description": "",
                "iconUrl": "http://jira1.sndevops.xyz/",
                "name": "To Do",
                "id": "10000",
                "statusCategory": {
                   "self": "http://jira1.sndevops.xyz/rest/api/2/statuscategory/2",
                   "id": 2,
                   "key": "new",
                   "colorName": "blue-gray",
                   "name": "To Do"
                }
             },
             "components": [],
             "timeoriginalestimate": 300,
             "description": "Task description",
             "timetracking": {
                "originalEstimate": "5m",
                "remainingEstimate": "4m",
                "originalEstimateSeconds": 300,
                "remainingEstimateSeconds": 240
             },
             "customfield_10203": null,
             "customfield_10204": null,
             "customfield_10205": null,
             "attachment": [],
             "aggregatetimeestimate": 240,
             "summary": "Task Summary",
             "creator": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/user?username=admin",
                "name": "admin",
                "key": "admin",
                "emailAddress": "username@email.com",
                "avatarUrls": {
                   "48x48": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=48",
                   "24x24": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=24",
                   "16x16": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=16",
                   "32x32": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=32"
                },
                "displayName": "Administrator",
                "active": true,
                "timeZone": "America/Los_Angeles"
             },
             "subtasks": [],
             "reporter": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/user?username=admin",
                "name": "admin",
                "key": "admin",
                "emailAddress": "username@email.com",
                "avatarUrls": {
                   "48x48": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=48",
                   "24x24": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=24",
                   "16x16": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=16",
                   "32x32": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=32"
                },
                "displayName": "Administrator",
                "active": true,
                "timeZone": "America/Los_Angeles"
             },
             "customfield_10000": "{summaryBean=com.atlassian.jira.plugin.devstatus.rest.SummaryBean@2ccf8c6[summary={pullrequest=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@fbc42d4[overall=PullRequestOverallBean{stateCount=0, state='OPEN', details=PullRequestOverallDetails{openCount=0, mergedCount=0, declinedCount=0}},byInstanceType={}], build=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@71e33347[overall=com.atlassian.jira.plugin.devstatus.summary.beans.BuildOverallBean@1c24654d[failedBuildCount=0,successfulBuildCount=0,unknownBuildCount=0,count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType={}], review=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@1ea8fb17[overall=com.atlassian.jira.plugin.devstatus.summary.beans.ReviewsOverallBean@6dc95939[stateCount=0,state=<null>,dueDate=<null>,overDue=false,count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType={}], deployment-environment=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@55826cc[overall=com.atlassian.jira.plugin.devstatus.summary.beans.DeploymentOverallBean@3ae93527[topEnvironments=[],showProjects=false,successfulCount=0,count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType={}], repository=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@6340012e[overall=com.atlassian.jira.plugin.devstatus.summary.beans.CommitOverallBean@44678cee[count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType={}], branch=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@4dbce8[overall=com.atlassian.jira.plugin.devstatus.summary.beans.BranchOverallBean@737ee1cb[count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType={}]},errors=[],configErrors=[]], devSummaryJson={\"cachedValue\":{\"errors\":[],\"configErrors\":[],\"summary\":{\"pullrequest\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"stateCount\":0,\"state\":\"OPEN\",\"details\":{\"openCount\":0,\"mergedCount\":0,\"declinedCount\":0,\"total\":0},\"open\":true},\"byInstanceType\":{}},\"build\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"failedBuildCount\":0,\"successfulBuildCount\":0,\"unknownBuildCount\":0},\"byInstanceType\":{}},\"review\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"stateCount\":0,\"state\":null,\"dueDate\":null,\"overDue\":false,\"completed\":false},\"byInstanceType\":{}},\"deployment-environment\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"topEnvironments\":[],\"showProjects\":false,\"successfulCount\":0},\"byInstanceType\":{}},\"repository\":{\"overall\":{\"count\":0,\"lastUpdated\":null},\"byInstanceType\":{}},\"branch\":{\"overall\":{\"count\":0,\"lastUpdated\":null},\"byInstanceType\":{}}}},\"isStale\":false}}",
             "aggregateprogress": {
                "progress": 0,
                "total": 240,
                "percent": 0
             },
             "customfield_10200": null,
             "customfield_10201": null,
             "customfield_10202": null,
             "environment": null,
             "duedate": "2022-03-24",
             "progress": {
                "progress": 0,
                "total": 240,
                "percent": 0
             },
             "comment": {
                "comments": [],
                "maxResults": 0,
                "total": 0,
                "startAt": 0
             },
             "votes": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/issue/BAL-2/votes",
                "votes": 0,
                "hasVoted": false
             },
             "worklog": {
                "startAt": 0,
                "maxResults": 20,
                "total": 0,
                "worklogs": []
             }
          }
       },
       "changelog": {
          "id": "14401",
          "items": [
             {
                "field": "Link",
                "fieldtype": "jira",
                "from": null,
                "fromString": null,
                "to": "BAL-1",
                "toString": "This issue blocks BAL-1"
             }
          ]
       },
       "sn_tool_id": "9ed237af471e011028c23a34846d4327"
    }" \
    --user 'username':'password'
    

    성공 응답:

    {
       "result": "success"
    }

    cURL 요청

    Bitbucket

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/event/6975ecaf879e85100f71cbfc0ebb3575" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
       "eventKey": "repo:refs_changed",
       "date": "2022-03-23T15:57:05+0000",
       "actor": {
          "name": "admin",
          "emailAddress": "username@email.com",
          "id": 1,
          "displayName": "Admin",
          "active": true,
          "slug": "admin",
          "type": "NORMAL",
          "links": {
             "self": [
                {
                   "href": "http://bitbucket2.sndevops.xyz/users/admin"
                }
             ]
          }
       },
       "repository": {
          "slug": "testautomationrepo1",
          "id": 12,
          "name": "TestAutomationRepo1",
          "scmId": "git",
          "state": "AVAILABLE",
          "statusMessage": "Available",
          "forkable": true,
          "origin": {
             "slug": "testautomationrepo1",
             "id": 1,
             "name": "TestAutomationRepo1",
             "scmId": "git",
             "state": "AVAILABLE",
             "statusMessage": "Available",
             "forkable": true,
             "project": {
                "key": "TES",
                "id": 1,
                "name": "TestAutomation",
                "public": false,
                "type": "NORMAL",
                "links": {
                   "self": [
                      {
                         "href": "http://bitbucket2.sndevops.xyz/projects/TES"
                      }
                   ]
                }
             },
             "public": false,
             "links": {
                "clone": [
                   {
                      "href": "ssh://git@bitbucket2.sndevops.xyz:7999/tes/testautomationrepo1.git",
                      "name": "ssh"
                   },
                   {
                      "href": "http://bitbucket2.sndevops.xyz/scm/tes/testautomationrepo1.git",
                      "name": "http"
                   }
                ],
                "self": [
                   {
                      "href": "http://bitbucket2.sndevops.xyz/projects/TES/repos/testautomationrepo1/browse"
                   }
                ]
             }
          },
          "project": {
             "key": "~ADMIN",
             "id": 3,
             "name": "Admin",
             "type": "PERSONAL",
             "owner": {
                "name": "admin",
                "emailAddress": "username@email.com",
                "id": 1,
                "displayName": "Admin",
                "active": true,
                "slug": "admin",
                "type": "NORMAL",
                "links": {
                   "self": [
                      {
                         "href": "http://bitbucket2.sndevops.xyz/users/admin"
                      }
                   ]
                }
             },
             "links": {
                "self": [
                   {
                      "href": "http://bitbucket2.sndevops.xyz/users/admin"
                   }
                ]
             }
          },
          "public": false,
          "links": {
             "clone": [
                {
                   "href": "http://bitbucket2.sndevops.xyz/scm/~admin/testautomationrepo1.git",
                   "name": "http"
                },
                {
                   "href": "ssh://git@bitbucket2.sndevops.xyz:7999/~admin/testautomationrepo1.git",
                   "name": "ssh"
                }
             ],
             "self": [
                {
                   "href": "http://bitbucket2.sndevops.xyz/users/admin/repos/testautomationrepo1/browse"
                }
             ]
          }
       },
       "changes": [
          {
             "ref": {
                "id": "refs/heads/master",
                "displayId": "master",
                "type": "BRANCH"
             },
             "refId": "refs/heads/master",
             "fromHash": "b482b2e232f5fbdee73feed8ca1cfb774de6976e",
             "toHash": "d783254fe6f77bc7cc079358158aeef52a457587",
             "type": "UPDATE"
          }
       ],
       "sn_tool_id": "6975ecaf879e85100f71cbfc0ebb3575"
    }" \
    --user 'username':'password'
    

    성공 응답:

    {
       "result": "success"
    }

    DevOps - PUT /devops/orchestration/changeControl/{changeControlId}

    지정된 오케스트레이션 작업에 대한 변경 통제 정보를 업데이트합니다.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/orchestration/changeControl/{changeControlId}

    기본 URL: /api/sn_devops/devops/orchestration/changeControl/{changeControlId}

    지원되는 요청 매개변수

    표 91. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    변경 제어 ID 변경 제어 작업의 Sys_id입니다. 콜백 [sn_devops_callback] 테이블에 있습니다.

    데이터 유형: 문자열

    표 92. 쿼리 매개변수
    이름 설명
    toolId 필수 변경 통제 작업과 연결된 도구의 DevOps Sys_id입니다. 오케스트레이션 도구 [sn_devops_orchestration_tool] 테이블에 있습니다.

    데이터 유형: 문자열

    표 93. 요청 본문 매개변수
    이름 설명
    콜백 URL 필수 연결된 변경 요청 승인 프로세스가 완료된 후 인스턴스가 ServiceNow 콜백할 수 있는 URL입니다. 이 콜백은 승인 결과에 따라 파이프라인 실행을 계속할지 여부를 허용해야 합니다.

    데이터 유형: 문자열

    orchestrationTaskDetails 필수 오케스트레이션 작업에 대한 설명입니다.

    데이터 유형: 객체

    "orchestrationTaskDetails": {
      "message": "String",
      "triggerType": "String",
      "upstreamTaskExecutionURL": "String"
    }
    orchestrationTaskDetails.message 자유 형식의 문자 메시지입니다.

    데이터 유형: 문자열

    orchestrationTaskDetails.triggerType 필수 오케스트레이션 작업이 시작된 방식입니다.

    유효한 값은 다음과 같습니다.

    • scm: Git/scm 도구 코드 커밋이 작업을 트리거했습니다.
    • 업스트림: 업스트림 작업이 이 작업을 트리거했습니다.
    • user: 사용자가 수동으로 작업을 시작했습니다.

    데이터 유형: 문자열

    orchestrationTaskDetails.upstreamTaskExecutionURL 업스트림으로 설정된 경우 triggerType 필요합니다. 업스트림 작업 실행 URL입니다.

    예: https://jenkins.mycompany.com:8080/job/Mobile-Platform-test/40/

    데이터 유형: 문자열

    orchestrationTaskURL (영문) 필수 오케스트레이션 작업의 URL입니다.

    예: https://jenkins.mycompany.com:8080/orchestration_task/Mobile-Platform-deploy/

    데이터 유형: 문자열

    도구 유형 도구의 유형입니다 DevOps .

    유효한 값: jenkins

    데이터 유형: 문자열

    작업 실행 URL 필수 실행할 작업의 URL입니다.

    데이터 유형: 문자열

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 94. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    권한 부여
    v2부터 이 API는 토큰 기반 인증을 지원합니다. 도구 [sn_devops_tool] 테이블에 있는 도구 기록에서 토큰 복사 버튼을 클릭하여 토큰을 얻을 수 있습니다. 그런 다음 토큰을 Authorization: sn_devops 형식의 권한 부여 헤더에서 사용할 수 있습니다. DevOpsToken <tool_sys_id>:<tool_token>입니다.
    주:
    토큰이 있는 인증 헤더 외에 기본 인증 세부 정보(사용자 이름 및 암호)가 제공되면 기본 인증이 우선합니다.

    인스턴스에서 devops.system 사용자를 사용할 수 없는 경우 토큰 기반 인증이 성공한 후 이 사용자로 전환 속성을 사용합니다. 이 속성을 사용하면 토큰 인증을 완료하는 데 필요한 sn_devops.integration 역할을 가진 모든 사용자를 설정할 수 있습니다. 자세한 내용은 DevOps Change Velocity properties 문서를 참조하십시오.

    컨텐츠-형식 요청 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 95. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 96. 상태 코드
    상태 코드 설명
    200 요청이 성공적으로 완료되었습니다.
    400 잘못된 요청입니다. 잘못된 요청 유형 또는 잘못된 형식의 요청이 탐지되었습니다.
    401 인증이 잘못되었거나 누락되었습니다.
    404 찾을 수 없습니다. 지정된 기록을 찾을 수 없습니다.
    500 내부 서버 오류입니다. 요청을 처리하는 동안 예기치 않은 오류가 발생했습니다. 응답에는 오류에 대한 추가 정보가 포함되어 있습니다.

    응답 본문 매개변수

    이름 설명
    change_control 오케스트레이션 작업에 변경 제어가 적용되는지 여부를 나타내는 플래그입니다.
    가능한 값:
    • true: 변경 통제 하에 있습니다.
    • false: 변경 제어 대상이 아님

    데이터 유형: 부울

    상세 정보 모든 오류 조건에 대한 항목입니다.

    데이터 유형: 객체

    "details": {
      "errors": [Array]
    }
    상세 정보.오류 단일 오류에 대한 설명입니다.

    데이터 유형: 배열

    "errors": [
      {
        "message": "String"
      }
    ]
    상세 정보.오류.메시지 자세한 오류 메시지입니다.

    데이터 유형: 문자열

    샘플 cURL 요청

    curl -X PUT "https://instance.service-now.com/api/sn_devops/v1/devops/orchestration/changeControl/f0ca45679323008b52f3b457415ae6?toolId=f0ca45679323008b52f3b457415ae6"
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{
      \"orchestrationTaskURL\":\"https://jenkins.mycompany.com:8080/job/Mobile-Platform-deploy/\",
      \"toolType\":\"jenkins\",
      \"callbackURL\":\"https://jenkins.mycompany.com:8080/sn-devops/964aca59-0cae-4d9b-a36d-5929f426cf31\",
    \"taskExecutionURL\":\"https://jenkins.mycompany.com:8080/job/Mobile-Platform-test/40/\",  
    "\orchestrationTaskName\":\"StageName\",
      \"orchestrationTaskDetails\":{
        \"message\":\"Started by upstream project \\\"Mobile-Platform-test\\\" build number 40\",
        \"triggerType\":\"upstream\",
        \"upstreamTaskExecutionURL\":\"https://jenkins.mycompany.com:8080/job/Mobile-Platform-test/40/\"}
    }"

    응답:

    {
        "result": {
            "change_control": true
        }
    }

    DevOps - PUT /devops/orchestration/changeInfo/{changeInfo}

    지정된 변경 요청의 필드를 업데이트합니다.

    URL 형식

    버전이 지정된 URL: /api/sn_devops/{api_version}/devops/orchestration/changeInfo/{changeInfo}

    기본 URL: /api/sn_devops/devops/orchestration/changeInfo/{changeInfo}

    지원되는 요청 매개변수

    표 97. 경로 매개변수
    이름 설명
    api_version 옵션입니다. 액세스할 엔드포인트의 버전입니다. 예를 들면 v1 또는 v2입니다. 최신 버전이 아닌 엔드포인트 버전을 사용하려면 이 값만 지정합니다.

    데이터 유형: 문자열

    표 98. 쿼리 매개변수
    이름 설명
    changeRequestNumber (영문) 필수 업데이트할 오케스트레이션 작업과 연결된 변경 요청 번호입니다. 변경 요청 [change_request] 테이블에 있습니다.

    데이터 유형: 문자열

    표 99. 요청 본문 매개변수
    이름 설명
    데이터 필수 연결된 변경 요청에서 업데이트할 필드에 대한 이름-값 쌍입니다.
    예를 들어, 간단한 설명 파일을 업데이트하려면 다음과 유사한 이름-값 쌍을 입력합니다.
     "{\"short_description\": \"my short desc\" }"
    매개변수의 state 경우 다음 전환만 지원됩니다.
    • 취소:
      • 상태를 취소로 이동하려면 변경 요청 상태를 구현해야 합니다.
      • 매개변수는 reason 상태를 취소됨으로 업데이트하기 위한 필수 입력입니다.
    • 닫은:
      • 상태를 종결로 이동하려면 변경 요청 상태가 구현 또는 구현 후여야 합니다.
      • close_code 및 close_notes는 상태를 종결로 업데이트하기 위한 필수 입력입니다.
        가능한 값:
        • 4: 취소(sn_devops.change_request.cancel_state 속성에 설정된 값)
        • 3: 종결됨(sn_devops.change_request.closed_state 속성에 설정된 값)

    데이터 유형: 문자열

    헤더

    다음 요청 및 응답 헤더는 이 HTTP 작업에만 적용되거나 이 작업에 고유한 방식으로 적용됩니다. REST API에서 사용되는 일반 헤더 목록은 지원되는 REST API 헤더를 참조하세요.

    표 100. 요청 헤더
    헤더 설명
    수용 응답 본문의 데이터 형식입니다. application/json만 지원합니다.
    권한 부여
    v2부터 이 API는 토큰 기반 인증을 지원합니다. 도구 [sn_devops_tool] 테이블에 있는 도구 기록에서 토큰 복사 버튼을 클릭하여 토큰을 얻을 수 있습니다. 그런 다음 토큰을 Authorization: sn_devops 형식의 권한 부여 헤더에서 사용할 수 있습니다. DevOpsToken <tool_sys_id>:<tool_token>입니다.
    주:
    토큰이 있는 인증 헤더 외에 기본 인증 세부 정보(사용자 이름 및 암호)가 제공되면 기본 인증이 우선합니다.

    인스턴스에서 devops.system 사용자를 사용할 수 없는 경우 토큰 기반 인증이 성공한 후 이 사용자로 전환 속성을 사용합니다. 이 속성을 사용하면 토큰 인증을 완료하는 데 필요한 sn_devops.integration 역할을 가진 모든 사용자를 설정할 수 있습니다. 자세한 내용은 DevOps Change Velocity properties 문서를 참조하십시오.

    컨텐츠-형식 요청 본문의 데이터 형식입니다. application/json만 지원합니다.
    표 101. 응답 헤더
    헤더 설명
    없음

    상태 코드

    다음 상태 코드는 이 HTTP 작업에 적용됩니다. REST API에서 사용할 수 있는 상태 코드 목록은 REST API HTTP 응답 코드를 참조하세요.

    표 102. 상태 코드
    상태 코드 설명
    200 성공입니다. 요청이 성공적으로 처리되었습니다.
    400 잘못된 요청입니다. 잘못된 요청 유형 또는 잘못된 형식의 요청이 탐지되었습니다.
    404 찾을 수 없습니다. 요청한 항목을 찾을 수 없습니다.

    응답 본문 매개변수

    이름 설명
    메시지 업데이트 결과에 대한 설명입니다.

    데이터 유형: 문자열

    상태 요청의 상태입니다.
    가능한 값:
    • 성공: 변경 요청을 찾았으며 변경 정보를 업데이트했습니다.
    • 오류: 변경 요청을 찾을 수 없으며 변경 상세 정보가 업데이트되지 않았습니다.

    데이터 유형: 문자열

    updateStatus 업데이트의 상태입니다.
    가능한 값:
    • 완료
    • 오류

    데이터 유형: 문자열

    cURL 요청

    다음 코드 예제에서는 CHG0030023 변경 요청의 다양한 필드를 업데이트하는 방법을 보여 줍니다.

    curl -X PUT"
    https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/changeInfo?changeRequestNumber=CHG0030023
    
    -H "accept: application/json"\
    -u "username":"password" 
    - D
    {
      "short_description": "Test description",
      "priority": "1",
      "start_date": "2021-02-05 08:00:00",
      "end_date": "2022-04-05 08:00:00",
      "justification": "test justification",
      "description": "test description",
      "cab_required": true,
      "comments": "This update for work notes is from jenkins file",
      "work_notes": "test work notes",
      "assignment_group": "a715cd759f2002002920bde8132e7018"
    }

    응답:

    {
      "result": {
        "updateStatus": "Done",
        "status": "Success",
        "message": "change request update successful"
      }
    }