!10 忽略 Pull Request 冲突

Merge pull request !10 from silverballer/1.2.3
This commit is contained in:
Yashin 2021-01-07 17:48:19 +08:00 committed by Gitee
commit 4eea07ed96
11 changed files with 51 additions and 18 deletions

View File

@ -135,11 +135,11 @@ Gitee Jenkins Plugin 是码云基于 [GitLab Plugin](https://github.com/jenkinsc
- `[ci-build] trigger build` commit message 或者 PR 说明包含 `[ci-build]` 时,触发构建。
3. `Ignore last commit has build` 该选项可以跳过已经构建过的 Commit 版本。
4. `Cancel incomplete build on same Pull Requests` 该选项在 PR 触发构建时,会判断是否存在相同 PR 且未完成的构建,有则取消未完成构建,再进行当前构建。
5. `Allowed branches` 可以配置允许构建的分支,目前支持分支名和正则表达式的方式进行过滤
6. `Secret Token for Gitee WebHook` 该选项可以配置 WebHook 的密码,该密码需要与码云 WebHook配置的密码一致方可触发构建
7. 注意:若 PR 状态为不可自动合并,则不触发构建。
![触发器配置](https://images.gitee.com/uploads/images/2020/1231/093554_e4c48be9_2102225.png "屏幕截图.png")
5. `Ignore Pull Request conflicts` 该选项在 PR 触发构建时,会根据 PR 冲突情况选择是否进行构建
6. `Allowed branches` 可以配置允许构建的分支,目前支持分支名和正则表达式的方式进行过滤
7. `Secret Token for Gitee WebHook` 该选项可以配置 WebHook 的密码,该密码需要与码云 WebHook配置的密码一致方可触发构建。
8. 注意:若 PR 状态为不可自动合并,则不触发构建。
![触发器配置](https://images.gitee.com/uploads/images/2021/0107/171932_e25c8359_2102225.png "屏幕截图.png")
### 构建后步骤配置
前往任务配置的构建后配置: Configure -> Post-build Actions 选项卡

View File

@ -95,6 +95,7 @@ public class GiteePushTrigger extends Trigger<Job<?, ?>> {
private String pendingBuildName;
private boolean cancelPendingBuildsOnUpdate;
private boolean cancelIncompleteBuildOnSamePullRequest;
private boolean ignorePullRequestConflicts;
private transient BranchFilter branchFilter;
private transient PushHookTriggerHandler pushHookTriggerHandler;
@ -123,7 +124,8 @@ public class GiteePushTrigger extends Trigger<Job<?, ?>> {
String includeBranchesSpec, String excludeBranchesSpec, String targetBranchRegex,
PullRequestLabelFilterConfig pullRequestLabelFilterConfig, String secretToken, boolean triggerOnPipelineEvent,
boolean triggerOnApprovedPullRequest, String pendingBuildName, boolean cancelPendingBuildsOnUpdate,
boolean cancelIncompleteBuildOnSamePullRequest) {
boolean cancelIncompleteBuildOnSamePullRequest,
boolean ignorePullRequestConflicts) {
this.triggerOnPush = triggerOnPush;
this.triggerOnCommitComment = triggerOnCommitComment;
this.triggerOnOpenPullRequest = triggerOnOpenPullRequest;
@ -151,6 +153,7 @@ public class GiteePushTrigger extends Trigger<Job<?, ?>> {
this.pendingBuildName = pendingBuildName;
this.cancelPendingBuildsOnUpdate = cancelPendingBuildsOnUpdate;
this.cancelIncompleteBuildOnSamePullRequest = cancelIncompleteBuildOnSamePullRequest;
this.ignorePullRequestConflicts = ignorePullRequestConflicts;
initializeTriggerHandler();
initializeBranchFilter();
@ -334,6 +337,10 @@ public class GiteePushTrigger extends Trigger<Job<?, ?>> {
return cancelIncompleteBuildOnSamePullRequest;
}
public boolean isIgnorePullRequestConflicts() {
return ignorePullRequestConflicts;
}
@DataBoundSetter
public void setTriggerOnPush(boolean triggerOnPush) {
this.triggerOnPush = triggerOnPush;
@ -491,6 +498,11 @@ public class GiteePushTrigger extends Trigger<Job<?, ?>> {
this.cancelIncompleteBuildOnSamePullRequest = cancelIncompleteBuildOnSamePullRequest;
}
@DataBoundSetter
public void setIgnorePullRequestConflicts(boolean ignorePullRequestConflicts) {
this.ignorePullRequestConflicts = ignorePullRequestConflicts;
}
// executes when the Trigger receives a push request
public void onPost(final PushHook hook) {
if (branchFilter == null) {
@ -545,9 +557,10 @@ public class GiteePushTrigger extends Trigger<Job<?, ?>> {
pullRequestHookTriggerHandler = newPullRequestHookTriggerHandler(triggerOnOpenPullRequest,
triggerOnUpdatePullRequest, triggerOnAcceptedPullRequest, triggerOnClosedPullRequest,
skipWorkInProgressPullRequest, triggerOnApprovedPullRequest, triggerOnTestedPullRequest, cancelPendingBuildsOnUpdate, ciSkipFroTestNotRequired,
cancelIncompleteBuildOnSamePullRequest
cancelIncompleteBuildOnSamePullRequest,
ignorePullRequestConflicts
);
noteHookTriggerHandler = newNoteHookTriggerHandler(triggerOnCommitComment, triggerOnNoteRequest, noteRegex, ciSkipFroTestNotRequired, cancelIncompleteBuildOnSamePullRequest);
noteHookTriggerHandler = newNoteHookTriggerHandler(triggerOnCommitComment, triggerOnNoteRequest, noteRegex, ciSkipFroTestNotRequired, cancelIncompleteBuildOnSamePullRequest, ignorePullRequestConflicts);
pushHookTriggerHandler = newPushHookTriggerHandler(triggerOnPush, skipWorkInProgressPullRequest);
pipelineTriggerHandler = newPipelineHookTriggerHandler(triggerOnPipelineEvent);
}

View File

@ -7,9 +7,9 @@ public final class NoteHookTriggerHandlerFactory {
private NoteHookTriggerHandlerFactory() {}
public static NoteHookTriggerHandler newNoteHookTriggerHandler(boolean triggerOnCommitComment, boolean triggerOnNoteRequest, String noteRegex, boolean ciSkipFroTestNotRequired, boolean cancelIncompleteBuildOnSamePullRequest) {
public static NoteHookTriggerHandler newNoteHookTriggerHandler(boolean triggerOnCommitComment, boolean triggerOnNoteRequest, String noteRegex, boolean ciSkipFroTestNotRequired, boolean cancelIncompleteBuildOnSamePullRequest, boolean ignorePullRequestConflicts) {
if (triggerOnCommitComment || triggerOnNoteRequest) {
return new NoteHookTriggerHandlerImpl(triggerOnCommitComment, triggerOnNoteRequest, noteRegex, ciSkipFroTestNotRequired, cancelIncompleteBuildOnSamePullRequest);
return new NoteHookTriggerHandlerImpl(triggerOnCommitComment, triggerOnNoteRequest, noteRegex, ciSkipFroTestNotRequired, cancelIncompleteBuildOnSamePullRequest, ignorePullRequestConflicts);
} else {
return new NopNoteHookTriggerHandler();
}

View File

@ -40,13 +40,15 @@ class NoteHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<NoteHook>
private final String noteRegex;
private final boolean ciSkipFroTestNotRequired;
private final boolean cancelIncompleteBuildOnSamePullRequest;
private boolean ignorePullRequestConflicts;
NoteHookTriggerHandlerImpl(boolean triggerOnCommitComment, boolean triggerOnNoteRequest, String noteRegex, boolean ciSkipFroTestNotRequired, boolean cancelIncompleteBuildOnSamePullRequest) {
NoteHookTriggerHandlerImpl(boolean triggerOnCommitComment, boolean triggerOnNoteRequest, String noteRegex, boolean ciSkipFroTestNotRequired, boolean cancelIncompleteBuildOnSamePullRequest, boolean ignorePullRequestConflicts) {
this.triggerOnCommitComment = triggerOnCommitComment;
this.triggerOnNoteRequest = triggerOnNoteRequest;
this.noteRegex = noteRegex;
this.ciSkipFroTestNotRequired = ciSkipFroTestNotRequired;
this.cancelIncompleteBuildOnSamePullRequest = cancelIncompleteBuildOnSamePullRequest;
this.ignorePullRequestConflicts = ignorePullRequestConflicts;
}
@Override
@ -54,7 +56,7 @@ class NoteHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<NoteHook>
if (isValidTrigger(hook)) {
// 若pr不可自动合并则评论至pr
PullRequestObjectAttributes objectAttributes = hook.getPullRequest();
if (objectAttributes != null && !objectAttributes.isMergeable()) {
if (!ignorePullRequestConflicts && objectAttributes != null && !objectAttributes.isMergeable()) {
LOGGER.log(Level.INFO, "This pull request can not be merge");
// fixme 无法获取 publisher
// java.lang.ClassCastException: org.jenkinsci.plugins.workflow.job.WorkflowJob cannot be cast to hudson.model.AbstractProject

View File

@ -23,7 +23,8 @@ public final class PullRequestHookTriggerHandlerFactory {
boolean triggerOnTestedPullRequest,
boolean cancelPendingBuildsOnUpdate,
boolean ciSkipFroTestNotRequired,
boolean cancelIncompleteBuildOnSamePullRequest) {
boolean cancelIncompleteBuildOnSamePullRequest,
boolean ignorePullRequestConflicts) {
if (triggerOnOpenPullRequest
|| !("0".equals(triggerOnUpdatePullRequest) || "false".equals(triggerOnUpdatePullRequest))
|| triggerOnAcceptedPullRequest
@ -48,7 +49,8 @@ public final class PullRequestHookTriggerHandlerFactory {
skipWorkInProgressPullRequest,
cancelPendingBuildsOnUpdate,
ciSkipFroTestNotRequired,
cancelIncompleteBuildOnSamePullRequest);
cancelIncompleteBuildOnSamePullRequest,
ignorePullRequestConflicts);
} else {
return new NopPullRequestHookTriggerHandler();
}

View File

@ -48,12 +48,13 @@ class PullRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<Pu
private final Collection<ActionDesc> allowedActionDesces;
private final boolean cancelPendingBuildsOnUpdate;
private final boolean cancelIncompleteBuildOnSamePullRequest;
private boolean ignorePullRequestConflicts;
PullRequestHookTriggerHandlerImpl(Collection<State> allowedStates, boolean skipWorkInProgressPullRequest, boolean cancelPendingBuildsOnUpdate, boolean ciSkipFroTestNotRequired, boolean cancelIncompleteBuildOnSamePullRequest) {
this(allowedStates, EnumSet.allOf(Action.class), EnumSet.allOf(ActionDesc.class), skipWorkInProgressPullRequest, cancelPendingBuildsOnUpdate, ciSkipFroTestNotRequired, cancelIncompleteBuildOnSamePullRequest);
PullRequestHookTriggerHandlerImpl(Collection<State> allowedStates, boolean skipWorkInProgressPullRequest, boolean cancelPendingBuildsOnUpdate, boolean ciSkipFroTestNotRequired, boolean cancelIncompleteBuildOnSamePullRequest, boolean ignorePullRequestConflicts) {
this(allowedStates, EnumSet.allOf(Action.class), EnumSet.allOf(ActionDesc.class), skipWorkInProgressPullRequest, cancelPendingBuildsOnUpdate, ciSkipFroTestNotRequired, cancelIncompleteBuildOnSamePullRequest, ignorePullRequestConflicts);
}
PullRequestHookTriggerHandlerImpl(Collection<State> allowedStates, Collection<Action> allowedActions, Collection<ActionDesc> allowedActionDesces, boolean skipWorkInProgressPullRequest, boolean cancelPendingBuildsOnUpdate, boolean ciSkipFroTestNotRequired, boolean cancelIncompleteBuildOnSamePullRequest) {
PullRequestHookTriggerHandlerImpl(Collection<State> allowedStates, Collection<Action> allowedActions, Collection<ActionDesc> allowedActionDesces, boolean skipWorkInProgressPullRequest, boolean cancelPendingBuildsOnUpdate, boolean ciSkipFroTestNotRequired, boolean cancelIncompleteBuildOnSamePullRequest, boolean ignorePullRequestConflicts) {
this.allowedStates = allowedStates;
this.allowedActions = allowedActions;
this.allowedActionDesces = allowedActionDesces;
@ -61,6 +62,7 @@ class PullRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<Pu
this.cancelPendingBuildsOnUpdate = cancelPendingBuildsOnUpdate;
this.ciSkipFroTestNotRequired = ciSkipFroTestNotRequired;
this.cancelIncompleteBuildOnSamePullRequest = cancelIncompleteBuildOnSamePullRequest;
this.ignorePullRequestConflicts = ignorePullRequestConflicts;
}
@Override
@ -79,7 +81,7 @@ class PullRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<Pu
}
// 若pr不可自动合并则评论至pr
if (!objectAttributes.isMergeable()) {
if (!ignorePullRequestConflicts && !objectAttributes.isMergeable()) {
LOGGER.log(Level.INFO, "This pull request can not be merge");
GiteeMessagePublisher publisher = GiteeMessagePublisher.getFromJob(job);
GiteeClient client = getClient(job);

View File

@ -80,6 +80,10 @@
<f:checkbox default="false"/>
</f:entry>
<f:entry title="${%Ignore.Pull.Request.Conflicts}" field="ignorePullRequestConflicts" help="/plugin/gitee/help/help-ignore-pull-request-conflicts.html">
<f:checkbox default="false"/>
</f:entry>
<f:entry title="${%Allowed.branches}">
<table>
<!--<f:section title="">-->

View File

@ -39,6 +39,7 @@ Exclude=Exclude
Include=Include
Ignore.Last.Commit.Has.Build=Ignore last commit has been build
Cancel.Same.Pull.Request.Incomplete.Build=Cancel incomplete build on same Pull Requests
Ignore.Pull.Request.Conflicts=Ignore Pull Request conflicts
Comments=Comment Pull Requests
Comment.Regex=Comment (regex) for triggering a build
Retry.Text=Jenkins please retry a build

View File

@ -39,6 +39,7 @@ Exclude=\u6392\u9664
Include=\u5305\u62EC
Ignore.Last.Commit.Has.Build=\u8FC7\u6EE4\u5DF2\u7ECF\u6784\u5EFA\u7684 Commit \u7248\u672C
Cancel.Same.Pull.Request.Incomplete.Build=\u53D6\u6D88\u76F8\u540C Pull Requests \u672A\u5B8C\u6210\u6784\u5EFA
Ignore.Pull.Request.Conflicts=\u5FFD\u7565 Pull Request \u51B2\u7A81
Comments=\u8BC4\u8BBA Pull Requests
Comment.Regex=\u8BC4\u8BBA\u5185\u5BB9\u7684\u6B63\u5219\u8868\u8FBE\u5F0F
Retry.Text=Jenkins please retry a build

View File

@ -0,0 +1,5 @@
<div>
If this option is selected,
the build will be triggered regardless of whether the Pull Request conflicts or not,
otherwise the Pull Request conflict will not trigger the build.
</div>

View File

@ -0,0 +1,3 @@
<div>
若勾选此选项,则无论 Pull Request 是否冲突都将触发构建,否则 Pull Request 冲突即不触发构建
</div>