[jenkins/git플러그인/docker] UserRemoteConfig의 사용법?

프로그래밍/서버2020. 12. 15. 15:50

git plugin은 jenkins에서 git 관련 기초적인 동작을 가능하게 해줍니다. CI/CD를 위해 당연하게도 Jenkins에서 git 사용이 가능해야 합니다.

 

github.com/jenkinsci/git-plugin

 

관련 github 주소입니다.

 

docker에서 실행되는 Jenkins가 특정 private repository에 접근 가능하도록 username과 password를 제공하고자 합니다.

<scm class="hudson.plugins.git.GitSCM" plugin="git@4.2.2">
    <configVersion>2</configVersion>
    <userRemoteConfigs>
      <hudson.plugins.git.UserRemoteConfig>
        <url>https://abcde@bitbucket.org/abcde/my_jenkins.git</url>
      </hudson.plugins.git.UserRemoteConfig>
    </userRemoteConfigs>
    <branches>
      <hudson.plugins.git.BranchSpec>
        <name>*/master</name>
      </hudson.plugins.git.BranchSpec>
    </branches>
    <doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
    <submoduleCfg class="list"/>
    <extensions/>
  </scm>

abcde@bitbucket.org/abcde/my_jenkins.git reposityro가 private을 경우 username, password를 요구하기 때문에

stderr: remote: Invalid username or password 에러가 발생합니다.

 

그냥 딱 봤을때 <hudson.plugins.git.UserRemoteConfig>에 username과 password를 손쉽게 추가할 수 있을 것 같았는데 아무리 구글링을 해봐도 제대로 된 자료가 나오질 않았습니다.

 

그나마 관련있어 보이는 인자가 credentialsId 였습니다. 그러나 역시 자세한 사용법을 모르겠더라구요.

 

에러가 발생한 콜 스택을 보면 아래와 같습니다.

at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2450)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:2051)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$500(CliGitAPIImpl.java:84)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:573)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$2.execute(CliGitAPIImpl.java:802)
at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1122)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1167)
at hudson.scm.SCM.checkout(SCM.java:505)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1206)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:574)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:499)
at hudson.model.Run.execute(Run.java:1894)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:428)

GitSCM.java의 retrieveChanges 함수를 봐야할 것 같네요.

문제가 발생하는 부분의 코드만 일부 보겠습니다.

RemoteConfig rc = repos.get(0);
try {
    CloneCommand cmd = git.clone_().url(rc.getURIs().get(0).toPrivateString()).repositoryName(rc.getName());
    for (GitSCMExtension ext : extensions) {
        ext.decorateCloneCommand(this, build, git, listener, cmd);
    }
    cmd.execute();
    // determine if second fetch is required
    CloneOption option = extensions.get(CloneOption.class);
    if (!isAllowSecondFetch()) {
        removeSecondFetch = determineSecondFetch(option, rc);
    }
} catch (GitException ex) {
    ex.printStackTrace(listener.error("Error cloning remote repo '" + rc.getName() + "'"));
    throw new AbortException("Error cloning remote repo '" + rc.getName() + "'");
}

바로 위의 코드에서 cmd.execute()를 통해 실행 git 명령어가 수행되는 것 같습니다. 여기서.. username, password 문제로 exception이 발생해서 try catch에 잡혔나봐요.

 

코드를 좀 보다가.. 더 간단한 방법이 있을 것 같아서 찾아보니 있네요. ㅜㅜ

<hudson.plugins.git.UserRemoteConfig>
    <url>https://username:password@bitbucket.org/username/my_jenkins.git</url>
</hudson.plugins.git.UserRemoteConfig>

https://username:password@bitbucket.org/username/my_jenkins.git

 

바로 위와 같이 username과 password를 명시할 수 있습니다.

비밀번호가 노출되기 때문에 사용에 주의를 해야할 것 같습니다.

 

보안적인 문제가 있으면 UserRemoteConfig의 credentialsId를 사용해야 할 것 같습니다.

 

 

 

참고

github.com/jenkinsci/git-plugin

 

jenkinsci/git-plugin

Jenkins Git plugin . Contribute to jenkinsci/git-plugin development by creating an account on GitHub.

github.com

stackoverflow.com/questions/10054318/how-do-i-provide-a-username-and-password-when-running-git-clone-gitremote-git

 

How do I provide a username and password when running "git clone git@remote.git"?

I know how to provide a username and password to an HTTPS request like this: git clone https://username:password@remote But I'd like to know how to provide a username and password to the remote l...

stackoverflow.com

 

작성자

Posted by 드리머즈

관련 글

댓글 영역