curl --header "PRIVATE-TOKEN: 토큰자리" "http://주소/api/v4/users
를 사용하면 gitlab의 유저 정보가 나온다.
curl --header "PRIVATE-TOKEN: 토큰자리" "http://주소/api/v4/users?per_page=100&page=2"
api이 제한이 있다고 하는데, 다음에 다시 알아봐야 겠지만
100항목 제한이 있다고한다.
페이지당 100건의 요청이 최대이고, 150을 해도 100개의 요청만 수행되는 듯 하다.
page=숫자 를 함께 사용하면 될 듯 하다.
이 명령어는 페이지당 100명의 유저 정보를 보여달라는 요청인데, 2번째 페이지,
즉, 101 ~ 200번째의 유저들의 정보를 보여준다.
curl --header "PRIVATE-TOKEN: 토큰자리" "http://주소/api/v4/users?per_page=100&page=2" | jq -r '.[]
json 형식의 데이터를 문자열로 다룰때 사용한다고 한다.
curl --header "PRIVATE-TOKEN: 토큰자리" "http://주소/api/v4/users?per_page=100&page=2" | jq -r '.[] | select(.state == "active") 이렇게 하면 blocked된 상태가 아닌 현재 사용중인 상태의 사용자만을 보여준다.
curl --header "PRIVATE-TOKEN: 토큰자리" "http://주소/api/v4/users?per_page=100&page=2" | jq -r '.[] | select(.state == "active") | {password: "password", name: .name, username: .username, email: .email, "skip_confirmation" : "true"}
원래 보여주던 항목에서 값을 가져오려면 key앞에 .을 붙여서 value를 만든다 ( key: .key) 비밀번호나 boolean의 경우 값을 관리자가 직접 정해줄 수 있다.
curl --header "PRIVATE-TOKEN: 토큰자리" "http://주소/api/v4/users?per_page=100&page=2" | jq -r '.[] | select(.state == "active") | {password: "password", name: .name, username: .username, email: .email, "skip_confirmation" : "true"} | tojson' | paste -sd ',' - >>user_info1.json
이렇게 원하는 값을 추출하고 다시 json으로 가공하려면 tojson을 사용하고 , 로 분리 해주기 위해 paste -sd ',' - 를 사용한다. 그리고 출력 값을 user_info1.json에 리다이렉션하여 저장하는데 모든 페이지를 한 번에 저장하기 위해 >> 를 써서 순차적으로 기록되게 한다. > 를 사용하면 덮어쓰기가 되어서 마지막에는 마지막 페이지에서 출력한 값만 남는다.
그리고 이렇게 출력한 사용자 정보를 다른 깃랩에 올리기 위해
파이썬 함수를 사용한다. 3.6 버전을 사용했다. 이 이상의 버전은 openSSL이나 다른 라이브러리가 호환되지 않을 수 있다.
pip list | grep requests 라는 명령어로 requests 라는 라이브러리가 사용가능한지 보고
------
import requests
gitlab_url = "http://깃랩주소/api/v4/users"
access_token = "토큰"
headers = {
"PRIVATE-TOKEN": "토큰",
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
users_data =
[ 여기에 json을 넣는다. ]
for data in users_data:
response = requests.post(gitlab_url, headers=headers, json=data)
if response.status_code == 201:
print(f"사용자 '{data['username']}'가 성공적으로 생성되었습니다.")
else:
print(f"사용자 생성 중 오류 발생: {response.text}")
-----

이런식으로 다 등록하게 된다
'CI-CD > Gitlab' 카테고리의 다른 글
| Kroki 미적용 해결 - diagram proxy 미지원 문제 (0) | 2026.06.01 |
|---|---|
| 별거 아니지만 gitlab 레포지토리 한 번에 clone (2) | 2024.09.04 |
| gitlab api 사용자에게 그룹 할당 (1) | 2024.05.07 |