InfoGrab Docs

CI Lint API

요약

이 API를 사용하여 GitLab CI/CD 구성을 검증합니다. 이 엔드포인트는 JSON으로 인코딩된 YAML 콘텐츠를 사용합니다. 예를 들어 다음 명령은 JQ를 사용하여 지정된 YAML 파일을 올바르게 이스케이프하고 JSON으로 인코딩한 후 API에 요청합니다.

이 API를 사용하여 GitLab CI/CD 구성을 검증합니다.

이 엔드포인트는 JSON으로 인코딩된 YAML 콘텐츠를 사용합니다. 경우에 따라 jq와 같은 타사 도구를 사용하여 요청을 하기 전에 YAML 콘텐츠를 올바르게 형식화하는 것이 도움이 될 수 있습니다. CI/CD 구성의 형식을 유지하려는 경우에 유용합니다.

예를 들어 다음 명령은 JQ를 사용하여 지정된 YAML 파일을 올바르게 이스케이프하고 JSON으로 인코딩한 후 API에 요청합니다.

jq --null-input --arg yaml "$(<example-gitlab-ci.yml)" '.content=$yaml' \
| curl --url "https://gitlab.com/api/v4/projects/:id/ci/lint?include_merged_yaml=true" \
--header 'Content-Type: application/json' \
--data @-
  1. example-gitlab-ci.yml이라는 YAML 파일을 생성합니다:

    .api_test:
      rules:
        - if: $CI_PIPELINE_SOURCE=="merge_request_event"
          changes:
            - src/api/*
    deploy:
      extends:
        - .api_test
      rules:
        - when: manual
          allow_failure: true
      script:
        - echo "hello world"
    
  2. 입력 YAML 파일(example-gitlab-ci.yml)을 이스케이프 및 인코딩한 후 GitLab API에 POST하려면 curljq를 결합한 한 줄 명령을 생성합니다:

    jq --null-input --arg yaml "$(<example-gitlab-ci.yml)" '.content=$yaml' \
    | curl --url "https://gitlab.com/api/v4/projects/:id/ci/lint?include_merged_yaml=true" \
        --header 'Content-Type: application/json' \
        --data @-
    

이 API의 응답 파싱#

CI Lint API의 응답을 재형식화하려면 다음 중 하나를 사용합니다:

  • CI Lint 응답을 직접 jq에 파이프합니다.

  • API 응답을 텍스트 파일로 저장하고 다음과 같이 jq에 인수로 제공합니다:

    jq --raw-output '.merged_yaml | fromjson' <your_input_here>
    

예를 들어 이 JSON 배열:

{"valid":"true","errors":[],"merged_yaml":"---\n.api_test:\n  rules:\n  - if: $CI_PIPELINE_SOURCE==\"merge_request_event\"\n    changes:\n    - src/api/*\ndeploy:\n  rules:\n  - when: manual\n    allow_failure: true\n  extends:\n  - \".api_test\"\n  script:\n  - echo \"hello world\"\n"}

파싱 및 재형식화 시 결과 YAML 파일에는 다음이 포함됩니다:

.api_test:
  rules:
  - if: $CI_PIPELINE_SOURCE=="merge_request_event"
    changes:
    - src/api/*
deploy:
  rules:
  - when: manual
    allow_failure: true
  extends:
  - ".api_test"
  script:
  - echo "hello world"

CI/CD 구성 검증#

지정된 프로젝트의 .gitlab-ci.yml 구성을 검증합니다. 이 엔드포인트는 프로젝트 컨텍스트에서 CI/CD 구성을 검증합니다. 여기에는 다음이 포함됩니다:

  • 프로젝트의 CI/CD 변수 사용.
  • include:local 항목에 대한 프로젝트 파일 검색.
POST /projects/:id/ci/lint
속성 유형 필수 설명
content 문자열 CI/CD 구성 콘텐츠.
dry_run 불리언 아니요 파이프라인 생성 시뮬레이션을 실행하거나 정적 검사만 수행합니다. 기본값: false.
include_jobs 불리언 아니요 정적 검사 또는 파이프라인 시뮬레이션에 존재하는 작업 목록을 응답에 포함해야 하는 경우. 기본값: false.
ref 문자열 아니요 dry_runtrue이면 CI/CD YAML 구성을 검증하는 데 사용할 브랜치 또는 태그 컨텍스트를 설정합니다. 설정하지 않으면 프로젝트의 기본 브랜치로 기본 설정됩니다.

요청 예시:

curl --request POST \
  --header "Content-Type: application/json" \
  --url "https://gitlab.example.com/api/v4/projects/:id/ci/lint" \
  --data @- <<'EOF'
{
  "content": "{
    \"image\": \"ruby:2.6\",
    \"services\": [\"postgres\"],
    \"before_script\": [
      \"bundle install\",
      \"bundle exec rake db:create\"
    ],
    \"variables\": {
      \"DB_NAME\": \"postgres\"
    },
    \"stages\": [\"test\", \"deploy\", \"notify\"],
    \"rspec\": {
      \"script\": \"rake spec\",
      \"tags\": [\"ruby\", \"postgres\"],
      \"only\": [\"branches\"]
    }
  }"
}
EOF

응답 예시:

  • 유효한 구성:

    {
      "valid": true,
      "merged_yaml": "---\ntest_job:\n  script: echo 1\n",
      "errors": [],
      "warnings": [],
      "includes": []
    }
    
  • 유효하지 않은 구성:

    {
      "valid": false,
      "errors": [
        "jobs config should contain at least one visible job"
      ],
      "warnings": [],
      "merged_yaml": "---\n\".job\":\n  script:\n  - echo \"A hidden job\"\n",
      "includes": []
    }
    

기존 CI/CD 구성 검증#

히스토리
  • sha 속성이 GitLab 16.5에서 도입되었습니다.
  • sharef가 GitLab 16.10에서 content_refdry_run_ref이름 변경되었습니다.

지정된 프로젝트의 기존 .gitlab-ci.yml 구성을 검증합니다. 이 엔드포인트는 프로젝트 컨텍스트에서 CI/CD 구성을 검증합니다. 여기에는 다음이 포함됩니다:

  • 프로젝트의 CI/CD 변수 사용.
  • include:local 항목에 대한 프로젝트 파일 검색.
GET /projects/:id/ci/lint
속성 유형 필수 설명
content_ref 문자열 아니요 CI/CD 구성 콘텐츠를 이 커밋 SHA, 브랜치 또는 태그에서 가져옵니다. 설정하지 않으면 프로젝트의 기본 브랜치 헤드의 SHA로 기본 설정됩니다.
dry_run 불리언 아니요 파이프라인 생성 시뮬레이션을 실행하거나 정적 검사만 수행합니다.
dry_run_ref 문자열 아니요 dry_runtrue이면 CI/CD YAML 구성을 검증하는 데 사용할 브랜치 또는 태그 컨텍스트를 설정합니다. 설정하지 않으면 프로젝트의 기본 브랜치로 기본 설정됩니다.
include_jobs 불리언 아니요 정적 검사 또는 파이프라인 시뮬레이션에 존재하는 작업 목록을 응답에 포함해야 하는 경우. 기본값: false.
ref 문자열 아니요 (더 이상 사용되지 않음) dry_runtrue이면 CI/CD YAML 구성을 검증하는 데 사용할 브랜치 또는 태그 컨텍스트를 설정합니다. 설정하지 않으면 프로젝트의 기본 브랜치로 기본 설정됩니다. 대신 dry_run_ref를 사용합니다.
sha 문자열 아니요 (더 이상 사용되지 않음) CI/CD 구성 콘텐츠를 이 커밋 SHA, 브랜치 또는 태그에서 가져옵니다. 설정하지 않으면 프로젝트의 기본 브랜치 헤드의 SHA로 기본 설정됩니다. 대신 content_ref를 사용합니다.

요청 예시:

curl --request GET \
  --url "https://gitlab.example.com/api/v4/projects/:id/ci/lint"

응답 예시:

  • include.yml포함된 파일이고 include_jobstrue로 설정된 유효한 구성:

    {
      "valid": true,
      "errors": [],
      "warnings": [],
      "merged_yaml": "---\ninclude-job:\n  script:\n  - echo \"An included job\"\njob:\n  rules:\n  - if: \"$CI_COMMIT_BRANCH\"\n  script:\n  - echo \"A test job\"\n",
      "includes": [
        {
          "type": "local",
          "location": "include.yml",
          "blob": "https://gitlab.example.com/test-group/test-project/-/blob/ef5014c045873c5c4ffeb7a2f5be021a1d3ed703/include.yml",
          "raw": "https://gitlab.example.com/test-group/test-project/-/raw/ef5014c045873c5c4ffeb7a2f5be021a1d3ed703/include.yml",
          "extra": {},
          "context_project": "test-group/test-project",
          "context_sha": "ef5014c045873c5c4ffeb7a2f5be021a1d3ed703"
        }
      ],
      "jobs": [
        {
          "name": "include-job",
          "stage": "test",
          "before_script": [],
          "script": [
            "echo \"An included job\""
          ],
          "after_script": [],
          "tag_list": [],
          "only": {
            "refs": [
              "branches",
              "tags"
            ]
          },
          "except": null,
          "environment": null,
          "when": "on_success",
          "allow_failure": false,
          "needs": null
        },
        {
          "name": "job",
          "stage": "test",
          "before_script": [],
          "script": [
            "echo \"A test job\""
          ],
          "after_script": [],
          "tag_list": [],
          "only": null,
          "except": null,
          "environment": null,
          "when": "on_success",
          "allow_failure": false,
          "needs": null
        }
      ]
    }
    
  • 유효하지 않은 구성:

    {
      "valid": false,
      "errors": [
        "jobs config should contain at least one visible job"
      ],
      "warnings": [],
      "merged_yaml": "---\n\".job\":\n  script:\n  - echo \"A hidden job\"\n",
      "includes": []
    }
    

CI Lint API

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

이 API를 사용하여 GitLab CI/CD 구성을 검증합니다. 이 엔드포인트는 JSON으로 인코딩된 YAML 콘텐츠를 사용합니다. 예를 들어 다음 명령은 JQ를 사용하여 지정된 YAML 파일을 올바르게 이스케이프하고 JSON으로 인코딩한 후 API에 요청합니다.

이 API를 사용하여 GitLab CI/CD 구성을 검증합니다.

이 엔드포인트는 JSON으로 인코딩된 YAML 콘텐츠를 사용합니다. 경우에 따라 jq와 같은 타사 도구를 사용하여 요청을 하기 전에 YAML 콘텐츠를 올바르게 형식화하는 것이 도움이 될 수 있습니다. CI/CD 구성의 형식을 유지하려는 경우에 유용합니다.

예를 들어 다음 명령은 JQ를 사용하여 지정된 YAML 파일을 올바르게 이스케이프하고 JSON으로 인코딩한 후 API에 요청합니다.

jq --null-input --arg yaml "$(<example-gitlab-ci.yml)" '.content=$yaml' \
| curl --url "https://gitlab.com/api/v4/projects/:id/ci/lint?include_merged_yaml=true" \
--header 'Content-Type: application/json' \
--data @-
  1. example-gitlab-ci.yml이라는 YAML 파일을 생성합니다:

    .api_test:
      rules:
        - if: $CI_PIPELINE_SOURCE=="merge_request_event"
          changes:
            - src/api/*
    deploy:
      extends:
        - .api_test
      rules:
        - when: manual
          allow_failure: true
      script:
        - echo "hello world"
    
  2. 입력 YAML 파일(example-gitlab-ci.yml)을 이스케이프 및 인코딩한 후 GitLab API에 POST하려면 curljq를 결합한 한 줄 명령을 생성합니다:

    jq --null-input --arg yaml "$(<example-gitlab-ci.yml)" '.content=$yaml' \
    | curl --url "https://gitlab.com/api/v4/projects/:id/ci/lint?include_merged_yaml=true" \
        --header 'Content-Type: application/json' \
        --data @-
    

이 API의 응답 파싱#

CI Lint API의 응답을 재형식화하려면 다음 중 하나를 사용합니다:

  • CI Lint 응답을 직접 jq에 파이프합니다.

  • API 응답을 텍스트 파일로 저장하고 다음과 같이 jq에 인수로 제공합니다:

    jq --raw-output '.merged_yaml | fromjson' <your_input_here>
    

예를 들어 이 JSON 배열:

{"valid":"true","errors":[],"merged_yaml":"---\n.api_test:\n  rules:\n  - if: $CI_PIPELINE_SOURCE==\"merge_request_event\"\n    changes:\n    - src/api/*\ndeploy:\n  rules:\n  - when: manual\n    allow_failure: true\n  extends:\n  - \".api_test\"\n  script:\n  - echo \"hello world\"\n"}

파싱 및 재형식화 시 결과 YAML 파일에는 다음이 포함됩니다:

.api_test:
  rules:
  - if: $CI_PIPELINE_SOURCE=="merge_request_event"
    changes:
    - src/api/*
deploy:
  rules:
  - when: manual
    allow_failure: true
  extends:
  - ".api_test"
  script:
  - echo "hello world"

CI/CD 구성 검증#

지정된 프로젝트의 .gitlab-ci.yml 구성을 검증합니다. 이 엔드포인트는 프로젝트 컨텍스트에서 CI/CD 구성을 검증합니다. 여기에는 다음이 포함됩니다:

  • 프로젝트의 CI/CD 변수 사용.
  • include:local 항목에 대한 프로젝트 파일 검색.
POST /projects/:id/ci/lint
속성 유형 필수 설명
content 문자열 CI/CD 구성 콘텐츠.
dry_run 불리언 아니요 파이프라인 생성 시뮬레이션을 실행하거나 정적 검사만 수행합니다. 기본값: false.
include_jobs 불리언 아니요 정적 검사 또는 파이프라인 시뮬레이션에 존재하는 작업 목록을 응답에 포함해야 하는 경우. 기본값: false.
ref 문자열 아니요 dry_runtrue이면 CI/CD YAML 구성을 검증하는 데 사용할 브랜치 또는 태그 컨텍스트를 설정합니다. 설정하지 않으면 프로젝트의 기본 브랜치로 기본 설정됩니다.

요청 예시:

curl --request POST \
  --header "Content-Type: application/json" \
  --url "https://gitlab.example.com/api/v4/projects/:id/ci/lint" \
  --data @- <<'EOF'
{
  "content": "{
    \"image\": \"ruby:2.6\",
    \"services\": [\"postgres\"],
    \"before_script\": [
      \"bundle install\",
      \"bundle exec rake db:create\"
    ],
    \"variables\": {
      \"DB_NAME\": \"postgres\"
    },
    \"stages\": [\"test\", \"deploy\", \"notify\"],
    \"rspec\": {
      \"script\": \"rake spec\",
      \"tags\": [\"ruby\", \"postgres\"],
      \"only\": [\"branches\"]
    }
  }"
}
EOF

응답 예시:

  • 유효한 구성:

    {
      "valid": true,
      "merged_yaml": "---\ntest_job:\n  script: echo 1\n",
      "errors": [],
      "warnings": [],
      "includes": []
    }
    
  • 유효하지 않은 구성:

    {
      "valid": false,
      "errors": [
        "jobs config should contain at least one visible job"
      ],
      "warnings": [],
      "merged_yaml": "---\n\".job\":\n  script:\n  - echo \"A hidden job\"\n",
      "includes": []
    }
    

기존 CI/CD 구성 검증#

히스토리
  • sha 속성이 GitLab 16.5에서 도입되었습니다.
  • sharef가 GitLab 16.10에서 content_refdry_run_ref이름 변경되었습니다.

지정된 프로젝트의 기존 .gitlab-ci.yml 구성을 검증합니다. 이 엔드포인트는 프로젝트 컨텍스트에서 CI/CD 구성을 검증합니다. 여기에는 다음이 포함됩니다:

  • 프로젝트의 CI/CD 변수 사용.
  • include:local 항목에 대한 프로젝트 파일 검색.
GET /projects/:id/ci/lint
속성 유형 필수 설명
content_ref 문자열 아니요 CI/CD 구성 콘텐츠를 이 커밋 SHA, 브랜치 또는 태그에서 가져옵니다. 설정하지 않으면 프로젝트의 기본 브랜치 헤드의 SHA로 기본 설정됩니다.
dry_run 불리언 아니요 파이프라인 생성 시뮬레이션을 실행하거나 정적 검사만 수행합니다.
dry_run_ref 문자열 아니요 dry_runtrue이면 CI/CD YAML 구성을 검증하는 데 사용할 브랜치 또는 태그 컨텍스트를 설정합니다. 설정하지 않으면 프로젝트의 기본 브랜치로 기본 설정됩니다.
include_jobs 불리언 아니요 정적 검사 또는 파이프라인 시뮬레이션에 존재하는 작업 목록을 응답에 포함해야 하는 경우. 기본값: false.
ref 문자열 아니요 (더 이상 사용되지 않음) dry_runtrue이면 CI/CD YAML 구성을 검증하는 데 사용할 브랜치 또는 태그 컨텍스트를 설정합니다. 설정하지 않으면 프로젝트의 기본 브랜치로 기본 설정됩니다. 대신 dry_run_ref를 사용합니다.
sha 문자열 아니요 (더 이상 사용되지 않음) CI/CD 구성 콘텐츠를 이 커밋 SHA, 브랜치 또는 태그에서 가져옵니다. 설정하지 않으면 프로젝트의 기본 브랜치 헤드의 SHA로 기본 설정됩니다. 대신 content_ref를 사용합니다.

요청 예시:

curl --request GET \
  --url "https://gitlab.example.com/api/v4/projects/:id/ci/lint"

응답 예시:

  • include.yml포함된 파일이고 include_jobstrue로 설정된 유효한 구성:

    {
      "valid": true,
      "errors": [],
      "warnings": [],
      "merged_yaml": "---\ninclude-job:\n  script:\n  - echo \"An included job\"\njob:\n  rules:\n  - if: \"$CI_COMMIT_BRANCH\"\n  script:\n  - echo \"A test job\"\n",
      "includes": [
        {
          "type": "local",
          "location": "include.yml",
          "blob": "https://gitlab.example.com/test-group/test-project/-/blob/ef5014c045873c5c4ffeb7a2f5be021a1d3ed703/include.yml",
          "raw": "https://gitlab.example.com/test-group/test-project/-/raw/ef5014c045873c5c4ffeb7a2f5be021a1d3ed703/include.yml",
          "extra": {},
          "context_project": "test-group/test-project",
          "context_sha": "ef5014c045873c5c4ffeb7a2f5be021a1d3ed703"
        }
      ],
      "jobs": [
        {
          "name": "include-job",
          "stage": "test",
          "before_script": [],
          "script": [
            "echo \"An included job\""
          ],
          "after_script": [],
          "tag_list": [],
          "only": {
            "refs": [
              "branches",
              "tags"
            ]
          },
          "except": null,
          "environment": null,
          "when": "on_success",
          "allow_failure": false,
          "needs": null
        },
        {
          "name": "job",
          "stage": "test",
          "before_script": [],
          "script": [
            "echo \"A test job\""
          ],
          "after_script": [],
          "tag_list": [],
          "only": null,
          "except": null,
          "environment": null,
          "when": "on_success",
          "allow_failure": false,
          "needs": null
        }
      ]
    }
    
  • 유효하지 않은 구성:

    {
      "valid": false,
      "errors": [
        "jobs config should contain at least one visible job"
      ],
      "warnings": [],
      "merged_yaml": "---\n\".job\":\n  script:\n  - echo \"A hidden job\"\n",
      "includes": []
    }