4.3. 使用工作区提供 secret
您可以使用工作区为 secret 提供 Git 存储库和容器存储库身份验证。
您可以在任务中配置指定工作区,指定挂载工作区的路径。运行任务时,将 secret 提供为带有此名称的工作区。当 OpenShift Pipelines 执行任务时,secret 中的信息可供任务使用。
如果您使用工作区提供身份验证 secret,则不需要 secret 的注解。
4.3.1. 使用工作区为 Git 配置 SSH 身份验证
若要让管道从配置了 SSH 密钥的存储库检索资源,您必须为该管道配置基于 SSH 的身份验证。
要为管道配置基于 SSH 的身份验证,请使用 SSH 私钥创建身份验证 secret,在任务中为此 secret 配置命名工作区,并在运行任务时指定 secret。
流程
输入以下命令从现有
.ssh
目录中的文件创建 Git SSH 身份验证 secret:$ oc create secret generic my-github-ssh-credentials \ 1 --from-file=id_ed25519=/home/user/.ssh/id_ed25519 \ 2 --from-file=known_hosts=/home/user/.ssh/known_hosts 3
在任务定义中,为 Git 身份验证配置命名工作区,如
ssh-directory
:工作区的定义示例
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: git-clone spec: workspaces: - name: ssh-directory description: | A .ssh directory with private key, known_hosts, config, etc.
-
在任务步骤中,使用
$(workspaces.<workspace_name>.path)环境变量中的路径
访问目录,例如$(workspaces.ssh-directory.path)
在运行任务时,通过在
tkn task start
命令中包含 the-workspace
参数来指定命名工作区的 secret:$ tkn task start <task_name> --workspace name=<workspace_name>,secret=<secret_name> 1 # ...
- 1
- 将
<workspace_name
> 替换为您配置的工作区的名称,<secret_name
> 替换为您创建的 secret 的名称。
使用 SSH 密钥克隆 Git 存储库进行身份验证的任务示例
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: git-clone
spec:
workspaces:
- name: output
description: The git repo will be cloned onto the volume backing this Workspace.
- name: ssh-directory
description: |
A .ssh directory with private key, known_hosts, config, etc. Copied to
the user's home before git commands are executed. Used to authenticate
with the git remote when performing the clone. Binding a Secret to this
Workspace is strongly recommended over other volume types
params:
- name: url
description: Repository URL to clone from.
type: string
- name: revision
description: Revision to checkout. (branch, tag, sha, ref, etc...)
type: string
default: ""
- name: gitInitImage
description: The image providing the git-init binary that this Task runs.
type: string
default: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.37.0"
results:
- name: commit
description: The precise commit SHA that was fetched by this Task.
- name: url
description: The precise URL that was fetched by this Task.
steps:
- name: clone
image: "$(params.gitInitImage)"
script: |
#!/usr/bin/env sh
set -eu
# This is necessary for recent version of git
git config --global --add safe.directory '*'
cp -R "$(workspaces.ssh-directory.path)" "${HOME}"/.ssh 1
chmod 700 "${HOME}"/.ssh
chmod -R 400 "${HOME}"/.ssh/*
CHECKOUT_DIR="$(workspaces.output.path)/"
/ko-app/git-init \
-url="$(params.url)" \
-revision="$(params.revision)" \
-path="${CHECKOUT_DIR}"
cd "${CHECKOUT_DIR}"
RESULT_SHA="$(git rev-parse HEAD)"
EXIT_CODE="$?"
if [ "${EXIT_CODE}" != 0 ] ; then
exit "${EXIT_CODE}"
fi
printf "%s" "${RESULT_SHA}" > "$(results.commit.path)"
printf "%s" "$(params.url)" > "$(results.url.path)"
- 1
- 脚本会将机密的内容(以文件夹的形式)复制到
${HOME}/.ssh
,这是ssh
搜索凭据的标准文件夹。
运行任务的命令示例
$ tkn task start git-clone --param url=git@github.com:example-github-user/buildkit-tekton --workspace name=output,emptyDir="" --workspace name=ssh-directory,secret=my-github-ssh-credentials --use-param-defaults --showlog
4.3.2. 使用工作区配置容器 registry 身份验证
要使管道从 registry 检索容器镜像,您必须为该 registry 配置身份验证。
要为容器 registry 配置身份验证,请使用 Docker 配置文件创建身份验证 secret,在任务中为此 secret 配置名为 workspace,并在运行任务时指定 secret。
流程
输入以下命令,从现有
config.json
文件创建容器 registry 身份验证 secret,该文件包含身份验证信息:$ oc create secret generic my-registry-credentials \ 1 --from-file=config.json=/home/user/credentials/config.json 2
在任务定义中,为 Git 身份验证配置命名工作区,如
ssh-directory
:工作区的定义示例
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: skopeo-copy spec: workspaces: - name: dockerconfig description: Includes a docker `config.json` # ...
-
在任务步骤中,使用
$(workspaces.<workspace_name>.path)
环境变量中的路径访问目录,如$(workspaces.dockerconfig.path)
。 要运行任务,请在
tkn task start
命令中包含 the-workspace
参数来指定命名工作区的 secret:$ tkn task start <task_name> --workspace name=<workspace_name>,secret=<secret_name> 1 # ...
- 1
- 将
<workspace_name
> 替换为您配置的工作区的名称,<secret_name
> 替换为您创建的 secret 的名称。
使用 Skopeo 从容器存储库复制镜像的示例
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: skopeo-copy spec: workspaces: - name: dockerconfig 1 description: Includes a docker `config.json` steps: - name: clone image: quay.io/skopeo/stable:v1.8.0 env: - name: DOCKER_CONFIG value: $(workspaces.dockerconfig.path) 2 script: | #!/usr/bin/env sh set -eu skopeo copy docker://docker.io/library/ubuntu:latest docker://quay.io/example_repository/ubuntu-copy:latest
运行任务的命令示例
$ tkn task start skopeo-copy --workspace name=dockerconfig,secret=my-registry-credentials --use-param-defaults --showlog
4.3.3. 使用工作区将 secret 限制到特定步骤
当您使用工作区提供身份验证 secret 并在任务中定义工作区时,默认情况下工作区可用于任务中的所有步骤。
要将 secret 限制到特定的步骤,请在任务规格和步骤规格中定义工作区。
流程
在任务规格和步骤规格中添加
workspaces:
定义,如下例所示:任务定义示例,其中只有一个步骤可以访问凭证工作区
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: git-clone-build spec: workspaces: 1 - name: ssh-directory description: | A .ssh directory with private key, known_hosts, config, etc. # ... steps: - name: clone workspaces: 2 - name: ssh-directory # ... - name: build 3 # ...