Change GitSCM repository from a plugin

32 views
Skip to first unread message

Iñigo Telleria

unread,
Mar 18, 2016, 9:13:59 AM3/18/16
to Jenkins Users
Hi,

I'm developing a Jenkins plugin which copies a job (template-job) and changes some data. 

To do so, I've written this code in a plugin:

MavenModuleSet template = (MavenModuleSet) jenkins.getItem("template-job");
MavenModuleSet newJob = (MavenModuleSet) jenkins.copy((TopLevelItem) template, "new-job-name");

GitSCM gitScm = (GitSCM) newJob.getScm();
List<RemoteConfig> repositories = gitScm.getRepositories();

if (repositories.size() != 1) {
 
throw new IllegalStateException("Just one repository was expected and there are " + repositories.size());
}

RemoteConfig repository = repositories.get(0);
repository
.removeURI(new URIish("${REPOSITORY_URL}"));
String newUrl = "http://domain.com/project.git"
repository
.addURI(new URIish(url));

This code creates a new job based on template-job and it has a new name. However, I can't change its git's repository url.

Have I missed something? Can somebody give me a clue?

Iñigo


Mark Waite

unread,
Mar 18, 2016, 2:12:32 PM3/18/16
to Jenkins Users

--
You received this message because you are subscribed to the Google Groups "Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-use...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/cb67d0da-3d96-478b-a024-d79445f48b7b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Iñigo Telleria

unread,
Mar 18, 2016, 5:06:32 PM3/18/16
to Jenkins Users
As far as I've understood JGit is to manage a local or remote repostiry. However, what I need is to modify remote repository address of a job. 

For example, a job's repository url is http://domain.com/project.git. With the plugin I'm implementing I want to replace that address with another one, http://newdomain.com/newproject.git.

To get this, I've tried with the snippet I've included above but it doesn't work. Any idea?

Mark Waite

unread,
Mar 18, 2016, 5:27:44 PM3/18/16
to Jenkins Users
Since the job uses the remote repository address which is stored inside the repository, I suggested that you use JGit to modify the job definition in the repository, then rely on the plugin to read the definition from the repository.

Alternately, you could look at the source code of the git plugin and the git client plugin, to see if there is a convenient programming interface.  Since the repository address can be set from the user interface, there is likely a DataBoundConstructor and/or DataBoundSetter which can set the repository address and repository name.

Mark Waite 

Iñigo Telleria

unread,
Mar 21, 2016, 12:20:38 PM3/21/16
to Jenkins Users
Thanks Mark. 

Reading the source code git plugin I've been able to modify the git repository address. You were right there was DataBoundConstructor to do it, its name is UserRemoteConfig.

Iñigo
Reply all
Reply to author
Forward
0 new messages