Skip to content

Commit

Permalink
Added environment variables
Browse files Browse the repository at this point in the history
Exposed the following keys from the JSON to environment variables:
- GOGS_REF
- GOGS_AFTER
  • Loading branch information
sanderv32 committed Feb 10, 2017
1 parent aab25fe commit 316e622
Show file tree
Hide file tree
Showing 7 changed files with 323 additions and 175 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,6 @@ release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties

# IntelliJ
.idea/
36 changes: 36 additions & 0 deletions src/main/java/org/jenkinsci/plugins/gogs/GogsPayload.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.jenkinsci.plugins.gogs;

import hudson.EnvVars;
import hudson.model.AbstractBuild;
import hudson.model.EnvironmentContributingAction;
import hudson.model.InvisibleAction;

import javax.annotation.Nonnull;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

public class GogsPayload extends InvisibleAction implements EnvironmentContributingAction {
private Map<String,String> payload = new HashMap<String, String>();

public GogsPayload(Map<String, String> payload) {
this.payload = payload;
}

@Nonnull
public Map<String, String> getPayload() {
return payload;
}

@Override
public void buildEnvVars(AbstractBuild<?, ?> abstractBuild, EnvVars envVars) {
final Map<String, String> payload = getPayload();
LOGGER.log(Level.FINEST, "Injecting GOGS_PAYLOAD: {0}", payload);
for(String key: payload.keySet()) {
envVars.put("GOGS_"+key.toUpperCase(), this.payload.get(key));
}
}

private static final Logger LOGGER = Logger.getLogger(GogsPayload.class.getName());
}
110 changes: 73 additions & 37 deletions src/main/java/org/jenkinsci/plugins/gogs/GogsPayloadProcessor.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,54 +23,90 @@ associated documentation files (the "Software"), to deal in the Software without

package org.jenkinsci.plugins.gogs;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import hudson.model.BuildableItem;
import hudson.model.Cause;
import hudson.scm.SCM;
import hudson.security.ACL;
import hudson.triggers.Trigger;
import jenkins.model.Jenkins;

import jenkins.model.ParameterizedJobMixIn;
import jenkins.triggers.SCMTriggerItem;
import org.acegisecurity.context.SecurityContext;
import org.acegisecurity.context.SecurityContextHolder;

