kustomize로 Tekton 작업의 단계를 재사용하는 방법
14940 단어 cloudnativekubernetestektonkustomize
Tekton
작업을 만드는 것은 정말 재미있습니다! Pod 컨테이너와 유사하고 작동 방식이 개발 및 테스트를 매우 쉽게 만듭니다. 그래도 reviewdog
을 사용할 때와 같이 여러 작업에서 단계를 재사용해야 하는 경우가 있습니다.이 게시물에서는
kustomize
을 사용하여 매우 쉽게 이 작업을 수행하는 방법을 배우고 저장소 danielfbm/tekton-tasks-kustomize
에는 바로 사용할 수 있는 예제가 있습니다.아래와 같이 두 가지 다른 작업
golang-test
과 golangci-lint
에 reviewdog-report
단계를 추가해야 한다고 가정해 보겠습니다.가장 확실한 방법은 단계를 복사하여 붙여넣는 것이지만
n
작업이 있는 더 복잡한 시나리오의 경우 오류가 발생하기 쉽습니다. helm
과 같은 템플릿 엔진을 사용하면 도움이 될 수 있지만 다른 템플릿 엔진을 배우고 해당 작업의 내용을 변경해야 하는 것도 부담이 됩니다. 대신 kustomize
에는 tektoncd/catalog
의 작업을 재활용하면서 이 작업을 더 쉽게 수행할 수 있는 도구 세트가 있습니다.폴더 구조
├── overlays
└── tasks
작업은 작업 파일을 호스팅합니다.
오버레이는 공유 단계 추가와 같은 패치를 호스팅합니다.
작업
작업을 준비하십시오. 이 예에서는
golang-test
및 golangci-lint
을 사용하므로 적절하게 조정하십시오.단편
작업이 준비되면
params
, workspaces
, results
, steps
등과 같이 필요한 모든 추가 항목으로 구성되어야 하는 스니펫을 준비할 시간입니다.spec:
params:
# since we are splitting the steps, the previous step needs to save the output to a file
- name: report-file
default: reportfile
description: Report file with errors
# format of the report file
- name: format
default: golint
description: Format of error input from the task
# reviewdog supports many reporter types
- name: reporter
default: local
description: Reporter type for reviewdog https://github.com/reviewdog/reviewdog#reporters
# reviewdog needs a diff for precise pull request comments
- name: diff
default: git diff FETCH_HEAD
description: Diff command https://github.com/reviewdog/reviewdog#reporters
workspaces:
- name: token
description: |
Workspace which contains a token file for Github Pull Request comments. Must have a token file with the Github API access token
steps:
- name: reviewdog-report
image: golangci/golangci-lint:v1.31-alpine
# both have the same workspace name
workingDir: $(workspaces.source.path)
script: |
#!/bin/sh
set -ue
wget -O - -q https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
export REVIEWDOG_GITHUB_API_TOKEN=$(cat $(workspaces.token.path)/token)
cat $(params.reportfile) | reviewdog -f=$(params.format) -diff="$(params.diff)"
반점
위의 스니펫을 사용하여 패치를 만들 차례입니다. 나는
patch
로 스니펫을 직접 사용해 보았지만 성공하지 못했기 때문에 JSON6902 patch
을 만들기로 결정했습니다.# parameters
- op: add
path: /spec/params/-
value:
name: report-file
default: reportfile
description: Report file with errors
- op: add
path: /spec/params/-
value:
name: format
default: golint
description: Format of error input from the task
- op: add
path: /spec/params/-
value:
name: reporter
default: local
description: Reporter type for reviewdog https://github.com/reviewdog/reviewdog#reporters
- op: add
path: /spec/params/-
value:
name: diff
default: git diff FETCH_HEAD
description: Diff command https://github.com/reviewdog/reviewdog#reporters
# workspaces
- op: add
path: /spec/workspaces/-
value:
name: token
description: |
Workspace which contains a token file for Github Pull Request comments. Must have a token file with the Github API access token
# steps
- op: add
path: /spec/steps/-
value:
name: reviewdog-report
image: golangci/golangci-lint:v1.31-alpine
# both have the same workspace name
workingDir: $(workspaces.source.path)
script: |
#!/bin/sh
set -ue
wget -O - -q https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
export REVIEWDOG_GITHUB_API_TOKEN=$(cat $(workspaces.token.path)/token)
cat $(params.reportfile) | reviewdog -f=$(params.format) -diff="$(params.diff)"
reviewdog-step-patch.yaml
로 저장하고 다음 내용으로 kustomization.yaml
를 만듭니다.bases:
- ../tasks
patches:
- path: ./reviewdog-step-patch.yaml
target:
kind: Task
추가 패치
모든
kustomization.yaml
파일이 올바르게 설정되었는지 확인하고 kustomize build overlays
를 실행해 보십시오. params
, workspaces
및 params
가 추가된 것을 볼 수 있습니다.하지만 기다려! 우리는 여전히 점들을 연결해야 합니다. 가져온 작업을 수정하지 않으면 여전히 작동하지 않습니다.
golangci-lint
작업의 경우 매개변수 $(params.report-file)
에 지정된 대로 결과를 파일에 저장하고 $(params.format)
매개변수의 기본 형식을 golangci-lint
로 변경해야 합니다.golangci-린트
- op: replace
path: /spec/params/11/default
value: golangci-lint
- op: replace
path: /spec/steps/0/script
value: |
golangci-lint run $(params.flags) > $(params.report-file)
파일을
overlays/golangci-lint-patch.yaml
로 저장하고 overlays/kustomization.yaml
에 추가합니다.[...]
- path: ./golangci-lint-patch.yaml
target:
kind: Task
name: golangci-lint
golang 테스트
다음은
golang-test
작업에 대한 변경 사항이며 이를 golint
로 변경합니다.- op: replace
path: /spec/steps/0/script
value: |
if [ ! -e $GOPATH/src/$(params.package)/go.mod ];then
SRC_PATH="$GOPATH/src/$(params.package)"
mkdir -p $SRC_PATH
cp -R "$(workspaces.source.path)/$(params.context)"/* $SRC_PATH
cd $SRC_PATH
fi
golint $(params.packages) > $(params.report-file)
항목을
overlays/kustomization.yaml
에 추가합니다.- path: ./golint-patch.yaml
target:
kind: Task
name: golang-test
접미사
원래 작업을 유지하고 새 작업만 추가하려면 파일에 접미사를 추가
overlays/kustomization.yaml
하면 됩니다.nameSuffix: -review
테스트
kubectl apply -k overlays
또는 kustomize build overlays | kubectl apply -f -
를 사용하여 작업을 Kubernetes 클러스터에 적용합니다.결과 파일 트리는 다음과 같아야 합니다.
├── overlays
│ ├── golangci-lint-patch.yaml
│ ├── golint-patch.yaml
│ ├── kustomization.yaml
│ └── reviewdog-step-patch.yaml
└── tasks
├── golang-test.yaml
├── golangci-lint.yaml
└── kustomization.yaml
새로운
golang-test-review
및 golangci-lint-review
를 즐기십시오.
Reference
이 문제에 관하여(kustomize로 Tekton 작업의 단계를 재사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/danielfbm/how-to-reuse-steps-in-tekton-tasks-4n7b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)