如何在Tekton中从Bitbucket PR触发器获取分支名以克隆代码?
解决Tekton流水线获取PR分支名的方案
无需自定义任务的变量传递方式
Tekton可以通过Task的results结合Pipeline参数传递实现类似Ansible set_fact的变量存储效果,不用单独写自定义任务,直接在现有任务中嵌入API调用即可:
添加API调用步骤提取分支名并输出结果
在任务里新增一个script步骤,调用Bitbucket API获取PR源分支名,将结果写入result字段供后续使用:steps: - name: get-pr-branch image: curlimages/curl:latest script: | #!/bin/sh # 调用Bitbucket API获取PR详情,提取源分支名称 BRANCH_NAME=$(curl -s -u ${BITBUCKET_USER}:${BITBUCKET_TOKEN} \ "https://api.bitbucket.org/2.0/repositories/${pullreq-repo-name}/pullrequests/${pullreq-number}" \ | jq -r '.source.branch.name') # 将分支名写入指定结果路径 echo -n "${BRANCH_NAME}" > $(results.branch-name.path) results: - name: branch-name description: PR的源分支名称 env: - name: BITBUCKET_USER valueFrom: secretKeyRef: name: bitbucket-creds key: username - name: BITBUCKET_TOKEN valueFrom: secretKeyRef: name: bitbucket-creds key: token在Pipeline中传递结果给git-clone任务
定义Pipeline时,将上述任务的branch-name结果作为git-clone的分支参数传入:tasks: - name: fetch-pr-branch taskRef: name: get-pr-branch-task params: - name: pullreq-repo-name value: $(params.pullreq-repo-name) - name: pullreq-number value: $(params.pullreq-number) - name: git-clone taskRef: name: git-clone runAfter: - fetch-pr-branch params: - name: url value: $(params.gitrepo-url) - name: revision value: $(tasks.fetch-pr-branch.results.branch-name)
更简便的替代方案:直接用提交哈希克隆
其实不需要分支名也能获取PR对应的代码,git-clone任务支持直接传入pullreq-sha作为revision参数,克隆后再提取修改文件:
tasks: - name: git-clone taskRef: name: git-clone params: - name: url value: $(params.gitrepo-url) - name: revision value: $(params.pullreq-sha) - name: get-modified-files image: alpine/git:latest runAfter: - git-clone script: | #!/bin/sh cd $(workspaces.source.path) # 获取当前提交与父提交的差异文件列表 git diff --name-only HEAD~1 > modified-files.txt
内容的提问来源于stack exchange,提问作者jeremywat
相关产品推荐
相关产品推荐

