bitbucket
bitbucket은 cli를 쓰기가 어렵게 되어 있어 rest api로 호출을 해야 합니다. 하지만 rest를 어느정도 다룰수 있다면 큰문제가 없겠죠? 그리고 bitbucket은 특성상 프로젝트 아래 repo가 있는 구조라서 프로젝트명도 환경변수로 들어가야 합니다.
모든 repo를 clone 하는 스크립트 입니다.
#!/bin/bash
BITBUCKET_SERVER="https://code.kth.com"
# ~/.bashrc or ~/.zshrc 에 환경 bitbucket 정보를 넣어주세요
#export BITBUCKET_USERNAME=kim@kth.com
#export BITBUCKET_PASSWORD='xxxyxyyxyxy'
# 프로젝트 목록 가져오기
echo "프로젝트 목록을 가져오는 중..."
project_list=$(curl -s -u "${BITBUCKET_USERNAME}:${BITBUCKET_PASSWORD}" "${BITBUCKET_SERVER}/rest/api/1.0/projects" | jq -r '.values[] | .name + "|" + .key')
# 프로젝트 목록 출력
echo "사용 가능한 프로젝트:"
IFS=$'\n' # 내부 필드 구분자를 개행 문자로 설정
select project_choice in $project_list; do
project_name=$(echo "$project_choice" | cut -d '|' -f 1)
project_key=$(echo "$project_choice" | cut -d '|' -f 2)
echo "선택된 프로젝트: $project_name ($project_key)"
break
done
unset IFS # IFS 설정을 원래대로 복구
# 선택된 프로젝트의 리포지토리 목록 가져오기
echo "리포지토리 목록을 가져오는 중..."
repo_list=$(curl -s -u "${BITBUCKET_USERNAME}:${BITBUCKET_PASSWORD}" "${BITBUCKET_SERVER}/rest/api/1.0/projects/${project_key}/repos" | jq -r '.values[] | .slug')
# 리포지토리 목록 출력
echo "사용 가능한 리포지토리:"
select repo_slug in $repo_list "모든 리포지토리 클론"; do
if [[ $repo_slug == "모든 리포지토리 클론" ]]; then
echo "모든 리포지토리를 클론하는 중..."
for repo in $repo_list; do
git clone "${BITBUCKET_SERVER}/scm/${project_key}/${repo}.git"
done
break
else
echo "선택된 리포지토리: $repo_slug"
break
fi
done
# 작업 선택
echo "수행할 작업을 선택하세요 (clone, save, pull, all_clone):"
read action
case $action in
clone)
echo "저장소를 클론하는 중..."
git clone "${BITBUCKET_SERVER}/scm/${project_key}/${repo_slug}.git"
;;
save)
echo "프로젝트 정보를 저장하는 중..."
echo "$project_key $project_name $repo_slug" > "${project_key}_${repo_slug}_info.txt"
;;
pull)
echo "최신 변경사항을 가져오는 중..."
if [ -d "$repo_slug" ]; then
cd "$repo_slug" && git pull
else
echo "디렉토리 '$repo_slug'가 존재하지 않습니다."
fi
;;
all_clone)
echo "모든 리포지토리를 클론하는 중..."
for repo in $repo_list; do
git clone "${BITBUCKET_SERVER}/scm/${project_key}/${repo}.git"
done
;;
*)
echo "알 수 없는 작업: $action"
;;
esac
Last updated