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-projectConfigure 页面 UI,我可以看到 Build when a change is pushed to GitLabTriggers 部分未启用。 GitLab 存储库配置正确 - 此作业的 源代码管理 部分具有 git@gitlab.****/some-project.gitsome-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'

此方法的优点在于现在花括号中的所有选项都可以选择性地覆盖作业模板中定义的默认值。