환경 API
GitLab 16.2에서 GitLab CI/CD 작업 토큰 인증을 지원합니다.
환경 목록
특정 프로젝트에 대한 모든 환경을 가져옵니다.
GET /projects/:id/environments
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
integer/string | 예 | 프로젝트의 ID 또는 URL-encoded 경로입니다. |
name |
string | 아니요 | 해당 이름의 환경을 반환합니다. search와 상호 배타적입니다. |
search |
string | 아니요 | 검색 기준과 일치하는 환경 목록을 반환합니다. name과 상호 배타적이며, 3자 이상이어야 합니다. |
states |
string | 아니요 | 특정 상태와 일치하는 모든 환경을 나열합니다. 허용되는 값: available, stopping, 또는 stopped입니다. 상태 값이 지정되지 않으면 모든 환경을 반환합니다. |
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/environments?name=review%2Ffix-foo"
응답 예시:
[
{
"id": 1,
"name": "review/fix-foo",
"slug": "review-fix-foo-dfjre3",
"description": "This is review environment",
"external_url": "https://review-fix-foo-dfjre3.gitlab.example.com",
"state": "available",
"tier": "development",
"created_at": "2019-05-25T18:55:13.252Z",
"updated_at": "2019-05-27T18:55:13.252Z",
"enable_advanced_logs_querying": false,
"logs_api_path": "/project/-/logs/k8s.json?environment_name=review%2Ffix-foo",
"auto_stop_at": "2019-06-03T18:55:13.252Z",
"kubernetes_namespace": "flux-system",
"flux_resource_path": "HelmRelease/flux-system"
}
]
특정 환경 가져오기
GET /projects/:id/environments/:environment_id
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
integer/string | 예 | 프로젝트의 ID 또는 URL-encoded path입니다. |
environment_id |
integer | 예 | 환경의 ID입니다. |
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/environments/1"
응답 예시:
{
"id": 1,
"name": "review/fix-foo",
"slug": "review-fix-foo-dfjre3",
"description": "This is review environment",
"external_url": "https://review-fix-foo-dfjre3.gitlab.example.com",
"state": "available",
"tier": "development",
"created_at": "2019-05-25T18:55:13.252Z",
"updated_at": "2019-05-27T18:55:13.252Z",
"enable_advanced_logs_querying": false,
"logs_api_path": "/project/-/logs/k8s.json?environment_name=review%2Ffix-foo",
"auto_stop_at": "2019-06-03T18:55:13.252Z",
"last_deployment": {
"id": 100,
"iid": 34,
"ref": "fdroid",
"sha": "416d8ea11849050d3d1f5104cf8cf51053e790ab",
"created_at": "2019-03-25T18:55:13.252Z",
"status": "success",
"user": {
"id": 1,
"name": "Administrator",
"state": "active",
"username": "root",
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
"web_url": "http://localhost:3000/root"
},
"deployable": {
"id": 710,
"status": "success",
"stage": "deploy",
"name": "staging",
"ref": "fdroid",
"tag": false,
"coverage": null,
"created_at": "2019-03-25T18:55:13.215Z",
"started_at": "2019-03-25T12:54:50.082Z",
"finished_at": "2019-03-25T18:55:13.216Z",
"duration": 21623.13423,
"project": {
"ci_job_token_scope_enabled": false
},
"user": {
"id": 1,
"name": "Administrator",
"username": "root",
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
"web_url": "http://gitlab.dev/root",
"created_at": "2015-12-21T13:14:24.077Z",
"bio": null,
"location": null,
"public_email": "",
"skype": "",
"linkedin": "",
"twitter": "",
"website_url": "",
"organization": null
},
"commit": {
"id": "416d8ea11849050d3d1f5104cf8cf51053e790ab",
"short_id": "416d8ea1",
"created_at": "2016-01-02T15:39:18.000Z",
"parent_ids": [
"e9a4449c95c64358840902508fc827f1a2eab7df"
],
"title": "Removed fabric to fix #40",
"message": "Removed fabric to fix #40\n",
"author_name": "Administrator",
"author_email": "admin@example.com",
"authored_date": "2016-01-02T15:39:18.000Z",
"committer_name": "Administrator",
"committer_email": "admin@example.com",
"committed_date": "2016-01-02T15:39:18.000Z"
},
"pipeline": {
"id": 34,
"sha": "416d8ea11849050d3d1f5104cf8cf51053e790ab",
"ref": "fdroid",
"status": "success",
"web_url": "http://localhost:3000/Commit451/lab-coat/pipelines/34"
},
"web_url": "http://localhost:3000/Commit451/lab-coat/-/jobs/710",
"artifacts": [
{
"file_type": "trace",
"size": 1305,
"filename": "job.log",
"file_format": null
}
],
"runner": null,
"artifacts_expire_at": null
}
},
"cluster_agent": {
"id": 1,
"name": "agent-1",
"config_project": {
"id": 20,
"description": "",
"name": "test",
"name_with_namespace": "Administrator / test",
"path": "test",
"path_with_namespace": "root/test",
"created_at": "2022-03-20T20:42:40.221Z"
},
"created_at": "2022-04-20T20:42:40.221Z",
"created_by_user_id": 42
},
"kubernetes_namespace": "flux-system",
"flux_resource_path": "HelmRelease/flux-system"
}
새 환경 만들기
지정된 이름과 external_url로 새 환경을 만듭니다.
환경이 성공적으로 생성되면 201을 반환하고, 잘못된 매개변수인 경우 400을 반환합니다.
POST /projects/:id/environments
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
정수/문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
name |
문자열 | 예 | 환경의 이름. |
description |
문자열 | 아니오 | 환경의 설명. |
external_url |
문자열 | 아니오 | 이 환경에 대한 링크를 지정합니다. |
tier |
문자열 | 아니오 | 새 환경의 티어입니다. production, staging, testing, development, other와 같은 값이 허용됩니다. |
cluster_agent_id |
정수 | 아니오 | 이 환경과 연관된 클러스터 에이전트입니다. |
kubernetes_namespace |
문자열 | 아니오 | 이 환경과 연관된 Kubernetes 네임스페이스입니다. |
flux_resource_path |
문자열 | 아니오 | 이 환경과 연관된 Flux 리소스 경로입니다. |
curl --data "name=deploy&external_url=https://deploy.gitlab.example.com" \
--header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/environments"
예시 응답:
{
"id": 1,
"name": "deploy",
"slug": "deploy",
"description": null,
"external_url": "https://deploy.gitlab.example.com",
"state": "available",
"tier": "production",
"created_at": "2019-05-25T18:55:13.252Z",
"updated_at": "2019-05-27T18:55:13.252Z",
"kubernetes_namespace": "flux-system",
"flux_resource_path": "HelmRelease/flux-system"
}
기존 환경 업데이트
- GitLab 16.0에서 제거된 매개변수
name.
기존 환경의 이름과/또는 external_url을 업데이트합니다.
환경이 성공적으로 업데이트되면 200을 반환합니다. 오류가 발생한 경우 400 상태 코드가 반환됩니다.
PUT /projects/:id/environments/:environments_id
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
정수/문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
environment_id |
정수 | 예 | 환경의 ID. |
description |
문자열 | 아니오 | 환경의 설명. |
external_url |
문자열 | 아니오 | 새 external_url. |
tier |
문자열 | 아니오 | 새 환경의 티어입니다. production, staging, testing, development, other와 같은 값이 허용됩니다. |
cluster_agent_id |
정수 또는 null | 아니오 | 이 환경과 연관된 클러스터 에이전트이거나 제거할 경우 null입니다. |
kubernetes_namespace |
문자열 또는 null | 아니오 | 이 환경과 연관된 Kubernetes 네임스페이스이거나 제거할 경우 null입니다. |
flux_resource_path |
문자열 또는 null | 아니오 | 이 환경과 연관된 Flux 리소스 경로이거나 제거할 경우 null입니다. |
curl --request PUT --data "external_url=https://staging.gitlab.example.com" \
--header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/environments/1"
예시 응답:
{
"id": 1,
"name": "staging",
"slug": "staging",
"description": null,
"external_url": "https://staging.gitlab.example.com",
"state": "available",
"tier": "staging",
"created_at": "2019-05-25T18:55:13.252Z",
"updated_at": "2019-05-27T18:55:13.252Z",
"kubernetes_namespace": "flux-system",
"flux_resource_path": "HelmRelease/flux-system"
}
환경 삭제
환경이 성공적으로 삭제되면 204를 반환하고, 환경이 존재하지 않을 경우 404를 반환합니다. 환경을 먼저 중지해야하며, 그렇지 않을 경우 요청은 403을 반환합니다.
DELETE /projects/:id/environments/:environment_id
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
정수/문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
environment_id |
정수 | 예 | 환경의 ID. |
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/environments/1"
중지된 여러 검토 앱 삭제
이미 중지된 상태이고 검토 앱 폴더에 있는 여러 환경의 삭제를 예약합니다. 실제 삭제는 실행 시간으로부터 1주일 후에 수행됩니다. 기본적으로 30일 이전의 환경만 삭제됩니다. 이 기본값은 before 매개변수를 사용하여 변경할 수 있습니다.
DELETE /projects/:id/environments/review_apps
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
정수/문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
before |
datetime | 아니오 | 환경 삭제 전의 날짜. 기본값은 30일 전입니다. ISO 8601 형식(YYYY-MM-DDTHH:MM:SSZ)으로 입력합니다. |
limit |
정수 | 아니오 | 삭제할 최대 환경 수. 기본값은 100입니다. |
dry_run |
불린 | 아니오 | 안전을 위해 기본값은 true입니다. 실제 삭제가 수행되지 않는 시뮬레이션 실행을 합니다. 환경을 실제로 삭제하려면 false로 설정합니다. |
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/environments/review_apps"
예시 응답:
{
"scheduled_entries": [
{
"id": 387,
"name": "review/023f1bce01229c686a73",
"slug": "review-023f1bce01-3uxznk",
"external_url": null
},
{
"id": 388,
"name": "review/85d4c26a388348d3c4c0",
"slug": "review-85d4c26a38-5giw1c",
"external_url": null
}
],
"unprocessable_entries": []
}
환경 중지
환경이 성공적으로 중지되면 200을 반환하고, 환경이 존재하지 않으면 404를 반환합니다.
POST /projects/:id/environments/:environment_id/stop
| 속성 | 유형 | 필요 여부 | 설명 |
|---|---|---|---|
id |
정수/문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
environment_id |
정수 | 예 | 환경의 ID. |
force |
부울 | 아니요 |
on_stop 액션을 실행하지 않고 환경을 강제로 중지합니다. |
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/environments/1/stop"
예시 응답:
{
"id": 1,
"name": "deploy",
"slug": "deploy",
"external_url": "https://deploy.gitlab.example.com",
"state": "stopped",
"created_at": "2019-05-25T18:55:13.252Z",
"updated_at": "2019-05-27T18:55:13.252Z",
"kubernetes_namespace": "flux-system",
"flux_resource_path": "HelmRelease/flux-system"
}
오래된 환경 중지
지정된 날짜 이전에 마지막으로 수정되거나 배포된 모든 환경에 중지 요청을 보냅니다. 보호된 환경은 제외됩니다. 중지 요청이 성공하면 200을 반환하고, 이전 날짜가 잘못된 경우 400을 반환합니다. 환경이 정확히 언제 중지되었는지에 대한 자세한 내용은 환경 중지를 참조하세요.
POST /projects/:id/environments/stop_stale
| 속성 | 유형 | 필요 여부 | 설명 |
|---|---|---|---|
id |
정수/문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
before |
날짜 | 예 | 지정된 날짜 이전에 수정 또는 배포된 환경을 중지합니다. ISO 8601 형식(2019-03-15T08:00:00Z)으로 기대됩니다. 유효한 입력 범위는 10년 전부터 1주 전까지입니다. |
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/environments/stop_stale?before=10%2F10%2F2021"
예시 응답:
{
"message": "모든 오래된 환경에 대한 중지 요청이 성공적으로 수행되었습니다"
}
도움말