Gitlab Ci include local only executes last rules

问题描述 投票:0回答:1

根据文档,我已将包含文件概念添加到我的 CI 管道中

https://docs.gitlab.com/ee/ci/yaml/includes.html

include:
    - local: builds.yml
        rules:
          - if: $CI_COMMIT_BRANCH == "dev"
      - local: deploys.yml
        rules:
          - if: $CI_COMMIT_BRANCH == "main"

但它总是取最后一个 if 条件。在我的例子中,它总是包含 deploys.yml 文件。感谢任何帮助

这是我的实际代码

#.gitlab-ci.yml

include:
    - local: .gitlab-ci-dev.yml
      rules:
          - if: $CI_COMMIT_BRANCH == "dev"
    - local: .gitlab-ci-master.yml
      rules:
          - if: $CI_COMMIT_BRANCH == "main"
stages:
    - build
    - tests
    - deploy
before_script:
    - echo $iis_application_path
    - echo $application_pool_name
    - echo $CI_COMMIT_BRANCH
    - echo $CI_COMMIT_BRANCH == "AjmanTaxi"
build:
    stage: build
    script:
        - dotnet restore
        - dotnet build --no-restore
        - dotnet publish .\apicicdtest\apicicdtest.csproj -c Release -o $publish_path
    artifacts:
        paths:
            - $publish_path
        expire_in: '1 hrs'
    tags:
        - windows
    only:
        - branches

deploy:
    stage: deploy
    script:
        - |
            if((Get-WebAppPoolState -Name $application_pool_name).Value -ne 'Stopped'){
                 Write-Output ('Stopping Application Pool: {0}' -f $application_pool_name)
                 Stop-WebAppPool -Name $application_pool_name
                 New-Item -Path $iis_application_path -Name "app_offline.htm" -ItemType "file"
            
            }

        - Start-Sleep -s 5
        - Copy-Item ($publish_path + "*") -Destination $iis_application_path -recurse
        - |
            if((Get-WebAppPoolState -Name $application_pool_name).Value -ne 'Started'){
                Write-Output ('Starting Application Pool: {0}' -f $application_pool_name)
                if(Test-Path $iis_application_path\app_offline.htm){
                    Remove-Item -Path $iis_application_path\app_offline.htm
                }
                Start-WebAppPool -Name $application_pool_name
            }
    only:
        - branches
    tags:
        - windows
    dependencies:
        - build

#.gitlab-ci-dev.yml

variables:
    publish_path: 'bin\Release\net7.0\publish\'
    application_pool_name: 'testcicddev'
    application_name: 'testcicddev'
    iis_application_path: 'E:\temp_files\cicdtestpublishdev'

#.gitlab-ci-master.yml

variables:
    publish_path: 'bin\Release\net7.0\publish\'
    application_pool_name: 'testcicdmaster'
    application_name: 'testcicdmaster'
    iis_application_path: 'E:\temp_files\cicdtestpublishmaster'

这里总是取 gitlab-ci-master.yml 变量

include gitlab-ci
1个回答
0
投票

我在您的 YAML 提取物中没有看到

include:

例如,检查问题是否仍然存在:

include:
  - local: builds.yml
    rules:
      - if: $CI_COMMIT_BRANCH == "dev"
  - local: deploys.yml
    rules:
      - if: $CI_COMMIT_BRANCH == "main"

rules
关键字应该只适用于正确的'
local
'包含。


但即使您有这样的关键字,您也可能想尝试扩展那些包含的规则

类似的东西:

include:
  - local: builds.yml
  - local: deploys.yml

build:
  extends: .build
  rules:
    - if: $CI_COMMIT_BRANCH == "dev"

deploy:
  extends: .deploy
  rules:
    - if: $CI_COMMIT_BRANCH == "main"

想法是在您的

.build
文件中定义一个
builds.yml
工作,在您的
.deploy
文件中定义一个
deploys.yml
工作。
extends
关键字用于从包含的文件中的相应作业继承配置。

这意味着你会:

  1. 包括
    builds.yml
    deploys.yml
    文件。
  2. 定义一个
    build
    作业,它从包含的
    .build
    文件扩展
    builds.yml
    作业。仅当当前分支为
    dev
    .
  3. 时,该作业才会运行
  4. 定义一个
    deploy
    作业,它从包含的
    .deploy
    文件扩展
    deploys.yml
    作业。仅当当前分支为
    main
    .
  5. 时,该作业才会运行

是否有动态定义扩展作业名称的选项?

我认为您不能直接使用环境变量或 CI/CD 变量作为

extends
键的值。

这意味着您可能必须为每个分支创建一个单独的作业,并使用规则来控制它们何时运行。

include:
  - local: config/dev.yml
  - local: config/main.yml
  - local: config/feature.yml

deploy_dev:
  extends: .deploy_dev
  rules:
    - if: $CI_COMMIT_BRANCH == "dev"

deploy_main:
  extends: .deploy_main
  rules:
    - if: $CI_COMMIT_BRANCH == "main"

deploy_feature:
  extends: .deploy_feature
  rules:
    - if: $CI_COMMIT_BRANCH =~ /^feature\//

例如,使用此配置,将根据分支名称触发适当的作业:

  • deploy_dev
    将竞选
    dev
    分会
  • deploy_main
    将竞选
    main
    分会
  • deploy_feature
    将竞选名称以
    feature/
  • 开头的任何分支机构

这假设您的存储库包含配置文件,例如

dev

.deploy_dev:
  script:
    - echo "Deploying for dev branch"
© www.soinside.com 2019 - 2024. All rights reserved.