如何在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
相关产品推荐
相关产品推荐

