오류를 만났을 때의 순서
- 같은 블록을 통째로 다시 실행하지 않는다. 생성 명령이 이미 성공했을 수 있다.
echo "$PM_REPO $PM_PROJECT"로 변수가 비어 있지 않은지 확인한다. 비어 있으면 source pm-lab/env.sh를 실행한다.
- 조회 명령(
gh issue list, gh project item-list, gh label list)으로 무엇이 이미 만들어졌는지 확인한다.
- 아래 표에서 메시지를 찾아 해결한 뒤, 실패한 줄부터 이어서 실행한다.
설치와 로그인
| 증상 또는 메시지 | 원인 | 해결 |
gh: command not found | 설치 전이거나 터미널이 새 경로를 모른다 | 설치 후 터미널을 닫고 다시 연다 |
unknown flag: --field, unknown flag: --url | gh 2.97.0 미만 | brew upgrade gh 또는 winget upgrade --id GitHub.cli |
unknown flag: --add-blocked-by | gh 2.94.0 미만 | 업그레이드한다. 당장 못 하면 웹의 Relationships에서 연결한다 |
your authentication token is missing required scopes [project] | 로그인에 project 권한이 없다 | gh auth refresh -s project |
HTTP 401, Bad credentials | 로그인이 만료되었거나 다른 계정이다 | gh auth status 확인 후 gh auth login |
HTTP 403 (조직) | 조직의 권한이나 SAML SSO 승인이 없다 | 개인 계정으로 실습하거나 조직 관리자에게 권한과 SSO 승인을 요청한다 |
| push에서 비밀번호를 물음 | Git이 gh 로그인 정보를 쓰지 않는다 | gh auth setup-git |
Author identity unknown | Git 사용자 이름과 메일이 없다 | git config --global user.name, user.email 지정 |
셸 문법
| 증상 또는 메시지 | 원인 | 해결 |
명령 뒤에 >만 나오고 끝나지 않음 | 따옴표나 EOF가 닫히지 않았다 | Ctrl+C로 취소하고 블록 전체를 다시 붙여넣는다 |
PM_REPO_NAME: command not found | = 양옆에 공백이 있다 | PM_REPO_NAME="launchpad-pm-lab"처럼 붙여 쓴다 |
본문 끝에 EOF 글자가 들어감 | 마지막 EOF 앞뒤에 공백이 있다 | EOF를 줄 맨 앞에 단독으로 둔다 |
$'\r': command not found | Windows 편집기가 줄 끝 문자를 바꿨다 | Git Bash에서 sed -i 's/\r$//' 파일 |
PowerShell에서 PM_OWNER=$(...)가 실패 | Bash 문법이다 | Git Bash나 WSL을 연다 |
| 저장한 파일 내용이 사라짐 | >> 대신 >를 썼다 | 변수 파일은 실습 1의 도구로 다시 만든다 |
date: illegal option -- d | macOS의 date 문법이 다르다 | 교안의 date -d ... || date -v-7d ... 형태를 그대로 쓴다 |
저장소, 마일스톤, 라벨, 이슈
| 증상 또는 메시지 | 원인 | 해결 |
Name already exists on this account | 같은 이름의 저장소가 있다 | 그 저장소를 쓸지 정하거나 PM_REPO_NAME을 바꾼다 |
HTTP 404 | 저장소 이름이 틀렸거나 변수가 비어 있다 | echo "$PM_REPO" |
Validation Failed ... already_exists | 같은 제목의 마일스톤이 있다 | 조회하고 다음 단계로 넘어간다 |
label with name "..." already exists | 같은 라벨이 있다 | 넘어가거나 --force로 색과 설명을 갱신한다 |
could not add to milestone '...': '...' not found | 마일스톤 제목이 다르다 | 마일스톤 조회 후 PM_MILESTONE을 맞춘다 |
could not add label: '...' not found | 라벨이 없다 | gh label list로 확인 후 만든다 |
| 같은 업무가 두 개 생김 | 생성 명령을 두 번 실행했거나 제목이 달랐다 | 한쪽을 --reason "not planned"로 닫고 Project에서 지운다 |
no issues match your search in ... | 조건에 맞는 이슈가 없다 | 오류가 아니라 조회 결과다 |
Project
| 증상 또는 메시지 | 원인 | 해결 |
PM_PROJECT가 비어 있음 | 번호 저장 단계가 실패했다 | gh project list --owner "$PM_OWNER"로 번호를 찾아 지정한다 |
field "..." not found in project; available fields: ... | 필드 이름이 틀렸다 | 메시지 끝의 목록에서 이름을 고른다 |
option "..." not found on field "Status" | 선택지 이름이 틀렸다 | "In Progress"처럼 공백까지 맞춘다 |
setting an iteration field by name is not supported | Iteration은 이름으로 지정할 수 없다 | 웹에서 바꾸거나 반복 ID로 --iteration-id를 쓴다 |
error: no changes to make | 바꿀 값이 없다 | --value 또는 --date를 붙인다 |
Project 3 for owner ... has no items | 조회 조건에 맞는 항목이 없다 | --query의 따옴표와 이름을 확인한다 |
| 이슈가 보드에 없음 | Project에 추가하지 않았거나 보기 필터에 걸렸다 | gh project item-add 실행, 보기 필터 확인 |
| Sprint 보드가 비어 있음 | Iteration 미배정, 이름 불일치, @current가 기간 밖 | 표 보기에서 Iteration 열 확인 |
| 이슈를 닫았는데 Status가 그대로 | Project 워크플로가 꺼져 있다 | item-edit --field Status --value Done, Workflows 설정 확인 |
PR, 스크립트, 기록
| 증상 또는 메시지 | 원인 | 해결 |
No commits between main and ... | 브랜치에 커밋이 없다 | git status, git log --oneline -3 |
no checks reported on the '...' branch | 저장소에 자동 검사가 없다 | 오류가 아니다 |
| 병합 후에도 이슈가 OPEN | PR 본문에 닫는 키워드가 없다 | gh pr view --json closingIssuesReferences 확인 후 직접 닫는다 |
오류: 아래 항목이 없어 아무것도 만들지 않았다. | 등록 스크립트의 사전 점검 실패 | 출력된 마일스톤과 라벨을 만들고 다시 실행한다 |
| 재실행 시 생성 오류 | 이미 만든 대상이 있다 | 조회 후 해당 단계를 건너뛴다 |
| 사전 리포트의 Project 현황이 “항목 없음” | --iteration 이름 불일치 | "Sprint 1"처럼 정확히 쓴다 |
jq가 필요하다 | jq 미설치 | brew install jq, winget install jqlang.jq |
| 시작 기록보다 종료 기록의 업무가 적음 | 종료 기록 전에 Iteration을 옮겼거나 항목을 보관했다 | Iteration을 되돌리고 종료 기록을 다시 저장한다 |
| 위키 탭이 없음 | 저장소 기능 설정 또는 무료 플랜의 비공개 저장소 | docs/ 폴더를 쓴다 |
이벤트 로그와 프로세스 마이닝 (2단계)
| 증상 또는 메시지 | 원인 | 해결 |
오류: 첫 줄이 case_id,activity,timestamp로 시작해야 한다 | 다른 형식의 CSV, 또는 엑셀이 붙인 BOM | head -1 파일로 첫 줄을 확인한다. BOM은 실습 22의 방법으로 지운다 |
오류: 조건에 맞는 사례가 없다 | --from, --to 기간에 작업을 시작한 업무가 없다 | 날짜 형식(YYYY-MM-DD)과 로그의 기간을 확인한다 |
오류: 인자가 너무 많다: 기록 | 공백이 있는 활동 이름을 따옴표 없이 썼다 | --has "결정 기록" |
| 교안의 숫자와 다르다 | 원본 로그로 실행했다 | 2단계 숫자는 모두 orbit-event-log-clean.csv 기준이다 |
| 화면 도구가 “이벤트 로그를 불러오지 못했다” | 교안을 파일로 열었다 | docs 폴더에서 python3 -m http.server, http://localhost:8000 |
| “PM4Py를 불러오지 못했다” | 네트워크가 cdn.jsdelivr.net이나 pypi.org를 막았다 | GitHub Pages 주소로 열거나 내 컴퓨터에서 pm4py-notebook.py를 실행한다 |
pip install pm4py가 cvxopt에서 실패 | cvxopt를 빌드할 컴파일러가 없다 | pip install pm4py==2.7.23.8 --no-deps 뒤 나머지 패키지를 따로 설치한다 (실습 24) |