7

我有以下 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 UI中的Configure页面some-project,我可以看到触发器部分未启用。GitLab repo 已正确配置 -此作业的源代码管理部分已配置凭据和分支。但是如果没有工作触发器,这是没有用的。Build when a change is pushed to GitLabgit@gitlab.****/some-project.gitsome-ssh-username-with-private-keyorigin/master

我究竟做错了什么?

请注意,我不是在问如何配置 GitLab WebHooks 来触发 Jenkins 作业。我可以手动执行此操作,并且效果很好。但是我们希望使用 Jenkins Job builder 管理我们的 Jenkins 作业,以避免通过 Web UI 配置它们的过程容易出错,并跟踪作业配置的变化——我们正在使用 Jenkins 作业定义创建 git 存储库。

4

3 回答 3

4

我怀疑您可能需要将其放入其中triggersjob而不是放在/project/jobs.

使用钥匙下的触发器project,我会遇到与您相同的症状。我的触发器都不是在 Jenkins 中创建的。将triggers部分移动到 ajob为我解决了这个问题。

builder-test此 yaml 将构建一个名为“将更改推送到 GitLab 时构建”复选框的 jenkins 作业:

- 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 上测试

于 2017-11-18T21:40:47.867 回答
3

在您的问题中,您说过该Build when a change is pushed to GitLab选项“未启用”。在配置页面上,当当前作业配置中已经选择(即正在使用)这些选项时,Jenkins 将禁用下拉列表中的选项。

在您的情况下,该trigger-push: true选项可能是导致这种情况的原因。

你是说当更改被推送到 GitLab 存储库时,你的工作实际上并没有被构建?

在你澄清之后:

这里有1.1.26 及更高版本的完整示例。

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'

您的代码是否包含要包含的分支?

于 2017-11-12T22:18:30.200 回答
1

作业配置应在“作业”或“作业模板”部分提供。触发器是一种作业配置。

JJB 中的“项目”配置用于描述要引入的“哪个”作业和/或作业模板,并设置这些作业配置所需的变量。

问题中的问题是作为作业配置的“触发器”被放置在“项目”部分而不是“作业”和/或“作业模板”部分中。

将作业和作业模板视为编程语言中的“类”,将“项目”部分视为实例化并将参数传递给类构造函数可能会有所帮助。

- 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'

这种方法的好处是现在花括号中的所有选项都可以选择性地覆盖作业模板中定义的默认值。

于 2019-04-10T07:27:23.953 回答