This commit is contained in:
병준 박 2025-04-09 01:59:34 +00:00
parent 600cd84190
commit 0f9cd3a26d

View File

@ -1,14 +1,11 @@
---
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: git-clone-checkout
namespace: gitops-ci
spec:
description: >-
These Tasks are Git tasks to work with repositories used by other tasks
in your Pipeline.
workspaces:
- name: output
description: The git repo will be cloned onto the volume backing this Workspace.
@ -32,256 +29,9 @@ spec:
description: |
A workspace containing CA certificates, this will be used by Git to
verify the peer with when fetching or pushing over HTTPS.
params:
- name: repo-url
description: Repository URL to clone from.
type: string
- name: revision
description: Revision to checkout. (branch, tag, sha, ref, etc...)
type: string
default: ""
- name: verbose
description: Log the commands that are executed during `git-clone-checkout`'s operation.
type: string
default: "true"
- name: gitInitImage
description: The image providing the git-init binary that this Task runs.
type: string
default: "bitnami/git:2.48.1-debian-12-r6"
- name: userHome
description: |
Absolute path to the user's home directory.
type: string
default: "/home/git"
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.
- name: committer-date
description: The epoch timestamp of the commit that was fetched by this Task.
steps:
- name: clone-checkout
image: "$(params.gitInitImage)"
env:
- name: HOME
value: "$(params.userHome)"
- name: PARAM_URL
value: $(params.repo-url)
- name: PARAM_REVISION
value: $(params.revision)
- name: PARAM_VERBOSE
value: $(params.verbose)
- name: PARAM_USER_HOME
value: $(params.userHome)
- name: WORKSPACE_OUTPUT_PATH
value: $(workspaces.output.path)
- name: WORKSPACE_SSH_DIRECTORY_BOUND
value: $(workspaces.ssh-directory.bound)
- name: WORKSPACE_SSH_DIRECTORY_PATH
value: $(workspaces.ssh-directory.path)
- name: WORKSPACE_BASIC_AUTH_DIRECTORY_BOUND
value: $(workspaces.basic-auth.bound)
- name: WORKSPACE_BASIC_AUTH_DIRECTORY_PATH
value: $(workspaces.basic-auth.path)
- name: WORKSPACE_SSL_CA_DIRECTORY_BOUND
value: $(workspaces.ssl-ca-directory.bound)
- name: WORKSPACE_SSL_CA_DIRECTORY_PATH
value: $(workspaces.ssl-ca-directory.path)
securityContext:
runAsNonRoot: true
runAsUser: 65532
- name: echo
image: "alpine/git:2.47.2"
script: |
#!/usr/bin/env sh
set -eu
if [ "${PARAM_VERBOSE}" = "true" ] ; then
set -x
fi
if [ "${WORKSPACE_BASIC_AUTH_DIRECTORY_BOUND}" = "true" ] ; then
cp "${WORKSPACE_BASIC_AUTH_DIRECTORY_PATH}/.git-credentials" "${PARAM_USER_HOME}/.git-credentials"
cp "${WORKSPACE_BASIC_AUTH_DIRECTORY_PATH}/.gitconfig" "${PARAM_USER_HOME}/.gitconfig"
chmod 400 "${PARAM_USER_HOME}/.git-credentials"
chmod 400 "${PARAM_USER_HOME}/.gitconfig"
fi
if [ "${WORKSPACE_SSH_DIRECTORY_BOUND}" = "true" ] ; then
cp -R "${WORKSPACE_SSH_DIRECTORY_PATH}" "${PARAM_USER_HOME}"/.ssh
chmod 700 "${PARAM_USER_HOME}"/.ssh
chmod -R 400 "${PARAM_USER_HOME}"/.ssh/*
fi
if [ "${WORKSPACE_SSL_CA_DIRECTORY_BOUND}" = "true" ] ; then
export GIT_SSL_CAPATH="${WORKSPACE_SSL_CA_DIRECTORY_PATH}"
if [ "${PARAM_CRT_FILENAME}" != "" ] ; then
export GIT_SSL_CAINFO="${WORKSPACE_SSL_CA_DIRECTORY_PATH}/${PARAM_CRT_FILENAME}"
fi
fi
git config --global --add safe.directory "${WORKSPACE_OUTPUT_PATH}"
cd "${WORKSPACE_OUTPUT_PATH}"
git clone "${PARAM_URL}" .
git checkout "${PARAM_REVISION}"
RESULT_SHA="$(git rev-parse HEAD)"
EXIT_CODE="$?"
if [ "${EXIT_CODE}" != 0 ] ; then
exit "${EXIT_CODE}"
fi
RESULT_COMMITTER_DATE="$(git log -1 --pretty=%ct)"
printf "%s" "${RESULT_COMMITTER_DATE}" > "$(results.committer-date.path)"
printf "%s" "${RESULT_SHA}" > "$(results.commit.path)"
printf "%s" "${PARAM_URL}" > "$(results.url.path)"
# ---
# apiVersion: tekton.dev/v1beta1
# kind: Task
# metadata:
# name: git-clone-checkout
# namespace: gitops-ci
# labels:
# app.kubernetes.io/version: "0.9"
# annotations:
# tekton.dev/pipelines.minVersion: "0.38.0"
# tekton.dev/categories: Git
# tekton.dev/tags: git
# tekton.dev/displayName: "git clone & checkout"
# tekton.dev/platforms: "linux/amd64,linux/s390x,linux/ppc64le,linux/arm64"
# spec:
# description: >-
# These Tasks are Git tasks to work with repositories used by other tasks
# in your Pipeline.
# The git-clone-checkout Task will clone a repo from the provided url into the
# output Workspace. By default the repo will be cloned into the root of
# your Workspace. You can clone into a subdirectory by setting this Task's
# subdirectory param. This Task also supports sparse checkouts. To perform
# a sparse checkout, pass a list of comma separated directory patterns to
# this Task's sparseCheckoutDirectories param.
# workspaces:
# - name: output
# description: The git repo will be cloned onto the volume backing this Workspace.
# - name: ssh-directory
# optional: true
# 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.
# - name: basic-auth
# optional: true
# description: |
# A Workspace containing a .gitconfig and .git-credentials file. These
# will be copied to the user's home before any git commands are run. Any
# other files in this Workspace are ignored. It is strongly recommended
# to use ssh-directory over basic-auth whenever possible and to bind a
# Secret to this Workspace over other volume types.
# - name: ssl-ca-directory
# optional: true
# description: |
# A workspace containing CA certificates, this will be used by Git to
# verify the peer with when fetching or pushing over HTTPS.
# params:
# - name: repo-url
# description: Repository URL to clone from.
# type: string
# - name: revision
# description: Revision to checkout. (branch, tag, sha, ref, etc...)
# type: string
# default: ""
# - name: verbose
# description: Log the commands that are executed during `git-clone-checkout`'s operation.
# type: string
# default: "true"
# - name: gitInitImage
# description: The image providing the git-init binary that this Task runs.
# type: string
# default: "alpine/git:2.47.2"
# - name: userHome
# description: |
# Absolute path to the user's home directory.
# type: string
# default: "/home/git"
# 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.
# - name: committer-date
# description: The epoch timestamp of the commit that was fetched by this Task.
# steps:
# - name: clone-checkout
# image: "$(params.gitInitImage)"
# env:
# - name: HOME
# value: "$(params.userHome)"
# - name: PARAM_URL
# value: $(params.repo-url)
# - name: PARAM_REVISION
# value: $(params.revision)
# - name: PARAM_VERBOSE
# value: $(params.verbose)
# - name: PARAM_USER_HOME
# value: $(params.userHome)
# - name: WORKSPACE_OUTPUT_PATH
# value: $(workspaces.output.path)
# - name: WORKSPACE_SSH_DIRECTORY_BOUND
# value: $(workspaces.ssh-directory.bound)
# - name: WORKSPACE_SSH_DIRECTORY_PATH
# value: $(workspaces.ssh-directory.path)
# - name: WORKSPACE_BASIC_AUTH_DIRECTORY_BOUND
# value: $(workspaces.basic-auth.bound)
# - name: WORKSPACE_BASIC_AUTH_DIRECTORY_PATH
# value: $(workspaces.basic-auth.path)
# - name: WORKSPACE_SSL_CA_DIRECTORY_BOUND
# value: $(workspaces.ssl-ca-directory.bound)
# - name: WORKSPACE_SSL_CA_DIRECTORY_PATH
# value: $(workspaces.ssl-ca-directory.path)
# securityContext:
# runAsNonRoot: true
# runAsUser: 65532
# script: |
# #!/usr/bin/env sh
# set -eu
# if [ "${PARAM_VERBOSE}" = "true" ] ; then
# set -x
# fi
# if [ "${WORKSPACE_BASIC_AUTH_DIRECTORY_BOUND}" = "true" ] ; then
# cp "${WORKSPACE_BASIC_AUTH_DIRECTORY_PATH}/.git-credentials" "${PARAM_USER_HOME}/.git-credentials"
# cp "${WORKSPACE_BASIC_AUTH_DIRECTORY_PATH}/.gitconfig" "${PARAM_USER_HOME}/.gitconfig"
# chmod 400 "${PARAM_USER_HOME}/.git-credentials"
# chmod 400 "${PARAM_USER_HOME}/.gitconfig"
# fi
# if [ "${WORKSPACE_SSH_DIRECTORY_BOUND}" = "true" ] ; then
# cp -R "${WORKSPACE_SSH_DIRECTORY_PATH}" "${PARAM_USER_HOME}"/.ssh
# chmod 700 "${PARAM_USER_HOME}"/.ssh
# chmod -R 400 "${PARAM_USER_HOME}"/.ssh/*
# fi
# if [ "${WORKSPACE_SSL_CA_DIRECTORY_BOUND}" = "true" ] ; then
# export GIT_SSL_CAPATH="${WORKSPACE_SSL_CA_DIRECTORY_PATH}"
# if [ "${PARAM_CRT_FILENAME}" != "" ] ; then
# export GIT_SSL_CAINFO="${WORKSPACE_SSL_CA_DIRECTORY_PATH}/${PARAM_CRT_FILENAME}"
# fi
# fi
# git config --global --add safe.directory "${WORKSPACE_OUTPUT_PATH}"
# cd "${WORKSPACE_OUTPUT_PATH}"
# git clone "${PARAM_URL}" .
# git checkout "${PARAM_REVISION}"
# # RESULT_SHA="$(git rev-parse HEAD)"
# # EXIT_CODE="$?"
# # if [ "${EXIT_CODE}" != 0 ] ; then
# # exit "${EXIT_CODE}"
# # fi
# # RESULT_COMMITTER_DATE="$(git log -1 --pretty=%ct)"
# # printf "%s" "${RESULT_COMMITTER_DATE}" > "$(results.committer-date.path)"
# # printf "%s" "${RESULT_SHA}" > "$(results.commit.path)"
# # printf "%s" "${PARAM_URL}" > "$(results.url.path)"
echo "Hello from Gitea Task!"