소스 단계에서 빌드 실패
빌드를 작성하고 실행한 후, 빌드가 완료되지 않고 소스 단계에서 빌드가 실패했다는 메시지가 수신됩니다.
빌드 중에 소스 단계가 실패했다는 메시지를 수신하는 경우, 빌드의 로그를 확인하여 문제점의 근본 원인을 판별하십시오.
예제 오류 메시지
Summary: Failed to execute build run
Status: Failed
Reason: buildrun step step-source-default failed in pod <BUILDRUN_NAME>-zvcc9-pod-trsq2, for detailed information: ibmcloud ce buildrun logs -n <BUILDRUN_NAME>
ibmcloud ce buildrun logs 명령을 실행하십시오. 실패한 단계에 대한 로그에 중점을 두십시오.
ibmcloud ce buildrun logs -n <BUILDRUN_NAME>
[...]
<BUILDRUN_NAME>-zvcc9-pod-trsq2/step-source-default:
{"level":"info","ts":1625217529.370393,"logger":"git","msg":"ssh","path":"/usr/bin/ssh","version":"OpenSSH_8.0p1, OpenSSL 1.1.1g FIPS 21 Apr 2020"}
{"level":"info","ts":1625217529.3847454,"logger":"git","msg":"git","path":"/usr/bin/git","version":"git version 2.27.0"}
{"level":"info","ts":1625217529.3940003,"logger":"git","msg":"git-lfs","path":"/usr/bin/git-lfs","version":"git-lfs/2.11.0 (GitHub; linux amd64; go 1.14.4)"}
{"level":"debug","ts":1625217529.3940916,"logger":"git","msg":"/usr/bin/git clone --quiet --no-tags --branch main --depth 1 --single-branch -- https://github.com/IBM/CodeEngineX /workspace/source"}
{"level":"error","ts":1625217529.58695,"logger":"git","msg":"git command failed","command":"/usr/bin/git clone --quiet --no-tags --branch main --depth 1 --single-branch -- https://github.com/IBM/CodeEngineX /workspace/source","output":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled (exit code 128)","stacktrace":"main.git\n\tgithub.com/shipwright-io/build/cmd/git/main.go:324\nmain.clone\n\tgithub.com/shipwright-io/build/cmd/git/main.go:277\nmain.runGitClone\n\tgithub.com/shipwright-io/build/cmd/git/main.go:115\nmain.Execute\n\tgithub.com/shipwright-io/build/cmd/git/main.go:98\nmain.checkAndRun\n\tgithub.com/shipwright-io/build/cmd/git/main.go:90\nmain.main\n\tgithub.com/shipwright-io/build/cmd/git/main.go:70\nruntime.main\n\truntime/proc.go:204"}
{"level":"error","ts":1625217529.587297,"logger":"git","msg":"program failed with an error","error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled (exit code 128)","stacktrace":"main.Execute\n\tgithub.com/shipwright-io/build/cmd/git/main.go:100\nmain.checkAndRun\n\tgithub.com/shipwright-io/build/cmd/git/main.go:90\nmain.main\n\tgithub.com/shipwright-io/build/cmd/git/main.go:70\nruntime.main\n\truntime/proc.go:204"}
[...]
오류 텍스트는 잘못된 상황에 따라 다릅니다. 다음 표에는 이 시나리오에 대한 오류 텍스트와 잠재적인 근본 원인이 설명되어 있습니다.
| 오류 메시지에 포함된 내용 | 잠재적인 근본 원인 |
|---|---|
terminal prompts disabled |
|
Host key verification failed |
|
Permission denied (publickey) |
|
Couldn't find remote ref |
|
Your SSH key has expired. |
-SSH키가 만료되었습니다. |
다음 솔루션 중 하나를 시도하십시오.
콘솔 또는 CLI 에서 빌드를 실행하는지 여부에 관계없이 CLI를 사용하여 빌드의 문제점을 해결하십시오.
- 빌드 실행의 세부사항을 표시하려면
ibmcloud ce buildrun get --name BUILDRUN_NAME명령을 실행하십시오. - 명령 출력에서
Reason을 검토하십시오.
로그를 확인하고 잠재적 근본 원인을 식별한 후, 다음 해결 조치를 사용하여 문제점을 해결하십시오.
빌드 중 존재하지 않는 저장소에 대한 해결 방법
다음 명령을 사용하여 Git 저장소 소스를 참조하도록 기존 빌드를 업데이트하고 빌드 실행을 제출하십시오.
-
ibmcloud ce build update명령을 사용하여 빌드 구성을 업데이트하십시오. 예를 들면 다음과 같습니다.ibmcloud ce build update --name <BUILD_NAME> --source <GIT_REPO> -
ibmcloud ce buildrun submit명령을 사용하여 새 빌드 실행을 제출하십시오.buildrun submit명령의 경우 빌드 구성의 이름을 제공하려면--build옵션을 지정해야 합니다. 선택적으로--name옵션을 지정하여 이 빌드 실행의 이름을 제공할 수 있습니다.--name옵션을 지정하는 경우 실패한 빌드 실행과 다른 빌드 실행 이름을 사용하거나,ibmcloud ce buildrun delete명령을 사용하여 실패한 빌드 실행을 삭제해야 합니다. 예를 들면 다음과 같습니다.ibmcloud ce buildrun submit --build <BUILD_NAME> --name <BUILDRUN_NAME>
빌드 중 잘못된 프로토콜 또는 누락된 시크릿에 대한 해결 방법
Git 저장소에 대한 URL은 HTTPS 또는 SSH 프로토콜을 사용하여 지정할 수 있습니다. GitHub와 GitLab은 Git UI 에서 URL 형식을 전환하는 방법을 제공합니다. HTTPS 프로토콜의 경우, 인증이 필요하지 않지만 저장소가 공용인 경우에만 사용할 수 있습니다. 개인용 저장소의 경우, SSH 프로토콜을 사용하고 저장소에 대한 시크릿을 제공해야 합니다. GitHub Enterprise 설정의 저장소는 공용일 수 있지만 여전히 인증이 필요하며, 해당 GitHub Enterprise 저장소는 SSH 프로토콜을 통해서만 사용할 수도 있습니다.
공용 저장소의 경우
공용 저장소에 대한 실패가 발생한 경우 Git 저장소의 HTTPS URL을 사용하도록 기존 빌드를 업데이트한 후 빌드를 실행하십시오.
-
ibmcloud ce build update명령을 사용하여 Git 저장소의 HTTPS URL을 사용하도록 빌드 구성을 업데이트하십시오. 예를 들면 다음과 같습니다.ibmcloud ce build update --name <BUILD_NAME> --source <GIT_REPO> -
ibmcloud ce buildrun submit명령을 사용하여 새 빌드 실행을 제출하십시오.buildrun submit명령의 경우 빌드 구성의 이름을 제공하려면--build옵션을 지정해야 합니다. 선택적으로--name옵션을 지정하여 이 빌드 실행의 이름을 제공할 수 있습니다.--name옵션을 지정하는 경우 실패한 빌드 실행과 다른 빌드 실행 이름을 사용하거나,ibmcloud ce buildrun delete명령을 사용하여 실패한 빌드 실행을 삭제해야 합니다. 예를 들면 다음과 같습니다.ibmcloud ce buildrun submit --build <BUILD_NAME> --name <BUILDRUN_NAME>
개인용 저장소의 경우
개인용 저장소에 대해 실패가 발생한 경우 SSH 시크릿을 작성하고 SSH 프로토콜을 사용하십시오. SSH 시크릿에는 컨테이너 이미지를 빌드하기 위한 소스 코드를 포함하는 개인용 저장소에 액세스하기 위한 신임 정보가 포함되어 있습니다. SSH 시크릿은 Git 저장소 액세스 시크릿으로도 사용됩니다. 해당 공개 키가 Git 저장소 제공자와 함께 저장되는 동안 SSH 시크릿에는 개인 키가 포함됩니다. 키 쌍을 작성하고 공용 파트를
GitHub 또는 GitLab에 저장하는 방법에 대한 자세한 정보는 개인용 코드 저장소 액세스를 참조하십시오. 개인 키 파일을 Code Engine에 업로드하려면 비밀번호 문구로 암호화되어 있지 않아야 합니다. 개인 키 파일의 형식은 다를 수 있으므로 파일의 암호화 여부를 평가하기가 복잡합니다, 키 쌍을
작성하는 데 사용된 ssh-keygen 도구의 버전에 따라 파일에 다음 헤더 중 하나가 있을 수 있습니다.
-
파일이
-----BEGIN RSA PRIVATE KEY-----로 시작한다면 PEM 형식을 사용하며 이전 버전의ssh-keygen으로 작성되었습니다. 파일이 비밀번호 문구로 암호화된 경우 일반적으로Proc-Type: 4,ENCRYPTED과 같이 행이 포함되어 있습니다. -
파일이
-----BEGIN OPENSSH PRIVATE KEY-----로 시작한다면 최신 버전의ssh-keygen으로 작성되었습니다. 비밀번호 문구로 암호화되었는지 확인하려면ssh-keygen -p -f <ID_FILE>명령을 실행하십시오.ssh-keygen -p -f <ID_FILE> Enter old passphrase:ssh-keygen -p -f <ID_FILE> Key has comment '<COMMENT>' Enter new passphrase (empty for no passphrase):Ctrl+C를 사용하여 명령을 이스케이프 처리할 수 있습니다. 명령에 이전 비밀번호 문구(첫 번째 예)가 필요하다면 원본 파일이 암호화된 것입니다. 그렇지 않다면 새 파일의 비밀번호 문구(두 번째 예)를 직접 요청합니다.암호화된 개인 키 파일을 복호화하려면 다음 명령을 실행하고 새 비밀번호 문구를 비워 두십시오.
$ ssh-keygen -p -f <ID_FILE> Enter old passphrase: <PASSPHRASE> Key has comment '<COMMENT>' Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase.이 명령은 개인 키 파일을 수정합니다. 암호화된 버전을 보존해야 하는 경우 먼저 사본을 작성하십시오.
SSH 시크릿을 작성하고 SSH 프로토콜을 사용하려면 다음을 수행하십시오.
-
ibmcloud ce secret create --format ssh명령을 실행하십시오. SSH 시크릿은 Git 저장소 액세스 시크릿으로도 사용됩니다.SSH_KEY_PATH는 계정의 공개 키 또는 저장소의 배치 키와 일치하는 개인용 키 파일을 가리켜야 합니다. 이 명령에는 이름 및 키 경로가 필요하며 알려진 호스트 파일에 대한 경로와 같은 기타 선택적 인수도 허용됩니다.--known-hosts-path옵션을 지정하는 경우 Git 저장소의 호스트 (예:github.com또는gitlab.com) 를 알려진 호스트 파일에 포함시키십시오. 자세한 정보는 개인용 코드 저장소 액세스를 참조하십시오.ibmcloud ce secret create --format ssh --name <GIT_REPO_SECRET> --key-path <SSH_KEY_PATH> --known-hosts-path <PATH_TO_KNOWN_HOSTS_FILE> -
ibmcloud ce build update명령을 사용하여 Git 저장소의 SSH URL을 사용하도록 빌드 구성을 업데이트하고 SSH 시크릿,<GIT_REPO_SECRET>를 참조하십시오. 예를 들면 다음과 같습니다.ibmcloud ce build update --name <BUILD_NAME> --source <GIT_REPO> --git-repo-secret <GIT_REPO_SECRET>위 예에서 소스에 대해
git@접두부를 사용하여 SSH URL을 지정하십시오(예:--source git@github.com:IBM/CodeEngine.git).
빌드 중 잘못된 개정에 대한 해결 방법
빌드 구성은 URL 및 선택적으로 개정을 사용하여 소스 저장소를 지정합니다. 개정은 분기 또는 태그의 이름이거나 커미트 ID일 수 있습니다. 기본적으로 main 분기가 빌드됩니다. 지정되었지만 존재하지 않는 항목에 대한 정보는 오류 메시지를 검토하십시오.
-
ibmcloud ce build update명령을 사용하여 올바른 개정(또는 커미트)을 사용하도록 빌드 구성을 업데이트하십시오. 예를 들면 다음과 같습니다.ibmcloud ce build update --name <BUILD_NAME> --commit <COMMIT> -
ibmcloud ce buildrun submit명령을 사용하여 새 빌드 실행을 제출하십시오.buildrun submit명령의 경우 빌드 구성의 이름을 제공하려면--build옵션을 지정해야 합니다. 선택적으로--name옵션을 지정하여 이 빌드 실행의 이름을 제공할 수 있습니다.--name옵션을 지정하는 경우 실패한 빌드 실행과 다른 빌드 실행 이름을 사용하거나,ibmcloud ce buildrun delete명령을 사용하여 실패한 빌드 실행을 삭제해야 합니다. 예를 들면 다음과 같습니다.ibmcloud ce buildrun submit --build <BUILD_NAME> --name <BUILDRUN_NAME>
빌드 중에 만료된 SSH키에 대한 해결
SSH키를 사용하여 소스 저장소에 연결하고 SSH키가 만료되었음을 표시하는 오류를 수신하는 경우, 실패한 빌드에서 코드 저장소 액세스 시크릿으로 사용하는 SSH키에 대한 설정을 확인하십시오.
SSH키가 작성된 방법, 키가 특정 사용자에 대해 작성되었는지 여부 또는 SSH키가 저장소에 대한 Git 배치 키인지 여부를 알아야 합니다. 키의 만기를 지정했을 수 있습니다. 키의 만기 설정은 GitLab의 기능입니다.
IBM Cloud® Continuous Delivery 은 GitLab을 기반으로 합니다. 자세한 정보는 Continuous Delivery Git 저장소 및 문제 추적 을 참조하십시오.
이 오류를 해결하려면 다음 조치를 수행하십시오.
-
Code Engine에서 사용 중인 SSH키를 알고 있는 경우 GitLab에서 동일한 SSH 공개 키를 사용하여 배치 또는 사용자 키를 업데이트하십시오. 업데이트에서는 만기 또는 다른 만기 날짜로 업데이트를 사용하지 마십시오. Code Engine의 시크릿에서 동일한 SSH키를 사용 중이므로 Code Engine에서 코드 저장소 액세스 시크릿을 업데이트할 필요가 없습니다.
-
새 SSH키를 사용하도록 코드 저장소 액세스 시크릿을 업데이트하십시오.
-
GitLab에서 SSH 공개 키를 사용하여 배치 키 또는 사용자 키를 작성하십시오.
-
Code Engine에서 새 SSH 개인 키를 사용하도록 코드 저장소 액세스 시크릿을 업데이트하십시오.
예를 들어,
mysecret-ssh코드 저장소 액세스 시크릿을 업데이트하려 한다고 가정하십시오.ibmcloud ce secret update --format ssh명령을 사용하여 Git 저장소를 인증하도록 시크릿을 업데이트하십시오.ibmcloud ce secret update --format ssh --name mysecret-ssh --key-path $HOME/.ssh/id_rsa --known-hosts-path $HOME/.ssh/known_hosts
-
코드 저장소의 SSH키 작업에 대한 자세한 정보는 개인 코드 저장소에 액세스 를 참조하십시오.