public class GogsPayloadProcessor {
private static final Logger LOGGER = Logger.getLogger(GogsPayloadProcessor.class.getName());

public GogsPayloadProcessor() {
}

public GogsResults triggerJobs(String jobName, String deliveryID) {
SecurityContext saveCtx = null;
Boolean didJob = false;
GogsResults result = new GogsResults();

try {
saveCtx = SecurityContextHolder.getContext();

Jenkins instance = Jenkins.getInstance();
if (instance!=null) {
ACL acl = instance.getACL();
acl.impersonate(ACL.SYSTEM);
for (BuildableItem project : instance.getAllItems(BuildableItem.class)) {
if ( project.getName().equals(jobName) ) {

Cause cause = new GogsCause(deliveryID);
project.scheduleBuild(0, cause);
didJob = true;
result.setMessage(String.format("Job '%s' is executed",jobName));
}
}
if (!didJob) {
String msg = String.format("Job '%s' is not defined in Jenkins",jobName);
result.setStatus(404, msg);
LOGGER.warning(msg);
}
}
} catch (Exception e) {
} finally {
SecurityContextHolder.setContext(saveCtx);
private static final Logger LOGGER = Logger.getLogger(GogsPayloadProcessor.class.getName());
private Map<String, String> payload = new HashMap<String, String>();

public GogsPayloadProcessor() {
}

public Map<String, String> getPayload() {
return this.payload;
}

return result;
}
public void setPayload(String k, String v) {
this.payload.put(k, v);
}

public GogsResults triggerJobs(String jobName, String deliveryID) {
SecurityContext saveCtx = null;
Boolean didJob = false;
GogsResults result = new GogsResults();

try {
saveCtx = SecurityContextHolder.getContext();

Jenkins instance = Jenkins.getInstance();
if (instance != null) {
ACL acl = instance.getACL();
acl.impersonate(ACL.SYSTEM);
for (BuildableItem project : instance.getAllItems(BuildableItem.class)) {
if (project.getName().equals(jobName)) {

GogsTrigger gTrigger = null;
Cause cause = new GogsCause(deliveryID);

if (project instanceof ParameterizedJobMixIn.ParameterizedJob) {
ParameterizedJobMixIn.ParameterizedJob pJob = (ParameterizedJobMixIn.ParameterizedJob) project;
for (Trigger trigger : pJob.getTriggers().values()) {
if (trigger instanceof GogsTrigger) {
gTrigger = (GogsTrigger) trigger;
break;
}
}
}
if (gTrigger != null) {
SCMTriggerItem item = SCMTriggerItem.SCMTriggerItems.asSCMTriggerItem(project);
GogsPayload gogsPayload = new GogsPayload(this.payload);

item.scheduleBuild2(0, gogsPayload);
} else
project.scheduleBuild(0, cause);

didJob = true;
result.setMessage(String.format("Job '%s' is executed", jobName));
}
}
if (!didJob) {
String msg = String.format("Job '%s' is not defined in Jenkins", jobName);
result.setStatus(404, msg);
LOGGER.warning(msg);
}
}
} catch (Exception e) {
} finally {
SecurityContextHolder.setContext(saveCtx);
}

return result;
}
}
92 changes: 51 additions & 41 deletions src/main/java/org/jenkinsci/plugins/gogs/GogsProjectProperty.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ associated documentation files (the "Software"), to deal in the Software without

package org.jenkinsci.plugins.gogs;

import org.jenkinsci.plugins.gogs.GogsWebHook;
import hudson.Extension;
import hudson.model.Job;
import hudson.model.JobProperty;
Expand All @@ -37,45 +36,56 @@ associated documentation files (the "Software"), to deal in the Software without
import java.util.logging.Logger;

public class GogsProjectProperty extends JobProperty<Job<?, ?>> {
private final String gogsSecret;

@DataBoundConstructor
public GogsProjectProperty(String gogsSecret) {
this.gogsSecret = gogsSecret;
}

public String getGogsSecret() {
return this.gogsSecret;
}

private static final Logger LOGGER = Logger.getLogger(GogsWebHook.class.getName());

@Extension
public static final class DescriptorImpl extends JobPropertyDescriptor {
public static final String GOGS_PROJECT_BLOCK_NAME = "gogsProject";
private String gogsSecret;

public String getGogsSecret() {
return gogsSecret;
}

public JobProperty<?> newInstance(StaplerRequest req, JSONObject formData) throws FormException {
GogsProjectProperty tpp = req.bindJSON(
GogsProjectProperty.class,
formData.getJSONObject(GOGS_PROJECT_BLOCK_NAME)
);
if ( tpp != null ) {
LOGGER.info(formData.toString());
LOGGER.info(tpp.gogsSecret);

gogsSecret = tpp.gogsSecret;
private final String gogsSecret;
private final boolean gogsUsePayload;

@DataBoundConstructor
public GogsProjectProperty(String gogsSecret, boolean gogsUsePayload) {
this.gogsSecret = gogsSecret;
this.gogsUsePayload = gogsUsePayload;
}

public String getGogsSecret() {
return this.gogsSecret;
}

public boolean getGogsUsePayload() {
return this.gogsUsePayload;
}

private static final Logger LOGGER = Logger.getLogger(GogsWebHook.class.getName());

@Extension
public static final class DescriptorImpl extends JobPropertyDescriptor {
public static final String GOGS_PROJECT_BLOCK_NAME = "gogsProject";
private String gogsSecret;
private boolean gogsUsePayload;

public String getGogsSecret() {
return gogsSecret;
}

public boolean getGogsUsePayload() {
return gogsUsePayload;
}

public JobProperty<?> newInstance(StaplerRequest req, JSONObject formData) throws FormException {
GogsProjectProperty tpp = req.bindJSON(
GogsProjectProperty.class,
formData.getJSONObject(GOGS_PROJECT_BLOCK_NAME)
);
if (tpp != null) {
LOGGER.info(formData.toString());
LOGGER.info(tpp.gogsSecret);

gogsSecret = tpp.gogsSecret;
}
return tpp;
}

@Override
public String getDisplayName() {
return "Gogs Secret";
}
return tpp;
}

@Override
public String getDisplayName() {
return "Gogs Secret";
}
}
}
}
62 changes: 62 additions & 0 deletions src/main/java/org/jenkinsci/plugins/gogs/GogsTrigger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package org.jenkinsci.plugins.gogs;


import hudson.Extension;
import hudson.model.Hudson;
import hudson.model.Item;
import hudson.model.Job;
import hudson.triggers.Trigger;
import hudson.triggers.TriggerDescriptor;
import hudson.util.SequentialExecutionQueue;
import jenkins.model.ParameterizedJobMixIn;
import jenkins.triggers.SCMTriggerItem;
import org.kohsuke.stapler.DataBoundConstructor;

import java.util.logging.Logger;


public class GogsTrigger extends Trigger<Job<?,?>> {

@DataBoundConstructor
public GogsTrigger() {
}

@Deprecated
public void onPost(String triggeredByUser) {
onPost(triggeredByUser, "");
}

public void onPost(String triggeredByUser, final String payload) {
final String pushBy = triggeredByUser;
getDescriptor().queue.execute(new Runnable() {

@Override
public void run() {

}
});
}

@Override
public DescriptorImpl getDescriptor() {
return (DescriptorImpl)super.getDescriptor();
}

@Extension
public static class DescriptorImpl extends TriggerDescriptor {
private transient final SequentialExecutionQueue queue = new SequentialExecutionQueue(Hudson.MasterComputer.threadPoolForRemoting);

@Override
public boolean isApplicable(Item item) {
return item instanceof Job && SCMTriggerItem.SCMTriggerItems.asSCMTriggerItem(item) != null
&& item instanceof ParameterizedJobMixIn.ParameterizedJob;
}

@Override
public String getDisplayName() {
return "Build when a change is pushed to Gogs";
}
}

private static final Logger LOGGER = Logger.getLogger(GogsTrigger.class.getName());
}
Loading

0 comments on commit 316e622

Please sign in to comment.