diff --git a/README_zh_CN.md b/README_zh_CN.md index 8447110..377d127 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -29,7 +29,7 @@ Gitee Jenkins Plugin 是码云基于 [GitLab Plugin](https://github.com/jenkinsc ## 目前支持特性: - 推送代码到码云时,由配置的 WebHook 触发 Jenkins 任务构建。 - 提交 Pull Request 到码云项目时,由配置的 WebHook 触发 Jenkins 任务构建,支持PR动作:新建,更新,接受,关闭,审查通过,测试通过。 -- 支持 [ci-skip] 指令过滤。 +- 支持 [ci-skip] 指令过滤 或者 [ci-build] 指令触发构建。 - 过滤已经构建的 Commit 版本,若是分支 Push,则相同分支Push才过滤,若是 PR,则是同一个PR才过滤。 - 按分支名过滤触发器。 - 正则表达式过滤可触发的分支。 diff --git a/src/main/java/com/gitee/jenkins/gitee/hook/model/PushHook.java b/src/main/java/com/gitee/jenkins/gitee/hook/model/PushHook.java index c9ea033..ed3189d 100644 --- a/src/main/java/com/gitee/jenkins/gitee/hook/model/PushHook.java +++ b/src/main/java/com/gitee/jenkins/gitee/hook/model/PushHook.java @@ -111,10 +111,6 @@ public class PushHook extends WebHook { this.project = project; } - public void setRepository(Project project) { - this.project = project; - } - public List getCommits() { return commits; } diff --git a/src/main/java/com/gitee/jenkins/trigger/GiteePushTrigger.java b/src/main/java/com/gitee/jenkins/trigger/GiteePushTrigger.java index 9c5b4e4..e6fcc1a 100644 --- a/src/main/java/com/gitee/jenkins/trigger/GiteePushTrigger.java +++ b/src/main/java/com/gitee/jenkins/trigger/GiteePushTrigger.java @@ -74,7 +74,8 @@ public class GiteePushTrigger extends Trigger> { private boolean triggerOnTestedPullRequest = false; private boolean triggerOnNoteRequest = true; private String noteRegex = ""; - private boolean ciSkip = true; + private transient boolean ciSkip = true; + private BuildInstructionFilterType buildInstructionFilterType; private boolean skipWorkInProgressPullRequest; private boolean ciSkipFroTestNotRequired; private boolean skipLastCommitHasBeenBuild; @@ -114,6 +115,7 @@ public class GiteePushTrigger extends Trigger> { boolean triggerOnClosedPullRequest, boolean triggerOnNoteRequest, String noteRegex, boolean skipWorkInProgressPullRequest, boolean ciSkip, + BuildInstructionFilterType buildInstructionFilterType, boolean setBuildDescription, boolean addNoteOnPullRequest, boolean addCiMessage, boolean addVoteOnPullRequest, boolean acceptPullRequestOnSuccess, BranchFilterType branchFilterType, String includeBranchesSpec, String excludeBranchesSpec, String targetBranchRegex, @@ -129,6 +131,7 @@ public class GiteePushTrigger extends Trigger> { this.noteRegex = noteRegex; this.triggerOnPipelineEvent = triggerOnPipelineEvent; this.ciSkip = ciSkip; + this.buildInstructionFilterType = buildInstructionFilterType; this.skipWorkInProgressPullRequest = skipWorkInProgressPullRequest; this.setBuildDescription = setBuildDescription; this.addNoteOnPullRequest = addNoteOnPullRequest; @@ -196,6 +199,24 @@ public class GiteePushTrigger extends Trigger> { oldConfig.jobsMigrated2 = true; oldConfig.save(); } + + // 兼容构建指令升级 + if (!oldConfig.jobsMigrated3) { + for (AbstractProject project : Jenkins.getInstance().getAllItems(AbstractProject.class)) { + GiteePushTrigger trigger = project.getTrigger(GiteePushTrigger.class); + if (trigger != null) { + if (trigger.getCiSkip()) { + trigger.setBuildInstructionFilterType(BuildInstructionFilterType.CI_SKIP); + } else { + trigger.setBuildInstructionFilterType(BuildInstructionFilterType.NONE); + } + project.save(); + } + } + oldConfig.jobsMigrated3 = true; + oldConfig.save(); + } + } public boolean getAddNoteOnPullRequest() { return addNoteOnPullRequest; } @@ -222,8 +243,8 @@ public class GiteePushTrigger extends Trigger> { public boolean isTriggerOnApprovedPullRequest() { return triggerOnApprovedPullRequest; - } - + } + public boolean isTriggerOnClosedPullRequest() { return triggerOnClosedPullRequest; } @@ -246,6 +267,10 @@ public class GiteePushTrigger extends Trigger> { return ciSkip; } + public BuildInstructionFilterType getBuildInstructionFilterType() { + return buildInstructionFilterType; + } + public boolean getCiSkipFroTestNotRequired() { return ciSkipFroTestNotRequired; } @@ -306,7 +331,7 @@ public class GiteePushTrigger extends Trigger> { public void setTriggerOnPush(boolean triggerOnPush) { this.triggerOnPush = triggerOnPush; } - + @DataBoundSetter public void setTriggerOnApprovedPullRequest(boolean triggerOnApprovedPullRequest) { this.triggerOnApprovedPullRequest = triggerOnApprovedPullRequest; @@ -347,6 +372,11 @@ public class GiteePushTrigger extends Trigger> { this.ciSkip = ciSkip; } + @DataBoundSetter + public void setBuildInstructionFilterType(BuildInstructionFilterType buildInstructionFilterType) { + this.buildInstructionFilterType = buildInstructionFilterType; + } + @DataBoundSetter public void setCiSkipFroTestNotRequired(boolean ciSkipFroTestNotRequired) { this.ciSkipFroTestNotRequired = ciSkipFroTestNotRequired; @@ -460,7 +490,7 @@ public class GiteePushTrigger extends Trigger> { if (pushHookTriggerHandler == null) { initializeTriggerHandler(); } - pushHookTriggerHandler.handle(job, hook, ciSkip, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); + pushHookTriggerHandler.handle(job, hook, buildInstructionFilterType, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); } // executes when the Trigger receives a pull request @@ -474,7 +504,7 @@ public class GiteePushTrigger extends Trigger> { if (pullRequestHookTriggerHandler == null) { initializeTriggerHandler(); } - pullRequestHookTriggerHandler.handle(job, hook, ciSkip, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); + pullRequestHookTriggerHandler.handle(job, hook, buildInstructionFilterType, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); } // executes when the Trigger receives a note request @@ -488,7 +518,7 @@ public class GiteePushTrigger extends Trigger> { if (noteHookTriggerHandler == null) { initializeTriggerHandler(); } - noteHookTriggerHandler.handle(job, hook, ciSkip, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); + noteHookTriggerHandler.handle(job, hook, buildInstructionFilterType, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); } // executes when the Trigger receives a pipeline event @@ -496,7 +526,7 @@ public class GiteePushTrigger extends Trigger> { if (pipelineTriggerHandler == null) { initializeTriggerHandler(); } - pipelineTriggerHandler.handle(job, hook, ciSkip, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); + pipelineTriggerHandler.handle(job, hook, buildInstructionFilterType, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); } private void initializeTriggerHandler() { @@ -554,6 +584,7 @@ public class GiteePushTrigger extends Trigger> { private transient final SequentialExecutionQueue queue = new SequentialExecutionQueue(Jenkins.MasterComputer.threadPoolForRemoting); private boolean jobsMigrated = false; private boolean jobsMigrated2 = false; + private boolean jobsMigrated3 = false; private String GiteeApiToken; private String giteeHostUrl = ""; private boolean ignoreCertificateErrors = false; diff --git a/src/main/java/com/gitee/jenkins/trigger/filter/BuildInstructionFilter.java b/src/main/java/com/gitee/jenkins/trigger/filter/BuildInstructionFilter.java new file mode 100644 index 0000000..69c7e2e --- /dev/null +++ b/src/main/java/com/gitee/jenkins/trigger/filter/BuildInstructionFilter.java @@ -0,0 +1,16 @@ +package com.gitee.jenkins.trigger.filter; + +/** + * @author zhanggx + */ +public interface BuildInstructionFilter { + + /** + * 是否触发构建 + * + * @param body + * @return + */ + boolean isBuildAllow(String body); + +} diff --git a/src/main/java/com/gitee/jenkins/trigger/filter/BuildInstructionFilterType.java b/src/main/java/com/gitee/jenkins/trigger/filter/BuildInstructionFilterType.java new file mode 100644 index 0000000..e13ed51 --- /dev/null +++ b/src/main/java/com/gitee/jenkins/trigger/filter/BuildInstructionFilterType.java @@ -0,0 +1,46 @@ +package com.gitee.jenkins.trigger.filter; + +/** + * @author zhanggx + */ +public enum BuildInstructionFilterType implements BuildInstructionFilter { + + /** + * 无操作 + */ + NONE("") { + @Override + public boolean isBuildAllow(String body) { + return true; + } + }, + /** + * 包含 [ci-skip] 时跳过构建 + */ + CI_SKIP("[ci-skip]") { + @Override + public boolean isBuildAllow(String body) { + return body == null ? true : !body.contains(getBody()); + } + }, + /** + * 包含 [ci-build] 时触发构建 + */ + CI_BUILD("[ci-build]") { + @Override + public boolean isBuildAllow(String body) { + return body == null ? false : body.contains(getBody()); + } + }; + + private String body; + + BuildInstructionFilterType(String body) { + this.body = body; + } + + public String getBody() { + return body; + } + +} diff --git a/src/main/java/com/gitee/jenkins/trigger/handler/AbstractWebHookTriggerHandler.java b/src/main/java/com/gitee/jenkins/trigger/handler/AbstractWebHookTriggerHandler.java index e428f62..6b637b4 100644 --- a/src/main/java/com/gitee/jenkins/trigger/handler/AbstractWebHookTriggerHandler.java +++ b/src/main/java/com/gitee/jenkins/trigger/handler/AbstractWebHookTriggerHandler.java @@ -5,6 +5,7 @@ import com.gitee.jenkins.cause.GiteeWebHookCause; import com.gitee.jenkins.gitee.hook.model.WebHook; import com.gitee.jenkins.trigger.exception.NoRevisionToBuildException; import com.gitee.jenkins.trigger.filter.BranchFilter; +import com.gitee.jenkins.trigger.filter.BuildInstructionFilter; import com.gitee.jenkins.trigger.filter.PullRequestLabelFilter; import com.gitee.jenkins.util.LoggerUtil; import hudson.model.Action; @@ -34,8 +35,8 @@ public abstract class AbstractWebHookTriggerHandler implement protected PendingBuildsHandler pendingBuildsHandler = new PendingBuildsHandler(); @Override - public void handle(Job job, H hook, boolean ciSkip, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { - if (ciSkip && isCiSkip(hook)) { + public void handle(Job job, H hook, BuildInstructionFilter buildInstructionFilter, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { + if (isCiSkip(hook, buildInstructionFilter)) { LOGGER.log(Level.INFO, "Skipping due to ci-skip."); return; } @@ -58,7 +59,7 @@ public abstract class AbstractWebHookTriggerHandler implement protected abstract String getTriggerType(); - protected abstract boolean isCiSkip(H hook); + protected abstract boolean isCiSkip(H hook, BuildInstructionFilter buildInstructionFilter); protected abstract boolean isCommitSkip(Job job, H hook); protected Action[] createActions(Job job, H hook) { diff --git a/src/main/java/com/gitee/jenkins/trigger/handler/WebHookTriggerHandler.java b/src/main/java/com/gitee/jenkins/trigger/handler/WebHookTriggerHandler.java index 97a7aed..c2f1944 100644 --- a/src/main/java/com/gitee/jenkins/trigger/handler/WebHookTriggerHandler.java +++ b/src/main/java/com/gitee/jenkins/trigger/handler/WebHookTriggerHandler.java @@ -2,6 +2,7 @@ package com.gitee.jenkins.trigger.handler; import com.gitee.jenkins.gitee.hook.model.WebHook; import com.gitee.jenkins.trigger.filter.BranchFilter; +import com.gitee.jenkins.trigger.filter.BuildInstructionFilter; import com.gitee.jenkins.trigger.filter.PullRequestLabelFilter; import hudson.model.Job; @@ -10,5 +11,6 @@ import hudson.model.Job; */ public interface WebHookTriggerHandler { - void handle(Job job, H hook, boolean ciSkip, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter); + void handle(Job job, H hook, BuildInstructionFilter buildInstructionFilter, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter); + } diff --git a/src/main/java/com/gitee/jenkins/trigger/handler/note/NopNoteHookTriggerHandler.java b/src/main/java/com/gitee/jenkins/trigger/handler/note/NopNoteHookTriggerHandler.java index ff5aad3..1c6ca01 100644 --- a/src/main/java/com/gitee/jenkins/trigger/handler/note/NopNoteHookTriggerHandler.java +++ b/src/main/java/com/gitee/jenkins/trigger/handler/note/NopNoteHookTriggerHandler.java @@ -2,6 +2,7 @@ package com.gitee.jenkins.trigger.handler.note; import com.gitee.jenkins.gitee.hook.model.NoteHook; import com.gitee.jenkins.trigger.filter.BranchFilter; +import com.gitee.jenkins.trigger.filter.BuildInstructionFilter; import com.gitee.jenkins.trigger.filter.PullRequestLabelFilter; import hudson.model.Job; @@ -10,7 +11,7 @@ import hudson.model.Job; */ class NopNoteHookTriggerHandler implements NoteHookTriggerHandler { @Override - public void handle(Job job, NoteHook hook, boolean ciSkip, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { + public void handle(Job job, NoteHook hook, BuildInstructionFilter buildInstructionFilter, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { // nothing to do } } diff --git a/src/main/java/com/gitee/jenkins/trigger/handler/note/NoteHookTriggerHandlerImpl.java b/src/main/java/com/gitee/jenkins/trigger/handler/note/NoteHookTriggerHandlerImpl.java index 56a72fb..8b1d527 100644 --- a/src/main/java/com/gitee/jenkins/trigger/handler/note/NoteHookTriggerHandlerImpl.java +++ b/src/main/java/com/gitee/jenkins/trigger/handler/note/NoteHookTriggerHandlerImpl.java @@ -7,6 +7,7 @@ import com.gitee.jenkins.gitee.hook.model.*; import com.gitee.jenkins.publisher.GiteeMessagePublisher; import com.gitee.jenkins.trigger.exception.NoRevisionToBuildException; import com.gitee.jenkins.trigger.filter.BranchFilter; +import com.gitee.jenkins.trigger.filter.BuildInstructionFilter; import com.gitee.jenkins.trigger.filter.PullRequestLabelFilter; import com.gitee.jenkins.trigger.handler.AbstractWebHookTriggerHandler; import hudson.model.AbstractBuild; @@ -48,7 +49,7 @@ class NoteHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler } @Override - public void handle(Job job, NoteHook hook, boolean ciSkip, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { + public void handle(Job job, NoteHook hook, BuildInstructionFilter buildInstructionFilter, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { if (isValidTrigger(hook)) { // 若pr不可自动合并则评论至pr PullRequestObjectAttributes objectAttributes = hook.getPullRequest(); @@ -71,15 +72,13 @@ class NoteHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler } - super.handle(job, hook, ciSkip, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); + super.handle(job, hook, buildInstructionFilter, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); } } @Override - protected boolean isCiSkip(NoteHook hook) { - return hook.getPullRequest() != null - && hook.getPullRequest().getBody() != null - && hook.getPullRequest().getBody().contains("[ci-skip]"); + protected boolean isCiSkip(NoteHook hook, BuildInstructionFilter buildInstructionFilter) { + return hook.getPullRequest() == null ? false : !buildInstructionFilter.isBuildAllow(hook.getPullRequest().getBody()); } @Override diff --git a/src/main/java/com/gitee/jenkins/trigger/handler/pipeline/NopPipelineHookTriggerHandler.java b/src/main/java/com/gitee/jenkins/trigger/handler/pipeline/NopPipelineHookTriggerHandler.java index 4ba290c..77eb3ba 100644 --- a/src/main/java/com/gitee/jenkins/trigger/handler/pipeline/NopPipelineHookTriggerHandler.java +++ b/src/main/java/com/gitee/jenkins/trigger/handler/pipeline/NopPipelineHookTriggerHandler.java @@ -2,6 +2,7 @@ package com.gitee.jenkins.trigger.handler.pipeline; import com.gitee.jenkins.gitee.hook.model.PipelineHook; import com.gitee.jenkins.trigger.filter.BranchFilter; +import com.gitee.jenkins.trigger.filter.BuildInstructionFilter; import com.gitee.jenkins.trigger.filter.PullRequestLabelFilter; import hudson.model.Job; @@ -11,7 +12,7 @@ import hudson.model.Job; class NopPipelineHookTriggerHandler implements PipelineHookTriggerHandler { @Override - public void handle(Job job, PipelineHook hook, boolean ciSkip, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { + public void handle(Job job, PipelineHook hook, BuildInstructionFilter buildInstructionFilter, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { } } diff --git a/src/main/java/com/gitee/jenkins/trigger/handler/pipeline/PipelineHookTriggerHandlerImpl.java b/src/main/java/com/gitee/jenkins/trigger/handler/pipeline/PipelineHookTriggerHandlerImpl.java index 69bb084..0563ba6 100644 --- a/src/main/java/com/gitee/jenkins/trigger/handler/pipeline/PipelineHookTriggerHandlerImpl.java +++ b/src/main/java/com/gitee/jenkins/trigger/handler/pipeline/PipelineHookTriggerHandlerImpl.java @@ -8,6 +8,7 @@ import com.gitee.jenkins.gitee.hook.model.PipelineEventObjectAttributes; import com.gitee.jenkins.gitee.hook.model.PipelineHook; import com.gitee.jenkins.trigger.exception.NoRevisionToBuildException; import com.gitee.jenkins.trigger.filter.BranchFilter; +import com.gitee.jenkins.trigger.filter.BuildInstructionFilter; import com.gitee.jenkins.trigger.filter.PullRequestLabelFilter; import com.gitee.jenkins.trigger.handler.AbstractWebHookTriggerHandler; import com.gitee.jenkins.util.BuildUtil; @@ -44,7 +45,7 @@ class PipelineHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler job, PipelineHook hook, boolean ciSkip, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { + public void handle(Job job, PipelineHook hook, BuildInstructionFilter buildInstructionFilter, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { PipelineEventObjectAttributes objectAttributes = hook.getObjectAttributes(); try { if (job instanceof AbstractProject) { @@ -58,7 +59,7 @@ class PipelineHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler job, PullRequestHook hook, boolean ciSkip, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { + public void handle(Job job, PullRequestHook hook, BuildInstructionFilter buildInstructionFilter, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { // nothing to do } } diff --git a/src/main/java/com/gitee/jenkins/trigger/handler/pull/PullRequestHookTriggerHandlerImpl.java b/src/main/java/com/gitee/jenkins/trigger/handler/pull/PullRequestHookTriggerHandlerImpl.java index b7c41e8..d3f771c 100644 --- a/src/main/java/com/gitee/jenkins/trigger/handler/pull/PullRequestHookTriggerHandlerImpl.java +++ b/src/main/java/com/gitee/jenkins/trigger/handler/pull/PullRequestHookTriggerHandlerImpl.java @@ -9,6 +9,7 @@ import com.gitee.jenkins.gitee.hook.model.PullRequestHook; import com.gitee.jenkins.publisher.GiteeMessagePublisher; import com.gitee.jenkins.trigger.exception.NoRevisionToBuildException; import com.gitee.jenkins.trigger.filter.BranchFilter; +import com.gitee.jenkins.trigger.filter.BuildInstructionFilter; import com.gitee.jenkins.trigger.filter.PullRequestLabelFilter; import com.gitee.jenkins.trigger.handler.AbstractWebHookTriggerHandler; import com.gitee.jenkins.util.BuildUtil; @@ -66,7 +67,7 @@ class PullRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler job, PullRequestHook hook, boolean ciSkip, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { + public void handle(Job job, PullRequestHook hook, BuildInstructionFilter buildInstructionFilter, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { PullRequestObjectAttributes objectAttributes = hook.getPullRequest(); try { @@ -101,7 +102,7 @@ class PullRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler job, PushHook hook, boolean ciSkip, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { + public void handle(Job job, PushHook hook, BuildInstructionFilter buildInstructionFilter, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { // nothing to do } } diff --git a/src/main/java/com/gitee/jenkins/trigger/handler/push/PushHookTriggerHandlerImpl.java b/src/main/java/com/gitee/jenkins/trigger/handler/push/PushHookTriggerHandlerImpl.java index 52cf6ae..8c14073 100644 --- a/src/main/java/com/gitee/jenkins/trigger/handler/push/PushHookTriggerHandlerImpl.java +++ b/src/main/java/com/gitee/jenkins/trigger/handler/push/PushHookTriggerHandlerImpl.java @@ -6,6 +6,7 @@ import com.gitee.jenkins.gitee.hook.model.Commit; import com.gitee.jenkins.gitee.hook.model.PushHook; import com.gitee.jenkins.trigger.exception.NoRevisionToBuildException; import com.gitee.jenkins.trigger.filter.BranchFilter; +import com.gitee.jenkins.trigger.filter.BuildInstructionFilter; import com.gitee.jenkins.trigger.filter.PullRequestLabelFilter; import com.gitee.jenkins.trigger.handler.AbstractWebHookTriggerHandler; import hudson.model.Job; @@ -31,19 +32,19 @@ class PushHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler private static final String NO_COMMIT = "0000000000000000000000000000000000000000"; @Override - public void handle(Job job, PushHook hook, boolean ciSkip, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { + public void handle(Job job, PushHook hook, BuildInstructionFilter buildInstructionFilter, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { if (isNoRemoveBranchPush(hook)) { - super.handle(job, hook, ciSkip, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); + super.handle(job, hook, buildInstructionFilter, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); } } @Override - protected boolean isCiSkip(PushHook hook) { + protected boolean isCiSkip(PushHook hook, BuildInstructionFilter buildInstructionFilter) { List commits = hook.getCommits(); - return commits != null && - !commits.isEmpty() && - commits.get(commits.size() - 1).getMessage() != null && - commits.get(commits.size() - 1).getMessage().contains("[ci-skip]"); + if (commits != null && !commits.isEmpty()) { + return !buildInstructionFilter.isBuildAllow(commits.get(commits.size() - 1).getMessage()); + } + return false; } @Override diff --git a/src/main/java/com/gitee/jenkins/trigger/handler/push/PushHookTriggerHandlerList.java b/src/main/java/com/gitee/jenkins/trigger/handler/push/PushHookTriggerHandlerList.java index f9e13aa..2ecf9d2 100644 --- a/src/main/java/com/gitee/jenkins/trigger/handler/push/PushHookTriggerHandlerList.java +++ b/src/main/java/com/gitee/jenkins/trigger/handler/push/PushHookTriggerHandlerList.java @@ -2,6 +2,7 @@ package com.gitee.jenkins.trigger.handler.push; import com.gitee.jenkins.gitee.hook.model.PushHook; import com.gitee.jenkins.trigger.filter.BranchFilter; +import com.gitee.jenkins.trigger.filter.BuildInstructionFilter; import com.gitee.jenkins.trigger.filter.PullRequestLabelFilter; import hudson.model.Job; @@ -19,9 +20,9 @@ class PushHookTriggerHandlerList implements PushHookTriggerHandler { } @Override - public void handle(Job job, PushHook hook, boolean ciSkip, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { + public void handle(Job job, PushHook hook, BuildInstructionFilter buildInstructionFilter, boolean skipLastCommitHasBeenBuild, BranchFilter branchFilter, PullRequestLabelFilter pullRequestLabelFilter) { for (PushHookTriggerHandler handler : handlers) { - handler.handle(job, hook, ciSkip, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); + handler.handle(job, hook, buildInstructionFilter, skipLastCommitHasBeenBuild, branchFilter, pullRequestLabelFilter); } } } diff --git a/src/main/resources/com/gitee/jenkins/trigger/GiteePushTrigger/config.jelly b/src/main/resources/com/gitee/jenkins/trigger/GiteePushTrigger/config.jelly index 599b533..e681820 100644 --- a/src/main/resources/com/gitee/jenkins/trigger/GiteePushTrigger/config.jelly +++ b/src/main/resources/com/gitee/jenkins/trigger/GiteePushTrigger/config.jelly @@ -40,9 +40,29 @@ - - + + + + + + +
+ diff --git a/src/main/resources/com/gitee/jenkins/trigger/GiteePushTrigger/config.properties b/src/main/resources/com/gitee/jenkins/trigger/GiteePushTrigger/config.properties index 573d425..9666fac 100644 --- a/src/main/resources/com/gitee/jenkins/trigger/GiteePushTrigger/config.properties +++ b/src/main/resources/com/gitee/jenkins/trigger/GiteePushTrigger/config.properties @@ -3,6 +3,10 @@ Generate=Generate Clear=Clear Push=Push Events Enable.CI.Skip=Enable [ci-skip] +Build.Instruction.Filter=Build instruction filter +Build.Instruction.Filter.None=None +Build.Instruction.Filter.CiSkip=[ci-skip] skip build +Build.Instruction.Filter.CiBuild=[ci-build] trigger build Enable.CI.SkipFroTestNotRequired=Skip ci when test not required Enabled.Gitee.Triggers=Enabled Gitee triggers Approved.Pull.Request=Approved Pull Requests diff --git a/src/main/resources/com/gitee/jenkins/trigger/GiteePushTrigger/config_zh_CN.properties b/src/main/resources/com/gitee/jenkins/trigger/GiteePushTrigger/config_zh_CN.properties index 1ecc38b..cb89769 100644 --- a/src/main/resources/com/gitee/jenkins/trigger/GiteePushTrigger/config_zh_CN.properties +++ b/src/main/resources/com/gitee/jenkins/trigger/GiteePushTrigger/config_zh_CN.properties @@ -4,6 +4,10 @@ Clear=\u6E05\u9664 Push=\u63A8\u9001\u4EE3\u7801 Enable.CI.Skip=\u652F\u6301 [ci-skip] \u6307\u4EE4\u8FC7\u6EE4\u6784\u5EFA Enable.CI.SkipFroTestNotRequired=PR \u4E0D\u8981\u6C42\u5FC5\u987B\u6D4B\u8BD5\u65F6\u8FC7\u6EE4\u6784\u5EFA +Build.Instruction.Filter=\u6784\u5EFA\u6307\u4EE4\u8FC7\u6EE4 +Build.Instruction.Filter.None=\u65E0 +Build.Instruction.Filter.CiSkip=[ci-skip] \u6307\u4EE4\u8DF3\u8FC7\u6784\u5EFA +Build.Instruction.Filter.CiBuild=[ci-build] \u6307\u4EE4\u89E6\u53D1\u6784\u5EFA Enabled.Gitee.Triggers=Gitee \u89E6\u53D1\u6784\u5EFA\u7B56\u7565 Approved.Pull.Request=\u5BA1\u67E5\u901A\u8FC7 Pull Requests Tested.Pull.Request=\u6D4B\u8BD5\u901A\u8FC7 Pull Requests diff --git a/src/main/webapp/help/help-ci-build.html b/src/main/webapp/help/help-ci-build.html new file mode 100644 index 0000000..cd02972 --- /dev/null +++ b/src/main/webapp/help/help-ci-build.html @@ -0,0 +1,4 @@ +
+ For Push hook: build if the commit message contains [ci-build]. + For Pull Request hook: build if the pull request body contains [ci-build]. +
diff --git a/src/main/webapp/help/help-ci-build_zh_CN.html b/src/main/webapp/help/help-ci-build_zh_CN.html new file mode 100644 index 0000000..b2891af --- /dev/null +++ b/src/main/webapp/help/help-ci-build_zh_CN.html @@ -0,0 +1,8 @@ +
+

+ 代码推送触发: 若推送的最后一个提交的描述信息包含 [ci-build],则触发构建。 +

+

+ PR 操作触发: 若 PR 的内容描述信息包含 [ci-build],则触发构建。 +

+