https://gitlab-docs.infograb.net/17.9/ee/administration/integration/kroki.html

 

GitLab 공식 기술 문서 한글판 by 인포그랩 | 인포그랩 | GitLab 기반 DevSecOps 구축,컨설팅,교육,CICD Pipe

GitLab의 Selected 파트너 인포그랩에서 OpenAI 기술 기반으로 자체 개발한 자동화 번역 프로그램을 통해 GitLab 공식 기술 문서의 한글판을 국내 최초로 제공합니다.

gitlab-docs.infograb.net

위의 문서를 접속하면 kroki 설정을 확인할 수 있다.

 

그런데 kroki 로 작성한 diagram이 출력이 안되는 문제 발생

mermaid는 작동하나 다른 다이어그램이 출력이 안되는 상황

curl도 제대로 나오고

 

svg도 서버에서 제대로 지원함

 

 

연결 문제라고 해서 확인해보니

현재 깃랩 버전에서는 diagram proxy를 지원을 안한다

 

그전에 kroki는 마크다운 문법으로 작성한 다이어그램을 랜더링해주는 랜더링 서버이다

gitlab -> kroki -> mermaid 엔진 -> SVG/PNG 생성 -> GitLab 화면 표시 

 

gitlab과 kroki간 통신도 확인했고 curl 을 이용하여 svg, png 도 잘 생성되는 것을 확인했다.

 

diagram proxy는 gitlab이 kroki 서버에서 직접 이미지를 가져와 사용자에게 보여주는 방식이다.

이것이 지원되지 않는 경우 사용자가 직접 kroki 서버에 접근할 수 있어야 이미지를 볼 수 있다.

 

 

방화벽 설정으로 자체 kroki 서버에 접근 허용하고 확인해보니

아래와 같이 출력이 잘 되었다.

 

 

보통 gitlab 서버에서 레포지토리의 위치는

/var/opt/gitlab/git-data/repositories    아래에 프로젝트 아래에 위치해있다.

 

여기에서 

명령어를 사용해 레포지토리 목록을 파일로 받아오고 이어서

 

for문 을 돌려서 차례로 git clone을 실행한다.

 

 


ll /var/opt/gitlab/git-data/repositories/해당프로젝트 | grep -v '생략할 문자열' | cut -d" " -f9 > /home/user/list.txt

또는 

cd /var/opt/gitlab/git-data/repositories/해당프로젝트
ll | grep -v '생략할 문자열' | cut -d" " -f9 > /home/user/list.txt


목록 생성 뒤
powershell 기준 ps1 파일 스크립트


####################################################
# list.txt 파일의 내용을 읽어옵니다
$fileList = Get-Content -Path "./list.txt"

# 파일 목록을 반복하여 처리합니다
foreach ($fileName in $fileList) {
    # 파일 이름에 공백이나 특수 문자가 있을 수 있으니, 따옴표로 감쌉니다
    $fileName = $fileName.Trim()

    # 파일 이름이 디렉토리 또는 파일의 이름일 때 경로를 완성합니다
    $filePath = Join-Path -Path (Get-Location) -ChildPath $fileName
    
    git clone ssh://git@URL:포트/해당프로젝트/$fileName
   
}
####################################################

curl --header "Private-Token: 토큰" \

--header "Content-Type: application/json" \

--request POST \

--data '{"user_id": 1, "access_level": 30}' \

"http://깃랩주소:포트/api/v4/groups/3/members"

 

access_level 이 접근 권한 이다

  • No access (0)
  • Minimal access (5)
  • Guest (10)
  • Reporter (20)
  • Developer (30)
  • Maintainer (40)
  • Owner (50)

이렇게 정할 수 있으며 위 예시에서는 30, developer의 권한을 사용자에게 할당하고 있다.

gitlab 서버의 cli 환경에서 진행했다.

 

등록하고 싶은 유저가 여러명인 경우 파이썬의 for 문을 이용해서 진행해본다

 

 

import requests


gitlab_url = "http://깃랩주소:포트/api/v4"
access_token = "토큰"

# 추가할 멤버와 그룹 ID 설정
user_id = 1  # 사용자의 ID
group_id = 1  # 그룹의 ID

# 멤버 추가 요청을 위한 데이터 설정
user_data = [{
    "user_id": user_id,
    "access_level": 30  # 액세스 수준 
},
{
    "user_id": 2,
    "access_level": 30  # 액세스 수준 
}
]
# API 요청을 보내기 위한 HTTP 헤더 설정
headers = {
    "Private-Token": access_token,
    "Content-Type": "application/json"  # 데이터 형식 지정
}

# 그룹에 멤버 추가 요청 보내기
# 응답 확인

for data in user_data:
    response = requests.post(f"{gitlab_url}/groups/{group_id}/members", headers=headers, json=data)
    if response.status_code == 201:
        print("그룹 멤버 추가가 성공적으로 완료되었습니다.")
    else:
        print("그룹 멤버 추가에 실패했습니다. 상태 코드:", response.status_code)
        print("에러 메시지:", response.json())

 

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