Skip to content

Commit

Permalink
Merge pull request alauda#107 from alauda/master
Browse files Browse the repository at this point in the history
Release 0.2.39
  • Loading branch information
Zhao Xiaojie committed Jun 4, 2019
2 parents 149d8b9 + 01dbfa0 commit d83f8ae
Show file tree
Hide file tree
Showing 9 changed files with 95 additions and 109 deletions.
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
# ChangeLog

## 0.2.38 (not released yet)
## 0.2.39 (not released yet)

* [DEVOPS-1379] Fix the build trigger issues

## 0.2.38

* Add default clone option behaviours

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public boolean shouldSchedule(Queue.Task p, List<Action> actions) {
}

if(triggerFromJenkins(actions)) {
// in case of triggered by users
// in case of triggered by users or triggers
WorkflowJob workflowJob = (WorkflowJob) p;
String taskName = p.getName();

Expand Down Expand Up @@ -108,6 +108,8 @@ public boolean shouldSchedule(Queue.Task p, List<Action> actions) {
return false;
}

actions.add(new CauseAction(new JenkinsPipelineCause(pipeline, config.getMetadata().getUid())));

ParametersAction params = dumpParams(actions);
if (params != null) {
LOGGER.fine(() -> "ParametersAction: " + params.toString());
Expand Down Expand Up @@ -139,9 +141,6 @@ public boolean shouldSchedule(Queue.Task p, List<Action> actions) {
} else {
LOGGER.fine(() -> "Get null CauseAction in task : " + taskName);
}

// we already create k8s resource, and waiting next round
return false;
}

return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ private Constants(){}

public static final String ROOT_URL = "http://localhost:8080/";

public static final String ALAUDA_SYNC_PLUGIN = "sync.plugin.alauda.io";

public static final String ALAUDA_DEVOPS_DEFAULT_NAMESPACE = "default";

public static final String ALAUDA_DEVOPS_ANNOTATIONS_PIPELINE_NUMBER = "alauda.io/pipeline.number";
Expand Down Expand Up @@ -83,6 +85,8 @@ private Constants(){}
public static final String PIPELINE_RUN_POLICY_PARALLEL = "Parallel";
public static final String PIPELINE_RUN_POLICY_DEFAULT = PIPELINE_RUN_POLICY_SERIAL;

public static final String PIPELINE_CREATED_BY = "created_by";

public static final String FOLDER_DESCRIPTION = "Folder for the Alauda DevOps project: ";

public static final String JOB_STATUS_QUEUE = "QUEUED";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
package io.alauda.jenkins.devops.sync.listener;

import hudson.Extension;
import hudson.model.Cause;
import hudson.model.Queue;
import hudson.model.queue.QueueListener;
import io.alauda.jenkins.devops.sync.JenkinsPipelineCause;
import io.alauda.jenkins.devops.sync.util.AlaudaUtils;
import io.alauda.jenkins.devops.sync.util.PipelineUtils;

import java.util.List;
import java.util.logging.Logger;
Expand All @@ -38,19 +38,7 @@ public void onLeft(Queue.LeftItem leftItem) {
return;
}

JenkinsPipelineCause pipelineCause = null;
List<Cause> causes = leftItem.getCauses();
if (causes != null) {
for (Cause cause : causes) {
if (!(cause instanceof JenkinsPipelineCause)) {
continue;
}

pipelineCause = (JenkinsPipelineCause) cause;
}
}

String itemUrl = leftItem.getUrl();
JenkinsPipelineCause pipelineCause = PipelineUtils.findAlaudaCause(leftItem);
if (pipelineCause != null) {
String namespace = pipelineCause.getNamespace();
String name = pipelineCause.getName();
Expand All @@ -65,6 +53,7 @@ public void onLeft(Queue.LeftItem leftItem) {

logger.info("Item " + leftItem + " already sync with alauda'resource.");
} else {
String itemUrl = leftItem.getUrl();
logger.warning("Can not found JenkinsPipelineCause, item url: " + itemUrl);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ public boolean apply(@Nullable Run run) {
return false;
}

JenkinsPipelineCause cause = (JenkinsPipelineCause) run.getCause(JenkinsPipelineCause.class);
JenkinsPipelineCause cause = PipelineUtils.findAlaudaCause(run);
if(cause == null) {
return false;
}
Expand All @@ -189,6 +189,8 @@ public void onCompleted(Run run, @Nonnull TaskListener listener) {
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
logger.fine(() -> "this build is not WorkflowRun, " + run);
}
}

Expand All @@ -198,7 +200,7 @@ public synchronized void onDeleted(Run run) {
return;
}

JenkinsPipelineCause cause = (JenkinsPipelineCause) run.getCause(JenkinsPipelineCause.class);
JenkinsPipelineCause cause = PipelineUtils.findAlaudaCause(run);
if (cause != null) {
String namespace = cause.getNamespace();
String pipelineName = cause.getName();
Expand Down Expand Up @@ -322,18 +324,21 @@ private String toBlueJson(@NotNull PipelineJson pipeJson) {
return null;
}

private void upsertPipeline(Run run, RunExt wfRunExt, BlueRun blueRun) throws TimeoutException, InterruptedException {
if(run == null) {
return;
}

private void upsertPipeline(@NotNull Run run, RunExt wfRunExt, BlueRun blueRun) throws TimeoutException, InterruptedException {
final AlaudaDevOpsClient client = getAuthenticatedAlaudaClient();
if(client == null) {
return;
}
JenkinsPipelineCause cause = (JenkinsPipelineCause) run.getCause(JenkinsPipelineCause.class);
if (cause == null) {
return;

List<Cause> causes = run.getCauses();
if(causes != null) {
causes.forEach(causeItem -> {
logger.fine(() -> "run " + run + " caused by " + causeItem);
});
}
JenkinsPipelineCause cause = PipelineUtils.findAlaudaCause(run);
if(cause == null) {
logger.warning("run " + run + " do not have JenkinsPipelineCause");
}

String namespace = cause.getNamespace();
Expand Down Expand Up @@ -522,6 +527,7 @@ private void upsertPipeline(Run run, RunExt wfRunExt, BlueRun blueRun) throws Ti

boolean needToUpdate = this.shouldUpdatePipeline(cause, newNumStages, newNumFlowNodes, wfRunExt.getStatus());
if (!needToUpdate) {
logger.fine("run " + run + " do not need to update.");
return;
}

Expand Down Expand Up @@ -743,7 +749,7 @@ private int getRunNumber(Run run) {
* @return true if the should poll the status of this build run
*/
private boolean shouldPollRun(Run run) {
return run instanceof WorkflowRun && run.getCause(JenkinsPipelineCause.class) != null &&
return run instanceof WorkflowRun && //run.getCause(JenkinsPipelineCause.class) != null &&
AlaudaSyncGlobalConfiguration.get().isEnabled();
}

Expand Down
34 changes: 11 additions & 23 deletions src/main/java/io/alauda/jenkins/devops/sync/util/JenkinsUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -536,7 +536,7 @@ private static WorkflowRun getRun(WorkflowJob job, Pipeline pipeline) {

private static WorkflowRun getRun(WorkflowJob job, String pipelineUid) {
for (WorkflowRun run : job.getBuilds()) {
JenkinsPipelineCause cause = run.getCause(JenkinsPipelineCause.class);
JenkinsPipelineCause cause = PipelineUtils.findAlaudaCause(run);
if (cause != null && cause.getUid().equals(pipelineUid)) {
return run;
}
Expand Down Expand Up @@ -580,18 +580,6 @@ private static boolean cancelNotYetStartedPipeline(WorkflowJob job, Pipeline pip
return false;
}

private static void cancelNotYetStartedPipeliness(WorkflowJob job, String pcUid) {
cancelQueuedBuilds(job, pcUid);
for (WorkflowRun run : job.getBuilds()) {
if (run != null && run.hasntStartedYet()) {
JenkinsPipelineCause cause = run.getCause(JenkinsPipelineCause.class);
if (cause != null && cause.getPipelineConfigUid().equals(pcUid)) {
terminateRun(run);
}
}
}
}

private static void terminateRun(final WorkflowRun run) {
ACL.impersonate(ACL.SYSTEM, new NotReallyRoleSensitiveCallable<Void, RuntimeException>() {
@Override
Expand Down Expand Up @@ -639,16 +627,16 @@ public static void cancelQueuedBuilds(WorkflowJob job, String pcUid) {
LOGGER.info(() -> "cancelling queued pipeline by uuid: "+pcUid);
Queue pipelineQueue = Jenkins.getInstance().getQueue();
for (Queue.Item item : pipelineQueue.getItems()) {
for (Cause cause : item.getCauses()) {
if (cause instanceof JenkinsPipelineCause) {
JenkinsPipelineCause pipelineCause = (JenkinsPipelineCause) cause;
if (pipelineCause.getPipelineConfigUid().equals(pcUid)) {
Pipeline pipeline = new PipelineBuilder().withNewMetadata().withNamespace(pipelineCause.getNamespace())
.withName(pipelineCause.getName()).and().build();
cancelQueuedPipeline(job, pipeline);
}
}
}
JenkinsPipelineCause pipelineCause = PipelineUtils.findAlaudaCause(item);
if(pipelineCause == null) {
continue;
}

if (pipelineCause.getPipelineConfigUid().equals(pcUid)) {
Pipeline pipeline = new PipelineBuilder().withNewMetadata().withNamespace(pipelineCause.getNamespace())
.withName(pipelineCause.getName()).and().build();
cancelQueuedPipeline(job, pipeline);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import hudson.triggers.SCMTrigger;
import hudson.triggers.TimerTrigger;
import io.alauda.jenkins.devops.sync.constants.Annotations;
import io.alauda.jenkins.devops.sync.constants.Constants;
import io.alauda.kubernetes.api.model.*;
import jenkins.branch.Branch;
import jenkins.scm.api.SCMHead;
Expand Down Expand Up @@ -128,6 +129,10 @@ public static Pipeline buildPipeline(PipelineConfig config, Map<String, String>
pipelineSpec.setParameters(parameters);
}

// mark this pipeline created by Jenkins
Map<String, String> labels = new HashMap<>();
labels.put(Constants.PIPELINE_CREATED_BY, Constants.ALAUDA_SYNC_PLUGIN);

String namespace = config.getMetadata().getNamespace();

// update pipeline to k8s
Expand All @@ -136,6 +141,7 @@ public static Pipeline buildPipeline(PipelineConfig config, Map<String, String>
.inNamespace(namespace)
.createNew()
.withNewMetadata().addToAnnotations(annotations)
.addToLabels(labels)
.withName(config.getMetadata().getName())
.withNamespace(namespace)
.endMetadata()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package io.alauda.jenkins.devops.sync.util;

import hudson.model.Actionable;
import hudson.model.Cause;
import hudson.model.CauseAction;
import hudson.model.Result;
import hudson.model.Run;
import hudson.util.RunList;
Expand All @@ -13,11 +16,39 @@
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
import org.jenkinsci.plugins.workflow.job.WorkflowRun;

import java.util.List;
import java.util.Map;
import java.util.Optional;

import static io.alauda.jenkins.devops.sync.constants.Constants.ALAUDA_DEVOPS_LABELS_PIPELINE_CONFIG;

public class PipelineUtils {
/**
* All job build caused by Alauda which will hold JenkinsPipelineCause
* @param actionable actionable object
* @return JenkinsPipelineCause
*/
public static JenkinsPipelineCause findAlaudaCause(Actionable actionable) {
if(actionable == null) {
return null;
}
List<CauseAction> causeActions = actionable.getActions(CauseAction.class);
if(causeActions == null) {
return null;
}

JenkinsPipelineCause jenkinsPipelineCause = null;
for(CauseAction action : causeActions) {
Optional<Cause> causeOption = action.getCauses().stream().filter(cause -> cause instanceof JenkinsPipelineCause).findFirst();
if(causeOption != null && causeOption.isPresent()) {
jenkinsPipelineCause = (JenkinsPipelineCause) causeOption.get();
break;
}
}

return jenkinsPipelineCause;
}

public static boolean delete(String namespace, String name) {
AlaudaDevOpsClient client = AlaudaUtils.getAuthenticatedAlaudaClient();
if(client == null) {
Expand Down Expand Up @@ -51,8 +82,7 @@ public static void pipelinesCheck(PipelineConfig config) {
list.getItems().forEach(pipeline -> {
String uid = pipeline.getMetadata().getUid();
RunList<WorkflowRun> runList = job.getBuilds().filter(run -> {
JenkinsPipelineCause cause = run.getCause(JenkinsPipelineCause.class);

JenkinsPipelineCause cause = PipelineUtils.findAlaudaCause(run);

return cause != null && cause.getUid().equals(uid);// && phase.equals(pipeline.getStatus().getPhase());
});//.isEmpty();
Expand Down

0 comments on commit d83f8ae

Please sign in to comment.