티스토리 뷰
간단하게 GitLab API를 사용하는 방법에 대하여 알아보도록 하자.
우선 API를 호출하기 위한 주소가 필요한데 일반적으로 기본주소(https://gitlab.com)를%EB%A5%BC) 제외하고 /api/v4/를 기본 URI로 사용하게 된다. 명시된 버전(v4)의 경우 아래 코드상에 정의된 사항이니 참고하면 좋다.
API의 경우 주소외에 인증정보를 추가해야 하는데 GitLab API의 경우 다음과 같은 방식을 기본 제공한다.
- OAUTH2
- Personal Access Token
- Session Cookie
- GitLab CI Job token
- https://docs.gitlab.com/ee/api/#authentication
여기서는 Personal Access Token을 통한 API 접근에 대하여 알아보도록 하자.
다음 캡쳐화면과 같이 개인 설정화면으로 이동하여 access token을 발급을 진행한다.
Scope의 경우 API로 사용할 예정이기에 api를 필히 check하고 생성한다.
생성된 access token은 향후 인증을 위해 사용될 예정이다.
이제는 API 호출을 위해 목적별로 사용할 수 있는 주소를 알아보고 그에 맞게 호출해보는 작업을 해보자.
아래는 API에 대한 개괄적인 내용이 포함된 문서이다.
우선 간단히 특정 프로젝트내에 파일의 hash 값을 불러오는 작업을 해보자.
파일은 각 프로젝트내에 repository에 존재하므로 먼저 project ID를 추출해보자.
jacob@JACOB-DESKTOP:~$ curl --request GET --header "PRIVATE-TOKEN: [access_token]" 'http://192.168.99.99/api/v4/search?scope=projects&search=[subject_name]' | jq
[
{
"id": 3,
"description": "",
"name": "testsubj",
"name_with_namespace": "Administrator / testsubj",
"path": "testsubj",
"path_with_namespace": "root/testsubj",
"created_at": "2019-11-26T06:30:30.870Z",
"default_branch": "master",
"tag_list": [],
"ssh_url_to_repo": "git@192.168.99.99:root/spinnaker-test.git",
"http_url_to_repo": "http://192.168.99.99/root/spinnaker-test.git",
"web_url": "http://192.168.99.99/root/spinnaker-test",
"readme_url": null,
"avatar_url": null,
"star_count": 0,
"forks_count": 0,
"last_activity_at": "2019-11-27T04:24:36.402Z",
"namespace": {
"id": 1,
"name": "Administrator",
"path": "root",
"kind": "user",
"full_path": "root",
"parent_id": null,
"avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
"web_url": "http://192.168.99.99/root"
}
}
]
위에서 사용한 API는 Search API로 project 뿐아니라 user, issue 등을 검색해볼 수 있다.
파일을 검색하기 위해서는 다음과 같이 사용해볼수 있다.
파일의 경우 branch 별로 상이할수 있기에 ref=branchname을 입력한다.
jacob@JACOB-DESKTOP:~$ curl --request GET --header "PRIVATE-TOKEN: [access_token]" 'http://192.168.99.99/api/v4/projects/3/repository/files/test?ref=master' | jq
{
"file_name": "test",
"file_path": "test",
"size": 288,
"encoding": "base64",
"content_sha256": "453d8e89ddf7ca5ece53d7896152ed04c2cb4d3983cbe4ab310942225205a110",
"ref": "master",
"blob_id": "4f7673498461fb2915b2aa11b25204b9a9950677",
"commit_id": "a357e8dbf699400472f0b74a4b8d8197003b2522",
"last_commit_id": "a357e8dbf699400472f0b74a4b8d8197003b2522",
"content": "YXBpVmVyc2lvbjogYXBwcy92MQpraW5kOiBSZXBsaWNhU2V0Cm1ldGFkYXRhOgogIGxhYmVsczoKICAgIHRpZXI6IGZ1Y2sKICBuYW1lOiBmdWNrCnNwZWM6CiAgcmVwbGljYXM6IDEKICBzZWxlY3RvcjoKICAgIG1hdGNoTGFiZWxzOgogICAgICB0aWVyOiBmdWNrCiAgdGVtcGxhdGU6CiAgICBtZXRhZGF0YToKICAgICAgbGFiZWxzOgogICAgICAgIHRpZXI6IGZ1Y2sKICAgIHNwZWM6CiAgICAgIGNvbnRhaW5lcnM6CiAgICAgICAgLSBpbWFnZTogJ25naW54OjEuNycKICAgICAgICAgIG5hbWU6IGZ1Y2sK"
}
인증이 필요한 Gitlab에서 raw 파일을 api로 가져오기
인증이 필요한 GitLab에 token을 이용해서 raw file을 가져오는 방법을 알아보자.
아래와 같이 token을 header로 입력하여 raw 파일을 가져오며 ref는 branch를 의미하고 아래 projects 다음에 나오는 100의 경우 project ID를 의미한다. (project ID는 gitlab UI상에서 확인이 가능하다.)
jacob@JACOB-DESKTOP:~$ curl -o test.yaml -X GET -H "PRIVATE-TOKEN: XAxzjxPp4a4duihk6LM4" https://gitlab.jacobbaek.com/api/v4/projects/100/repository/files/test.yaml/raw?ref=master
'DevOps > System&Tools' 카테고리의 다른 글
Helm usage (0) | 2020.01.23 |
---|---|
Use ssh with jenkinsfile as scripted pipeline (0) | 2019.12.11 |
Jenkinsfile example using ssh and scp (0) | 2019.11.25 |
variables in Jenkinsfile (0) | 2019.11.22 |
Jenkinsfile validator (0) | 2019.11.20 |
- Total
- Today
- Yesterday
- jenkins
- kubernetes
- kubernetes install
- azure policy
- OpenStack
- Jenkinsfile
- crashloopbackoff
- openstacksdk
- boundary ssh
- kata container
- metallb
- nginx-ingress
- DevSecOps
- wsl2
- Terraform
- openstack backup
- K3S
- ansible
- ceph
- Helm Chart
- hashicorp boundary
- socket
- vmware openstack
- macvlan
- open policy agent
- minikube
- minio
- mattermost
- aquasecurity
- GateKeeper
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |