根据条件运行gitlab管道

时间:2018-10-31 15:35:37

标签: gitlab gitlab-ci gitlab-ci-runner

我必须基于一些要在.gitlab-ci.yml配置中评估的条件来运行管道。文件。基本上,我想基于条件是否成立来创建作业。以下是我当前的.gitlab-ci.yml

# This is a test to run multiple pipeline with sing .gitlab-ci.yml file.
# identifier stage will identify which pipeline (A or B) to run and only jobs
#  of that pipeline would be executed and rest would be skipped.

# variables:
    # PIPE_TYPE: "$(mkdir identifier; echo 'B' > identifier/type.txt; cat identifier/type.txt)"
    # PIPE_TYPE: "B"

stages:
    #- identify
    - build
    - test

#identify:
#    stage: identify
#    before_script:
#        - mkdir "identifier"
#        - echo "B" > identifier/type.txt
#    script:
#        - PIPE_TYPE=$(cat identifier/type.txt)
#        - echo $PIPE_TYPE
#    artifacts:
#        paths:
#            - identifier/type.txt

before_script:
    # - mkdir "identifier"
    # - echo "B" > identifier/type.txt
    # - export PIPE_TYPE=$(cat identifier/type.txt)
    - export PIPE_TYPE="B"

build_pipeline_A:
    stage: build
    only:
        refs:
            - master
        variables:
            - $PIPE_TYPE == "A"
    script:
        - echo $PIPE_TYPE
        - echo "Building using A."
        - mkdir "buildA"
        - touch buildA/info.txt
    artifacts:
        paths:
            - buildA/info.txt

build_pipeline_B:
    stage: build
    only:
        refs:
            - master
        variables:
            - $PIPE_TYPE == "B"
    script:
        - echo "Building using B."
        - mkdir "buildB"
        - touch buildB/info.txt
    artifacts:
        paths:
            - buildB/info.txt

test_pipeline_A:
    stage: test
    script:
        - echo "Testing A"
        - test -f "buildA/info.txt"
    only:
        refs:
            - master
        variables:
            - $PIPE_TYPE == "A"
    dependencies:
        - build_pipeline_A

test_pipeline_B:
    stage: test
    script:
        - echo "Testing B"
        - test -f "buildB/info.txt"
    only:
        refs:
            - master
        variables:
            - $PIPE_TYPE == "B"
    dependencies:
        - build_pipeline_B

在这里,我有两个带有作业Abuild_pipeline_A的管道test_pipeline_A和另一个带有Bbuild_pipeline_B作业的test_pipeline_B的第二个管道。

首先,我想我可以创建一个作业identify,该作业将评估一些逻辑并编写在文件(identifier/type.txt)作业中使用哪个管道并更新PIPE_TYPE变量。此变量可以在only:variables测试中的所有作业中使用,并且如果PIPE_TYPE等于作业的管道类型,则会创建该作业,不幸的是,这没有用。

在第二次尝试中,我想到了使用全局variables并尝试在那里计算表达式并将其设置为PIPE_TYPE的情况。

在上一次尝试中,我使用了before_script来评估表达式并将其设置在PIPE_TYPE中,希望on:variables能够选择PIPE_TYPE的值,但是没有运气也采用这种方法。

这时我的想法耗尽了,决定发布问题。 我测试的.gitlab-ci.yaml文件,这是一个公共存储库。所以请随时戳一下。

0 个答案:

没有答案