본문 바로가기
Develop/Others

fatal: unable to access 'https://github.com/{user_name}/{repository_name}.git/': Port number ended with '{any_char}'

by 3-stack 2022. 9. 16.

[문제상황]

젠킨스 파이프라인 구성 중 깃 레포지토리 인증 후, 푸시하는 단계가 있었다.

 withCredentials([
        usernamePassword(
        credentialsId: 'user_name',
        usernameVariable: 'GIT_USERNAME',
        passwordVariable: 'GIT_PASSWORD'
    )]) {
    sh("git push http://$GIT_USERNAME:$GIT_PASSWORD@github.com/user_name/repository_name.git")
}

젠킨스 빌드가 아래와 같은 오류와 함께 실패.

fatal: unable to access 'https://github.com/{user_name}/{repository_name}.git/': Port number ended with '{any_char}'

 

[원인]

- http 또는 https 프로토콜을 사용하여 사용자 이름이나 비밀번호에 특수 문자를 전달할 때는 URL을 인코딩해야 한다. 예를 들어 비밀번호에 user#1을 사용하고 URL에 사용하려면 %23을 사용하여 #을 인코딩해야 하며 비밀번호는 user%231이 된다.

- '#' 문자는 URL에서 주의 해야한다. RFC 3986 section 2.2(https://www.rfc-editor.org/rfc/rfc3986#section-2.2)에 따르면 구분을 위해 예약되어 있다. 즉, URL 내 어딘가에서 사용하고 URL의 조각 부분을 나타내지 않으려면 URL 인코딩(%23)이 필요하다.

- URL이 인코딩되어 처리되기 때문이다.

 

[해결]

- git-credentials > store 과 같은 다른 인증 방식을 사용하기

- 인코딩 처리 되는 문자는 피하기

gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
                  / "*" / "+" / "," / ";" / "="

 

 

댓글