모든 명령은 수업 전 준비에서 만든 작업 폴더에서 실행한다. 새 터미널을 열었다면 먼저 작업 폴더로 이동한다.
cd ~/gh-pm-lab
1반복해서 쓸 값을 변수로 정하기
아래 네 줄은 로그인 이름, 저장소 이름, 마일스톤 이름을 변수에 담는다. 마지막 줄은 결과를 화면에 보여 준다.
PM_OWNER=$(gh api user --jq .login) PM_REPO_NAME="launchpad-pm-lab" PM_REPO="$PM_OWNER/$PM_REPO_NAME" PM_MILESTONE="M1 비공개 베타" echo "$PM_REPO / $PM_MILESTONE"
gildong/launchpad-pm-lab / M1 비공개 베타
| 변수 | 값 | 쓰이는 곳 |
|---|---|---|
PM_OWNER | 로그인 이름. gh api user가 돌려준 JSON에서 login 값만 꺼낸다. | Project 소유자 |
PM_REPO_NAME | 저장소 이름 | Project와 저장소 연결 |
PM_REPO | 소유자/저장소 형식의 전체 이름 | 거의 모든 -R 옵션 |
PM_MILESTONE | 첫 출시 목표 이름 | 이슈 등록과 조회 |
조직 저장소에서 운영할 때는 PM_OWNER에 조직 이름을 직접 넣는다. 예: PM_OWNER="launchpad-inc". 조직에서 저장소와 Project를 만들 권한이 있는지 먼저 확인한다.
2실습 저장소 만들기
gh repo create "$PM_REPO" --private --add-readme \ --description "Launchpad 초기 스프린트 PM 실습" gh repo view "$PM_REPO" --web
✓ Created repository gildong/launchpad-pm-lab on github.com https://github.com/gildong/launchpad-pm-lab
| 옵션 | 뜻 |
|---|---|
--private | 본인과 초대한 사람만 볼 수 있는 저장소로 만든다. |
--add-readme | README 파일 하나를 넣어 만든다. 기본 브랜치 main이 함께 생긴다. |
--description | 저장소 첫 화면에 보이는 설명이다. |
--web | 결과를 브라우저로 연다. |
생성 명령은 최초 설정용이다. 오류가 나면 블록 전체를 다시 실행하지 말고, gh repo view "$PM_REPO"로 저장소가 이미 생겼는지 조회한 뒤 그다음 단계부터 이어 간다. 같은 이름의 저장소가 이미 있으면 PM_REPO_NAME을 다른 이름으로 바꾸고 1단계의 셋째 줄(PM_REPO=...)부터 다시 실행한다.
3변수를 파일에 저장하기
셸 변수는 터미널을 닫으면 사라진다. 2회차는 다른 날 진행하므로 값을 파일에 저장해 둔다.
mkdir -p pm-lab cat > pm-lab/env.sh <<EOF PM_OWNER="$PM_OWNER" PM_REPO_NAME="$PM_REPO_NAME" PM_REPO="$PM_REPO" PM_MILESTONE="$PM_MILESTONE" EOF cat pm-lab/env.sh
PM_OWNER="gildong" PM_REPO_NAME="launchpad-pm-lab" PM_REPO="gildong/launchpad-pm-lab" PM_MILESTONE="M1 비공개 베타"
이 블록의 <<EOF에는 따옴표가 없다. 따옴표가 없으면 $PM_OWNER 같은 변수가 실제 값으로 바뀐 뒤 저장된다. 반대로 <<'EOF'처럼 따옴표를 붙이면 적은 글자가 그대로 저장된다. 업무 본문처럼 $가 들어갈 수 있는 글은 따옴표를 붙인 형태로 저장한다.
새 터미널에서는 아래 두 줄로 값을 다시 불러온다.
cd ~/gh-pm-lab source pm-lab/env.sh
pm-lab/env.sh를 잃어버렸다면 아래 입력란에 값을 넣어 같은 파일을 다시 만드는 명령을 얻는다. 입력값은 이 브라우저에만 저장된다.
mkdir -p pm-lab cat > pm-lab/env.sh <<'EOF' PM_OWNER="내-로그인" PM_REPO_NAME="launchpad-pm-lab" PM_REPO="$PM_OWNER/$PM_REPO_NAME" PM_MILESTONE="M1 비공개 베타" EOF source pm-lab/env.sh
실습 3 이후에 저장하는 이슈 URL 변수는 이 도구가 만들지 않는다. 해당 실습의 저장 명령을 다시 실행한다.
- 브라우저에서 실습 저장소가 보이고, 저장소 이름 옆에 Private 표시가 있다.
- 저장소 상단 메뉴에 Issues 탭이 있다.
cat pm-lab/env.sh가 네 줄을 보여 준다.- 새 터미널에서
source pm-lab/env.sh후echo "$PM_REPO"가 저장소 이름을 출력한다.
막히면
| 증상 | 확인과 해결 |
|---|---|
echo 결과가 /launchpad-pm-lab처럼 앞부분이 비어 있음 | PM_OWNER가 비어 있다. gh auth status로 로그인을 확인하고 1단계 첫 줄을 다시 실행한다. |
Name already exists on this account | 같은 이름의 저장소가 있다. 그 저장소를 실습에 쓸지 정하고, 아니면 PM_REPO_NAME을 바꾼다. |
PM_REPO_NAME: command not found | = 양옆에 공백이 들어갔다. PM_REPO_NAME="launchpad-pm-lab"처럼 붙여 쓴다. |
> 표시가 나오고 명령이 끝나지 않음 | 따옴표나 EOF가 닫히지 않았다. Ctrl+C로 취소하고 블록 전체를 다시 붙여넣는다. |
HTTP 403 (조직 저장소) | 조직에서 저장소 생성 권한이 없다. 개인 계정으로 실습하거나 관리자에게 권한을 요청한다. |
마치며...
이 실습으로 비공개 저장소 하나와, 그 저장소를 가리키는 변수 파일 pm-lab/env.sh가 생겼다. 실습 2에서는 이 저장소에 출시 목표 두 개와 업무 분류용 라벨을 만든다.