如何通过GitLab CI预设变量触发Tekton Pipeline并同步日志到GitLab流水线
从GitLab CI触发Tekton PipelineRun实现方案
前置依赖准备
- 确保GitLab Runner具备AWS EKS集群的访问权限:可通过给Runner关联具备EKS访问权限的IAM角色实现,也可将加密后的kubeconfig配置为GitLab CI/CD变量
- 准备包含
kubectl、aws-cli、Tekton CLI(tkn)的CI运行镜像,可自行打包也可使用公开的兼容镜像
.gitlab-ci.yml 配置示例
stages: - run-tekton-pipeline trigger-tekton: stage: run-tekton-pipeline image: 你打包好的包含kubectl/aws-cli/tkn的镜像地址 variables: # 构建后镜像地址,使用GitLab预定义变量拼接 TARGET_IMAGE: $CI_REGISTRY_IMAGE/$CI_PROJECT_NAME:$CI_COMMIT_SHORT_SHA before_script: # 配置EKS集群访问凭证,替换尖括号内容为你的实际集群配置 - aws eks update-kubeconfig --name <你的EKS集群名称> --region <AWS区域代码> script: # 启动Tekton PipelineRun,直接获取生成的PipelineRun名称 - PR_NAME=$(tkn pipeline start buildpacks-test-pipeline \ --param IMAGE=$TARGET_IMAGE \ --param SOURCE_URL=$CI_PROJECT_URL \ --param SOURCE_REVISION=$CI_COMMIT_SHA \ --workspace name=source-workspace,claimName=<你的源码工作区存储声明名称> \ --workspace name=cache-workspace,claimName=<你的缓存工作区存储声明名称> \ --namespace <Tekton资源所在的K8s命名空间> \ -o name) # 流式输出PipelineRun全量日志,直到运行结束 - tkn pipelinerun logs $PR_NAME -n <命名空间> --follow --all # 读取PipelineRun最终运行状态,同步到GitLab CI流水线状态 - PR_STATUS=$(tkn pipelinerun describe $PR_NAME -n <命名空间> -o jsonpath='{.status.conditions[0].status}') - if [ "$PR_STATUS" != "True" ]; then exit 1; fi
配置说明
- 所有带尖括号
<>的占位内容请替换为你的实际环境配置 - 用到的GitLab预定义变量均为官方内置,无需额外配置:
CI_PROJECT_URL:当前GitLab项目的仓库地址,直接对应Tekton Pipeline的SOURCE_URL参数CI_COMMIT_SHA:当前触发流水线的提交完整SHA值,对应Tekton Pipeline的SOURCE_REVISION参数CI_REGISTRY_IMAGE:GitLab自带容器镜像仓库的项目根地址,可直接用来拼接镜像推送地址,也可替换为第三方镜像仓库地址
- 工作区配置可根据你的实际环境调整,若不需要持久化缓存也可使用
emptyDir类型存储 - 若Pipeline需要指定ServiceAccount等额外配置,可在
tkn pipeline start命令后追加参数或传入自定义PipelineRun YAML
内容的提问来源于stack exchange,提问作者jonashackt
相关产品推荐
相关产品推荐

