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}")

 

-----

 

이런식으로 다 등록하게 된다

+ Recent posts