如何在gitlab CI中运行特定的工作

lin*_*lin 10 continuous-integration gitlab gitlab-ci

我们正面临一个问题,我们需要在gitlab CI中运行一个特定的工作.我们目前还不知道如何解决这个问题.我们在我们中定义了多个作业,.gitlab-ci.yml但我们只需要在管道中运行一个作业.我们怎么能只运行一份工作,job1或者job2?我们不能在我们的环境中使用tagsbranches作为软件开关.

.gitlab-ci.yml:

before_script:
  - docker info

job1:
  script:
    - do something

job2:
  script:
    - do something
Run Code Online (Sandbox Code Playgroud)

Ala*_*ALI 6

我们过去遇到了同样的问题,我正在与您分享我们的解决方案.

备注

  • 我读了Jawad的答案,我发现它很好,我们在面对这个问题时尝试过.
  • 我的评论是,添加when: manual将始终显示您的所有作业.
  • 因此,如果您在大型团队中工作,则无法阻止其他协作者在您不希望启动的作业上错误地或错误地单击.

在继续之前我想要的是什么

  • 假设您有4个工作岗位.
  • 你需要始终运行(手动或自动)job 1,job 2job 4但不是job3.
  • 您希望仅job 3在特定情况下运行,或者仅在您决定运行它时运行.

这个想法是

  • 我们仅针对正则表达式的标签启动第3个作业.
  • 在下面的例子中,它推出了类似的标签helloTag.1,helloTag.2,helloTag.3...等等.
  • 如果我们在developmaster(或其他分支),我们将有3个阶段(阶段1,阶段2,阶段4)

    请注意管道中不存在第三个作业

    在此输入图像描述

  • 转到"存储库" - >"标签" - >"新标签"

    为标记指定一个与正则表达式相同的名称

    在此输入图像描述

  • 如果我们的标签名称以"helloTag"开头,我们将有1个阶段(第3阶段)

    请注意这里没有其他阶段

    在此输入图像描述

.gitlab-ci文件示例

stages:
    - myStage1
    - myStage2
    - myStage3
    - myStage4

This is my first stage:
    stage: myStage1
    before_script:
        - echo "my stage 1 before script"
    script:
         - echo "my stage 1 script"
    except:
        - /^helloTag.*$/

This is my second stage:
    stage: myStage2
    before_script:
        - echo "my stage 2 before script"
    script:
         - echo "my stage 2 script"
    except:
        - /^helloTag.*$/

This is my third stage:
    stage: myStage3
    before_script:
        - echo "my stage 3 before script"
    script:
         - echo "my stage 3 script"
    only:
        - /^helloTag.*$/

This is my fourth stage:
    stage: myStage4
    before_script:
        - echo "my stage 4 before script"
    script:
         - echo "my stage 4 script"
    except:
        - /^helloTag.*$/
Run Code Online (Sandbox Code Playgroud)

希望这对你有所帮助.


Jaw*_*wad 5

只需添加一个when: manual您不想运行的作业.

这些作业仍将出现在您的管道中,但不会运行,除非有人通过Web界面"手动"启动它们,因此名称.

以下是有关此内容的更多信息:https://docs.gitlab.com/ce/ci/yaml/README.html#when

如果你正在寻找更多"可编程"的东西,让我们说运行job1或者job2根据分支名称或标签运行,那么你应该看一下onlyexcept关键字:https://docs.gitlab.com/ce/ci /yaml/README.html#only-and-except


zm3*_*m31 5

您可以将gitlab变量表达式与only / except一起使用,如下所示,然后根据需要将变量传递到管道执行中。

此示例默认情况下同时运行两个作业,但是如果为“ firstJobOnly”传递“ true”,则它仅运行第一个作业。

variables:
  firstJobOnly: 'false'

before_script:
  - docker info

job1:
  script:
    - do something

job2:
  script:
    - do something
  except:
    variables:
      - $firstJobOnly =~ /true/i
Run Code Online (Sandbox Code Playgroud)

  • 我相信第一次提出这个问题时这是不可能的,但这是可能的,而且现在是如何做到的。对此答案+1,这应该是现在接受的答案:P (2认同)

lin*_*lin 3

> 目前,GitLab CI 似乎不可能拥有除其他答案中提供的其他软件tags开关branches

由于 GitLab CI 的限制太多,我们最终切换到了另一个“真正的”CI。如果您想在不同的过程中运行一些自定义作业,GitLab CI 是不可行的。我真的很欣赏这里的两个答案。我确信他们会帮助其他用户管理这些东西。不幸的是,在我们的例子中,我们无法使用tags,commit messagesbranches作为软件开关。

我们仍在寻找这个问题的答案。请随意提供其他方法来解决此问题。一旦正确答案出现,我就会标记它。此外,对这个问题的赏金并没有得到正确的答案。