[jenkins/git플러그인/docker] UserRemoteConfig의 사용법?
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
댓글 영역