Add possibility to configure the timeouts for GitLabConnections (fixes #342)
This commit is contained in:
parent
32ed183624
commit
3f92edbd22
|
@ -106,7 +106,9 @@ public class GitLabPushTrigger extends Trigger<Job<?, ?>> {
|
|||
gitLabConfig.getConnections().add(new GitLabConnection(oldConfig.gitlabHostUrl,
|
||||
oldConfig.gitlabHostUrl,
|
||||
oldConfig.gitlabApiToken,
|
||||
oldConfig.ignoreCertificateErrors));
|
||||
oldConfig.ignoreCertificateErrors,
|
||||
10,
|
||||
10));
|
||||
|
||||
String defaultConnectionName = gitLabConfig.getConnections().get(0).getName();
|
||||
for (AbstractProject<?, ?> project : Jenkins.getInstance().getAllItems(AbstractProject.class)) {
|
||||
|
|
|
@ -27,13 +27,17 @@ public class GitLabConnection {
|
|||
// TODO make final when migration code gets removed
|
||||
private String apiTokenId;
|
||||
private final boolean ignoreCertificateErrors;
|
||||
private final Integer connectionTimeout;
|
||||
private final Integer readTimeout;
|
||||
|
||||
@DataBoundConstructor
|
||||
public GitLabConnection(String name, String url, String apiTokenId, boolean ignoreCertificateErrors) {
|
||||
public GitLabConnection(String name, String url, String apiTokenId, boolean ignoreCertificateErrors, Integer connectionTimeout, Integer readTimeout) {
|
||||
this.name = name;
|
||||
this.url = url;
|
||||
this.apiTokenId = apiTokenId;
|
||||
this.ignoreCertificateErrors = ignoreCertificateErrors;
|
||||
this.connectionTimeout = connectionTimeout;
|
||||
this.readTimeout = readTimeout;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
|
@ -52,6 +56,21 @@ public class GitLabConnection {
|
|||
return ignoreCertificateErrors;
|
||||
}
|
||||
|
||||
public int getConnectionTimeout() {
|
||||
return connectionTimeout;
|
||||
}
|
||||
|
||||
public int getReadTimeout() {
|
||||
return readTimeout;
|
||||
}
|
||||
|
||||
protected GitLabConnection readResolve() {
|
||||
if (connectionTimeout == null || readTimeout == null) {
|
||||
return new GitLabConnection(name, url, apiTokenId, ignoreCertificateErrors, 10, 10);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Initializer(after = InitMilestone.PLUGINS_STARTED)
|
||||
public static void migrate() throws IOException {
|
||||
GitLabConnectionConfig descriptor = (GitLabConnectionConfig) Jenkins.getInstance().getDescriptor(GitLabConnectionConfig.class);
|
||||
|
|
|
@ -98,9 +98,29 @@ public class GitLabConnectionConfig extends GlobalConfiguration {
|
|||
}
|
||||
}
|
||||
|
||||
public FormValidation doTestConnection(@QueryParameter String url, @QueryParameter String apiTokenId, @QueryParameter boolean ignoreCertificateErrors) {
|
||||
public FormValidation doCheckConnectionTimeout(@QueryParameter Integer value) {
|
||||
if (value == null) {
|
||||
return FormValidation.error(Messages.connectionTimeout_required());
|
||||
} else {
|
||||
return FormValidation.ok();
|
||||
}
|
||||
}
|
||||
|
||||
public FormValidation doCheckReadTimeout(@QueryParameter Integer value) {
|
||||
if (value == null) {
|
||||
return FormValidation.error(Messages.readTimeout_required());
|
||||
} else {
|
||||
return FormValidation.ok();
|
||||
}
|
||||
}
|
||||
|
||||
public FormValidation doTestConnection(@QueryParameter String url,
|
||||
@QueryParameter String apiTokenId,
|
||||
@QueryParameter boolean ignoreCertificateErrors,
|
||||
@QueryParameter int connectionTimeout,
|
||||
@QueryParameter int readTimeout) {
|
||||
try {
|
||||
GitLabClientBuilder.buildClient(url, apiTokenId, ignoreCertificateErrors).headCurrentUser();
|
||||
GitLabClientBuilder.buildClient(url, apiTokenId, ignoreCertificateErrors, connectionTimeout, readTimeout).headCurrentUser();
|
||||
return FormValidation.ok(Messages.connection_success());
|
||||
} catch (WebApplicationException e) {
|
||||
return FormValidation.error(Messages.connection_error(e.getMessage()));
|
||||
|
|
|
@ -49,7 +49,7 @@ public class GitLabClientBuilder {
|
|||
private final static Logger LOGGER = Logger.getLogger(GitLabClientBuilder.class.getName());
|
||||
private static final String PRIVATE_TOKEN = "PRIVATE-TOKEN";
|
||||
|
||||
public static GitLabApi buildClient(String gitlabHostUrl, final String gitlabApiTokenId, boolean ignoreCertificateErrors) {
|
||||
public static GitLabApi buildClient(String gitlabHostUrl, final String gitlabApiTokenId, boolean ignoreCertificateErrors, int connectionTimeout, int readTimeout) {
|
||||
ResteasyClientBuilder builder = new ResteasyClientBuilder();
|
||||
if (ignoreCertificateErrors) {
|
||||
builder.hostnameVerification(ResteasyClientBuilder.HostnameVerificationPolicy.ANY);
|
||||
|
@ -58,8 +58,8 @@ public class GitLabClientBuilder {
|
|||
return builder
|
||||
.connectionPoolSize(60)
|
||||
.maxPooledPerRoute(30)
|
||||
.establishConnectionTimeout(10, TimeUnit.SECONDS)
|
||||
.socketTimeout(10, TimeUnit.SECONDS)
|
||||
.establishConnectionTimeout(connectionTimeout, TimeUnit.SECONDS)
|
||||
.socketTimeout(readTimeout, TimeUnit.SECONDS)
|
||||
.register(new JacksonJsonProvider())
|
||||
.register(new JacksonConfig())
|
||||
.register(new ApiHeaderTokenFilter(getApiToken(gitlabApiTokenId))).build().target(gitlabHostUrl)
|
||||
|
@ -70,7 +70,11 @@ public class GitLabClientBuilder {
|
|||
}
|
||||
|
||||
public static GitLabApi buildClient(GitLabConnection connection) {
|
||||
return buildClient(connection.getUrl(), connection.getApiTokenId(), connection.isIgnoreCertificateErrors());
|
||||
return buildClient(connection.getUrl(),
|
||||
connection.getApiTokenId(),
|
||||
connection.isIgnoreCertificateErrors(),
|
||||
connection.getConnectionTimeout(),
|
||||
connection.getReadTimeout());
|
||||
}
|
||||
|
||||
@Initializer(before = InitMilestone.PLUGINS_STARTED)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?jelly escape-by-default='true'?>
|
||||
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form" xmlns:c="/lib/credentials">
|
||||
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form" xmlns:c="/lib/credentials" xmlns:st="jelly:stapler">
|
||||
<f:section title="Gitlab">
|
||||
<f:entry title="${%GitLab connections}">
|
||||
<f:repeatable var="connection" items="${descriptor.connections}" name="connections">
|
||||
|
@ -14,9 +14,18 @@
|
|||
<f:entry title="${%API Token}" field="apiTokenId" description="${%API Token for accessing Gitlab}">
|
||||
<c:select/>
|
||||
</f:entry>
|
||||
<f:entry title="${%Ignore SSL Certificate Errors}" field="ignoreCertificateErrors">
|
||||
<f:checkbox checked="${connection.ignoreCertificateErrors}"/>
|
||||
</f:entry>
|
||||
<f:advanced>
|
||||
<f:entry title="${%Ignore SSL Certificate Errors}" field="ignoreCertificateErrors">
|
||||
<f:checkbox checked="${connection.ignoreCertificateErrors}"/>
|
||||
</f:entry>
|
||||
<f:entry title="${%Connection timeout} (${%in seconds})" field="connectionTimeout" description="${%The time to wait for establishing the connection}">
|
||||
<f:textbox value="${connection.connectionTimeout}" default="10"/>
|
||||
</f:entry>
|
||||
<f:entry title="${%Read timeout} (${%in seconds})" field="readTimeout" description="${%The time to wait while receiving the response}">
|
||||
<f:textbox value="${connection.readTimeout}" default="10"/>
|
||||
</f:entry>
|
||||
<st:include page="configure-advanced.jelly" optional="true" />
|
||||
</f:advanced>
|
||||
<f:validateButton title="${%Test Connection}" progress="${%Testing...}" method="testConnection"
|
||||
with="apiTokenId,url,ignoreCertificateErrors"/>
|
||||
<f:entry title="">
|
||||
|
|
|
@ -2,5 +2,7 @@ name.required=Gitlab connection name required.
|
|||
name.exists=GitLab connection name "{0}" already exists
|
||||
url.required=Gitlab host URL required.
|
||||
apiToken.required=API Token for Gitlab access required
|
||||
connectionTimeout.required=Connection timeout is required
|
||||
readTimeout.required=Read timeout is required
|
||||
connection.success=Success
|
||||
connection.error=Client error: {0}
|
||||
|
|
|
@ -86,7 +86,7 @@ public class GitLabConnectionConfigSSLTest {
|
|||
public void doCheckConnection_ignoreCertificateErrors() {
|
||||
GitLabConnectionConfig connectionConfig = jenkins.get(GitLabConnectionConfig.class);
|
||||
|
||||
FormValidation formValidation = connectionConfig.doTestConnection("https://localhost:" + port + "/gitlab", API_TOKEN_ID, true);
|
||||
FormValidation formValidation = connectionConfig.doTestConnection("https://localhost:" + port + "/gitlab", API_TOKEN_ID, true, 10, 10);
|
||||
assertThat(formValidation.getMessage(), is(Messages.connection_success()));
|
||||
}
|
||||
|
||||
|
@ -94,7 +94,7 @@ public class GitLabConnectionConfigSSLTest {
|
|||
public void doCheckConnection_certificateError() throws IOException {
|
||||
GitLabConnectionConfig connectionConfig = jenkins.get(GitLabConnectionConfig.class);
|
||||
|
||||
FormValidation formValidation = connectionConfig.doTestConnection("https://localhost:" + port + "/gitlab", API_TOKEN_ID, false);
|
||||
FormValidation formValidation = connectionConfig.doTestConnection("https://localhost:" + port + "/gitlab", API_TOKEN_ID, false, 10, 10);
|
||||
assertThat(formValidation.getMessage(), containsString(Messages.connection_error("")));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ public class GitLabConnectionConfigTest {
|
|||
mockServerClient.when(request).respond(response().withStatusCode(Response.Status.OK.getStatusCode()));
|
||||
|
||||
GitLabConnectionConfig connectionConfig = jenkins.get(GitLabConnectionConfig.class);
|
||||
FormValidation formValidation = connectionConfig.doTestConnection(gitLabUrl, API_TOKEN_ID, false);
|
||||
FormValidation formValidation = connectionConfig.doTestConnection(gitLabUrl, API_TOKEN_ID, false, 10, 10);
|
||||
|
||||
assertThat(formValidation.getMessage(), is(Messages.connection_success()));
|
||||
mockServerClient.verify(request);
|
||||
|
@ -71,7 +71,7 @@ public class GitLabConnectionConfigTest {
|
|||
mockServerClient.when(request).respond(response().withStatusCode(Response.Status.FORBIDDEN.getStatusCode()));
|
||||
|
||||
GitLabConnectionConfig connectionConfig = jenkins.get(GitLabConnectionConfig.class);
|
||||
FormValidation formValidation = connectionConfig.doTestConnection(gitLabUrl, API_TOKEN_ID, false);
|
||||
FormValidation formValidation = connectionConfig.doTestConnection(gitLabUrl, API_TOKEN_ID, false, 10, 10);
|
||||
|
||||
assertThat(formValidation.getMessage(), is(Messages.connection_error("HTTP 403 Forbidden")));
|
||||
mockServerClient.verify(request);
|
||||
|
|
|
@ -21,7 +21,6 @@ import hudson.plugins.git.util.Build;
|
|||
import hudson.plugins.git.util.BuildData;
|
||||
import hudson.util.Secret;
|
||||
import jenkins.model.Jenkins;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.hamcrest.CoreMatchers;
|
||||
|
@ -86,7 +85,7 @@ public class GitLabCommitStatusPublisherTest {
|
|||
new StringCredentialsImpl(CredentialsScope.SYSTEM, apiTokenId, "GitLab API Token", Secret.fromString(API_TOKEN)));
|
||||
}
|
||||
}
|
||||
connectionConfig.addConnection(new GitLabConnection(GIT_LAB_CONNECTION, "http://localhost:" + mockServer.getPort() + "/gitlab", apiTokenId, false));
|
||||
connectionConfig.addConnection(new GitLabConnection(GIT_LAB_CONNECTION, "http://localhost:" + mockServer.getPort() + "/gitlab", apiTokenId, false, 10, 10));
|
||||
}
|
||||
|
||||
@After
|
||||
|
|
Loading…
Reference in New Issue