Gitlab API로 Project Variable 넣기
December 2023 (339 Words, 2 Minutes)
오늘 재밌는 상황이 있었습니다.
기존에 비정기적으로 빌드 / 배포하는 서버가 로컬 워크스테이션에서 빌드를 진행하고있었습니다.
코드는 Github에 올라가있었지만, 실제로 Build는 로컬 워크스테이션에서 돌고있었습니다.
그 빌드에 필요한 변수들은 별도의 암호화없이 로컬에 등록된 파일에서 값을 읽어 빌드를 진행하는 형태였습니다.
일반적으로 Git에서 제공하는 CI 툴을 이용하면, 각 프로젝트 변수로 해당 변수들을 등록해서 손쉽게 관리할수있는데!
왜 그렇게 안쓰고있었을까?
라는 생각도 잠시 새로운 변경점이 생겼습니다.
고객사에서 내부망에 신규로 Gitlab을 구축했고, 해당 코드들을 GItlab으로 마이그레이션, 그리고 그에 따른 CI를 Gitlab Runner로 동작시키기 위해 Gitlab Ci 파일을 작성해달라는 것이였습니다.
해당 인프라를 직접 관리하는것이 아니기때문에, 어떤환경에서 Gitlab Runner가 실행될지 모르기때문에 기존과 같은방식을 고수할수는 없었고, 별다른 방법없이 프로젝트 변수들로 등록을해서 CI 파일에서 해당변수를 사용하는수밖에 없었죠.
기존 코드를 유지보수하면서 프로젝트 변수를 등록안했던 이유를 알수가 있었는데
“변수가 너무많아서” 라는 단순한 이유로, 그렇게 구축을 안해두고있던것이였습니다.
Prod , Stage, Develop 총 3개의 Branch가 있었고
각 브랜치별로 변수들이 약 50개가량 있어, 그냥 환경변수처리가 되어있다고 하는겁니다.
잠깐은 납득을 했지만 별다른 방법은 없었고
방법을 찾아보니, API만 쏴주면 프로젝트 변수로 등록을 할수있는듯해 해당방법으로 변수들을 Migration 하기로 결정했습니다.
우선은 API 통신을 하기위해 Settings → Access Tokens 항목에서 필요한 API 권한들을 선택후 토큰을 발급받았습니다.
해당 Git Repository 주소와 프로젝트의 ID, 그리고 토큰만 있으면 API를 쏘는것이 가능했습니다.
현재 제 블로그를 담고있는 Gitlab 프로젝트입니다.
여기에 “Project ID : 2” 가 실제로 구축한 제 Gitlab의 블로그 프로젝트인셈이죠
따라서 이 주소로 토큰과 함께 API를 쏴주면 프로젝트 변수 등록이 가능한셈입니다.
그럼 실제로 작성했던 Script를 보면서 다시 이야기해보겠습니다.
import requests
# API 토큰과 프로젝트 ID 설정
api_token = "발급한토큰"
project_id = "3"
gitlab_api_url = f"https://git.montkim.com/api/v4/projects/{project_id}/variables"
# 환경변수 목록
variables = {
"VAR1": "value1",
"VAR2": "value2",
# 추가 변수들...
}
headers = {
"PRIVATE-TOKEN": api_token,
}
# 각 환경변수를 프로젝트에 추가
for key, value in variables.items():
data = {
"key": key,
"value": value,
}
response = requests.post(gitlab_api_url, headers=headers, data=data)
if response.status_code == 201:
print(f"Variable {key} added successfully")
else:
print(f"Failed to add variable {key}: {response.text}")
꽤 짧은 스크립트인데 내용은 다 들어가있습니다.
gitlab api url은 project id를 참조해 gitlab의 위치를 참조하고
api token을 이용해 variable 항목에 있는 변수들을 Key, Value로 넣는 스크립트죠
해당 스크립트를 실행하고나면 응답여부를 확인할수가있는데요
정상응답을 받고 등록되었는지 확인하러 다시 Gitlab 을 켜봅니다.
Settings → CI/CD 항목에 Variable 탭을 확인해보면
값들이 정상적으로 들어가 있는것을 확인 할 수 있죠.
이제 남은것은 실제로 동작하는 변수들을 스크립트에 넣어 마이그레이션 하는 일만 남았군요
이 Script가 유용하게 쓰일분이 계실지 모르겠지만 기록으로 남겨봅니다.
그럼 20000