You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitLab主流水线中调用另一个流水线的指定脚本?

实现方案

要让主流水线(Main-pipeline.yml)调用deploy.yml中的.create-namespace和.copy-approle脚本片段,可通过GitLab CI的include机制引入目标文件,再用!reference指令复用脚本内容,具体步骤如下:

1. 在主流水线中引入deploy.yml

首先在主流水线的include部分添加deploy.yml的路径,确保GitLab能加载该文件中的模板:

include:
  - 'common/.deploy.yml'
  - 'deploy.yml'  # 新增:引入包含目标脚本的文件

2. 补充必要变量

deploy.yml中的脚本依赖APP_NAMESPACE、ROLE_ID、SECRET_ID等变量,需在主流水线中定义(或通过流水线触发时传入):

variables:
  VAULT_ADDR: example.com
  APPLICATION_NAME: 
    value: ""
    description: "name of the application/should match name inside dependency manager file"
  APP_NAMESPACE: 
    value: ""
    description: "Kubernetes namespace for the application"
  ROLE_ID:
    value: ""
    description: "Vault AppRole Role ID"
  SECRET_ID:
    value: ""
    description: "Vault AppRole Secret ID"
  # 若使用Vault Token相关逻辑,需额外定义以下变量
  DEPLOYMENT_VAULT_TOKEN_ENABLED: "false"
  VAULT_SIDECAR_TOKEN_REQUIRED: "false"

3. 复用目标脚本

可以选择在现有create_approle job中整合脚本,或者创建独立job拆分执行,以下是两种实现方式:

方式一:在现有job中整合脚本

修改主流水线的create_approle job,调整镜像以满足工具依赖,并引入目标脚本:

create_approle:
  stage: deploy
  # 改用deploy.yml中使用的镜像,确保包含kubectl、yq等工具
  image: alpine/helm:3.9.4
  before_script:
    - echo "Setting up kubeconfig..."
    # 配置kubeconfig(若common/.deploy.yml未包含该逻辑)
    - mkdir -p ~/.kube/
    - echo $KUBE_CONFIG_FILE | tr -d ' ' | base64 -d > ~/.kube/config
    - chmod go-r ~/.kube/config
    # 安装脚本依赖的工具(若镜像未自带)
    - apk add --no-cache kubectl yq
  script:
    - echo "test"  # 保留原有逻辑
    # 调用.create-namespace脚本
    - !reference [.create-namespace, script]
    # 调用.copy-approle脚本
    - !reference [.copy-approle, script]

方式二:创建独立job执行

若希望拆分步骤,可新增两个独立job,并通过needs控制执行顺序:

# 新增:创建命名空间的job
create_namespace:
  stage: deploy
  image: alpine/helm:3.9.4
  before_script:
    - mkdir -p ~/.kube/
    - echo $KUBE_CONFIG_FILE | tr -d ' ' | base64 -d > ~/.kube/config
    - chmod go-r ~/.kube/config
    - apk add --no-cache kubectl
  script:
    - !reference [.create-namespace, script]

# 新增:复制AppRole凭证的job
copy_approle:
  stage: deploy
  needs: [create_namespace]  # 依赖命名空间创建完成
  image: alpine/helm:3.9.4
  before_script:
    - mkdir -p ~/.kube/
    - echo $KUBE_CONFIG_FILE | tr -d ' ' | base64 -d > ~/.kube/config
    - chmod go-r ~/.kube/config
    - apk add --no-cache kubectl yq
  script:
    - !reference [.copy-approle, script]

# 保留原有job
create_approle:
  stage: deploy
  image: hashicorp/vault-k8s
  before_script:
    - echo "Setting up kubeconfig..."
  script:
    - |-
       echo "test"

关键注意事项

  • 工具依赖:确保job使用的镜像包含kubectl、yq等脚本所需工具,若镜像缺失,需在before_script中通过包管理器安装。
  • 变量传递:所有脚本依赖的变量必须在主流水线中定义,或通过流水线触发时手动输入/CI/CD变量配置。
  • 权限验证:确保流水线通过KUBE_CONFIG_FILE获得的权限足以执行命名空间创建、Secret读写操作。

内容的提问来源于stack exchange,提问作者Deepak Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:36:15