Jenkins job builder gitlab 触发器被忽略
Jenkins job builder gitlab trigger is ignored
我有以下 Jenkins 作业定义:
- scm:
name: some-project
scm:
- git:
url: git@gitlab.****/some-project.git
credentials-id: some-ssh-username-with-private-key
branches:
- origin/master
- project:
name: some-project
jobs:
- '{name}':
triggers:
gitlab:
trigger-push: true
trigger-merge-request: false
trigger-open-merge-request-push: never
现在这个作业可以无误地上传到 Jenkins,但是如果我转到 Jenkins Web some-project
的 Configure
页面 UI,我可以看到 Build when a change is pushed to GitLab
在 Triggers 部分未启用。 GitLab 存储库配置正确 - 此作业的 源代码管理 部分具有 git@gitlab.****/some-project.git
和 some-ssh-username-with-private-key
凭据和分支 origin/master
配置。但如果没有工作触发器,这是无用的。
我做错了什么?
请注意,我不是在询问如何配置 GitLab WebHooks 来触发 Jenkins 作业。我可以手动执行此操作并且工作正常。但是我们希望使用 Jenkins 作业构建器来管理我们的 Jenkins 作业,以避免通过 Web UI 配置它们的过程容易出错,并跟踪作业配置的变化 - 我们正在创建 git 带有 Jenkins 作业定义的存储库.
在你的问题中你说 Build when a change is pushed to GitLab
选项是 "not enabled"。在配置页面上,当当前作业配置中已经选择(即正在使用)这些选项时,Jenkins 将禁用下拉列表中的选项。
trigger-push: true
选项可能是导致您出现这种情况的原因。
你是说当更改被推送到 GitLab 存储库时你的工作实际上并没有被构建?
经过您的澄清:
1.1.26 及更高版本有一个完整示例 here。
triggers:
- gitlab:
trigger-push: false
trigger-merge-request: false
trigger-open-merge-request-push: both
ci-skip: false
set-build-description: false
add-note-merge-request: false
add-vote-merge-request: false
add-ci-message: true
allow-all-branches: true
include-branches:
- 'master'
- 'master2'
- 'local-test'
exclude-branches:
- 'broken-test'
- 'master-foo'
您的代码是否合并了要包含的分支?
我怀疑您可能需要将 triggers
放在 job
本身中,而不是放在 /project/jobs
.[=18= 下]
使用 project
键下的触发器,我遇到了与您相同的症状。
None 我的触发器是在 Jenkins 中创建的。将 triggers
部分移动到 job
中解决了我的问题。
此 yaml 将构建一个名为 builder-test
的 jenkins 作业,并选中 "Build when a change is pushed to GitLab" 框:
- scm:
name: gitlab
scm:
- git:
url: https://gitlab.com/user/repo-name.git
branches:
- origin/master
- job:
name: builder-test
project-type: freestyle
description: "builder-test desc"
scm:
- gitlab
triggers:
- gitlab:
trigger-push: true
- project:
name: builder-test-project
jobs:
- 'builder-test'
使用 GitLab 插件 1.5.1 和 JJB 1.6.2 在 Jenkins 2.32.3 上测试
作业配置应在 "job" 或 "job-template" 部分中提供。触发器是一种作业配置。
JJB 中的 "project" 配置用于描述 "which" 作业 and/or 作业模板以引入和设置这些作业配置所需的变量。
问题中的问题是 "triggers" 这是一个作业配置,它被放置在 "project" 部分而不是 "job" 和/或 "job-template" 部分。
将作业和作业模板视为编程语言中的 "classes",将 "project" 部分视为实例化并将参数传递给 class 构造函数可能会有所帮助。
- job-template:
name: '{project-name}-verify'
######################
# Default parameters #
######################
branches:
- origin/master
gitlab-trigger-push: true
gitlab-trigger-merge-request: false
gitlab-trigger-open-merge-request-push: never
#####################
# Job configuration #
#####################
project-type: freestyle
scm:
- git:
url: '{git-url}'
branches: '{obj:branches}'
triggers:
- gitlab:
trigger-push: '{gitlab-trigger-push}'
trigger-merge-request: '{gitlab-trigger-merge-request}'
trigger-open-merge-request-push: '{gitlab-trigger-open-merge-request-push}'
- project:
name: abc123
jobs:
- '{project-name}-verify'
project-name: 'my-project'
此方法的优点在于现在花括号中的所有选项都可以选择性地覆盖作业模板中定义的默认值。
我有以下 Jenkins 作业定义:
- scm:
name: some-project
scm:
- git:
url: git@gitlab.****/some-project.git
credentials-id: some-ssh-username-with-private-key
branches:
- origin/master
- project:
name: some-project
jobs:
- '{name}':
triggers:
gitlab:
trigger-push: true
trigger-merge-request: false
trigger-open-merge-request-push: never
现在这个作业可以无误地上传到 Jenkins,但是如果我转到 Jenkins Web some-project
的 Configure
页面 UI,我可以看到 Build when a change is pushed to GitLab
在 Triggers 部分未启用。 GitLab 存储库配置正确 - 此作业的 源代码管理 部分具有 git@gitlab.****/some-project.git
和 some-ssh-username-with-private-key
凭据和分支 origin/master
配置。但如果没有工作触发器,这是无用的。
我做错了什么?
请注意,我不是在询问如何配置 GitLab WebHooks 来触发 Jenkins 作业。我可以手动执行此操作并且工作正常。但是我们希望使用 Jenkins 作业构建器来管理我们的 Jenkins 作业,以避免通过 Web UI 配置它们的过程容易出错,并跟踪作业配置的变化 - 我们正在创建 git 带有 Jenkins 作业定义的存储库.
在你的问题中你说 Build when a change is pushed to GitLab
选项是 "not enabled"。在配置页面上,当当前作业配置中已经选择(即正在使用)这些选项时,Jenkins 将禁用下拉列表中的选项。
trigger-push: true
选项可能是导致您出现这种情况的原因。
你是说当更改被推送到 GitLab 存储库时你的工作实际上并没有被构建?
经过您的澄清:
1.1.26 及更高版本有一个完整示例 here。
triggers:
- gitlab:
trigger-push: false
trigger-merge-request: false
trigger-open-merge-request-push: both
ci-skip: false
set-build-description: false
add-note-merge-request: false
add-vote-merge-request: false
add-ci-message: true
allow-all-branches: true
include-branches:
- 'master'
- 'master2'
- 'local-test'
exclude-branches:
- 'broken-test'
- 'master-foo'
您的代码是否合并了要包含的分支?
我怀疑您可能需要将 triggers
放在 job
本身中,而不是放在 /project/jobs
.[=18= 下]
使用 project
键下的触发器,我遇到了与您相同的症状。
None 我的触发器是在 Jenkins 中创建的。将 triggers
部分移动到 job
中解决了我的问题。
此 yaml 将构建一个名为 builder-test
的 jenkins 作业,并选中 "Build when a change is pushed to GitLab" 框:
- scm:
name: gitlab
scm:
- git:
url: https://gitlab.com/user/repo-name.git
branches:
- origin/master
- job:
name: builder-test
project-type: freestyle
description: "builder-test desc"
scm:
- gitlab
triggers:
- gitlab:
trigger-push: true
- project:
name: builder-test-project
jobs:
- 'builder-test'
使用 GitLab 插件 1.5.1 和 JJB 1.6.2 在 Jenkins 2.32.3 上测试
作业配置应在 "job" 或 "job-template" 部分中提供。触发器是一种作业配置。
JJB 中的"project" 配置用于描述 "which" 作业 and/or 作业模板以引入和设置这些作业配置所需的变量。
问题中的问题是 "triggers" 这是一个作业配置,它被放置在 "project" 部分而不是 "job" 和/或 "job-template" 部分。
将作业和作业模板视为编程语言中的 "classes",将 "project" 部分视为实例化并将参数传递给 class 构造函数可能会有所帮助。
- job-template:
name: '{project-name}-verify'
######################
# Default parameters #
######################
branches:
- origin/master
gitlab-trigger-push: true
gitlab-trigger-merge-request: false
gitlab-trigger-open-merge-request-push: never
#####################
# Job configuration #
#####################
project-type: freestyle
scm:
- git:
url: '{git-url}'
branches: '{obj:branches}'
triggers:
- gitlab:
trigger-push: '{gitlab-trigger-push}'
trigger-merge-request: '{gitlab-trigger-merge-request}'
trigger-open-merge-request-push: '{gitlab-trigger-open-merge-request-push}'
- project:
name: abc123
jobs:
- '{project-name}-verify'
project-name: 'my-project'
此方法的优点在于现在花括号中的所有选项都可以选择性地覆盖作业模板中定义的默认值。