自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇帶你創(chuàng)建 Tekton 流水線

云計(jì)算
前面我們創(chuàng)建的兩個(gè)任務(wù) test 和 build-and-push 都已經(jīng)完成了,我們還可以創(chuàng)建一個(gè)流水線來將這兩個(gè)任務(wù)組織起來,形成一個(gè)流水線,這里就是我們要使用的 Pipeline 這個(gè) CRD 對(duì)象。

[[406227]]

 前面我們創(chuàng)建的兩個(gè)任務(wù) test 和 build-and-push 都已經(jīng)完成了,我們還可以創(chuàng)建一個(gè)流水線來將這兩個(gè)任務(wù)組織起來,形成一個(gè)流水線,這里就是我們要使用的 Pipeline 這個(gè) CRD 對(duì)象。

創(chuàng)建流水線

比如我們這里的流水線流程為先運(yùn)行 test 任務(wù),如果通過了再執(zhí)行后面的 build-and-push 這個(gè)任務(wù),那么我們可以創(chuàng)建一個(gè)名為 test-pipeline.yaml 的資源對(duì)象,內(nèi)容如下所示:

  1. # test-pipeline.yaml 
  2. apiVersion: tekton.dev/v1beta1 
  3. kind: Pipeline 
  4. metadata: 
  5.   name: test-pipeline 
  6. spec: 
  7.   resources:  # 為 Tasks 提供輸入和輸出資源聲明 
  8.     - name: demo-git 
  9.       type: git 
  10.     - name: harbor-image 
  11.       type: image 
  12.   tasks:  # 添加task到流水線中 
  13.     # 運(yùn)行應(yīng)用測(cè)試 
  14.     - name: test 
  15.       taskRef: 
  16.         name: test 
  17.       resources: 
  18.         inputs: 
  19.           - name: repo # Task 輸入名稱 
  20.             resource: demo-git # Pipeline 資源名稱 
  21.     # 構(gòu)建并推送 Docker 鏡像 
  22.     - name: build-and-push 
  23.       taskRef: 
  24.         name: build-and-push 
  25.       runAfter: 
  26.       - test # 測(cè)試任務(wù)執(zhí)行之后 
  27.       resources: 
  28.         inputs: 
  29.         - name: repo  # 指定輸入的git倉庫資源 
  30.           resource: demo-git 
  31.         outputs:  # 指定輸出的鏡像資源 
  32.         - name: builtImage 
  33.           resource: harbor-image 

首先我們需要定義流水線需要哪些資源,可以是輸入或者輸出的資源,在這里我們只有一個(gè)輸入,那就是命名為 repo 的應(yīng)用程序源碼的 GitHub 倉庫。接下來定義任務(wù),每個(gè)任務(wù)都通過 taskRef 進(jìn)行引用,并傳遞任務(wù)需要的輸入?yún)?shù)。

同樣直接創(chuàng)建這個(gè)資源對(duì)象即可:

  1. $ kubectl apply -f test-pipeline.yaml 
  2. pipeline.tekton.dev/test-pipeline created 

前面我們提到過和通過創(chuàng)建 TaskRun 去觸發(fā) Task 任務(wù)類似,我們可以通過創(chuàng)建一個(gè) PipelineRun 對(duì)象來運(yùn)行流水線。這里我們創(chuàng)建一個(gè)名為 test-pipelinerun.yaml 的 PipelineRun 對(duì)象來運(yùn)行流水線,文件內(nèi)容如下所示:

  1. apiVersion: tekton.dev/v1beta1 
  2. kind: PipelineRun 
  3. metadata: 
  4.   name: test-pipelinerun 
  5. spec: 
  6.   serviceAccountName: build-sa 
  7.   pipelineRef: 
  8.     name: test-pipeline 
  9.   resources: 
  10.   - name: demo-git  # 指定輸入的git倉庫資源 
  11.     resourceRef: 
  12.       name: demo-git 
  13.   - name: harbor-image  # 指定輸出的鏡像資源 
  14.     resourceRef: 
  15.       name: harbor-image 

定義方式和 TaskRun 幾乎一樣,通過 serviceAccountName 屬性指定 ServiceAccount 對(duì)象,pipelineRef 關(guān)聯(lián)流水線對(duì)象。同樣直接創(chuàng)建這個(gè)資源,創(chuàng)建后就會(huì)觸發(fā)我們的流水線任務(wù)了:

  1. $ kubectl apply -f test-pipelinerun.yaml 
  2. pipelinerun.tekton.dev/test-pipelinerun created 
  3. $ github kubectl get pods | grep test-pipelinerun 
  4. test-pipelinerun-build-and-push-62g65-pod-6jqqf   0/4     Init:1/2    0          3s 
  5. test-pipelinerun-test-c4r9m-pod-j7jjd             0/2     Completed   0          12s 
  6. $ tkn pipelinerun describe test-pipelinerun 
  7. Name:              test-pipelinerun 
  8. Namespace:         default 
  9. Pipeline Ref:      test-pipeline 
  10. Service Account:   build-sa 
  11. Timeout:           1h0m0s 
  12. Labels: 
  13.  tekton.dev/pipeline=test-pipeline 
  14.  
  15. 🌡️  Status 
  16.  
  17. STARTED          DURATION     STATUS 
  18. 47 seconds ago   22 seconds   Succeeded 
  19.  
  20. 📦 Resources 
  21.  
  22.  NAME             RESOURCE REF 
  23.  ∙ demo-git       demo-git 
  24.  ∙ harbor-image   harbor-image 
  25.  
  26. ⚓ Params 
  27.  
  28.  No params 
  29.  
  30. 📝 Results 
  31.  
  32.  No results 
  33.  
  34. 📂 Workspaces 
  35.  
  36.  No workspaces 
  37.  
  38. 🗂  Taskruns 
  39.  
  40.  NAME                                      TASK NAME        STARTED          DURATION     STATUS 
  41.  ∙ test-pipelinerun-build-and-push-62g65   build-and-push   38 seconds ago   13 seconds   Succeeded 
  42.  ∙ test-pipelinerun-test-c4r9m             test             46 seconds ago   8 seconds    Succeeded 

到這里證明我們的流水線執(zhí)行成功了。我們將 Tekton 安裝在 Kubernetes 集群上,定義了一個(gè) Task,并通過 YAML 清單和 Tekton CLI 創(chuàng)建 TaskRun 對(duì)其進(jìn)行了測(cè)試。我們創(chuàng)建了由兩個(gè)任務(wù)組成的 Tektok 流水線,第一個(gè)任務(wù)是從 GitHub 克隆代碼并運(yùn)行應(yīng)用程序測(cè)試,第二個(gè)任務(wù)是構(gòu)建一個(gè) Docker 鏡像并將其推送到 Docker Hub 上。

使用 Results 傳遞數(shù)據(jù)

上面我們?cè)跇?gòu)建鏡像的時(shí)候可以看到鏡像的 TAG 我們是寫死的,或者需要在每次執(zhí)行的時(shí)候通過參數(shù)傳遞進(jìn)去,比較麻煩,那么有沒有什么辦法可以自動(dòng)生成鏡像 TAG 呢?比如根據(jù)時(shí)間戳來生成一個(gè)構(gòu)建的ID。

這里我們可以通過定義一個(gè) Task 任務(wù),然后通過 script 腳本去獲取到數(shù)據(jù)后傳入到 results 中去,我們可以把這些 results 數(shù)據(jù)傳遞到流水線中的其他任務(wù)中去,比如我們想要獲取 git commit 的 SHA 值,或者生成一個(gè)隨機(jī)的 ID 來作為鏡像 TAG,比如這里我們創(chuàng)建一個(gè)名為 generate-build-id 的 Task 任務(wù),定義了 get-timestamp 和 get-buildid 兩個(gè) Steps,一個(gè)用于生成時(shí)間戳,一個(gè)用于生成一個(gè)包含基本版本的結(jié)果值,將結(jié)果添加到 results 中去。

  1. # generate-build-id.yaml 
  2. apiVersion: tekton.dev/v1beta1 
  3. kind: Task 
  4. metadata: 
  5.   name: generate-build-id 
  6. spec: 
  7.   description: >- 
  8.     Given a base version, this task generates a unique build id by appending 
  9.     the base-version to the current timestamp
  10.   params: 
  11.     - name: base-version 
  12.       description: Base product version 
  13.       type: string 
  14.       default"1.0" 
  15.   results: 
  16.     - nametimestamp 
  17.       description: Current timestamp 
  18.     - name: build-id 
  19.       description: ID of the current build 
  20.   steps: 
  21.     - name: get-timestamp 
  22.       image: bash:5.0.18 
  23.       script: | 
  24.         #!/usr/bin/env bash 
  25.         ts=`date "+%Y%m%d-%H%M%S"
  26.         echo "Current Timestamp: ${ts}" 
  27.         echo ${ts} | tr -d "\n" | tee $(results.timestamp.path) 
  28.     - name: get-buildid 
  29.       image: bash:5.0.18 
  30.       script: | 
  31.         #!/usr/bin/env bash 
  32.         ts=`cat $(results.timestamp.path)` 
  33.         buildId=$(inputs.params.base-version)-${ts} 
  34.         echo ${buildId} | tr -d "\n" | tee $(results.build-id.path) 

直接創(chuàng)建上面的 Task:

  1. kubectl apply -f generate-build-id.yaml 

創(chuàng)建完成后,現(xiàn)在我們就可以在 Pipeline 中來使用這個(gè) Task 了,用來生成構(gòu)建 ID,修改 test-pipeline.yaml,增加 generate-build-id 任務(wù):

  1. # test-pipeline.yaml 
  2. apiVersion: tekton.dev/v1beta1 
  3. kind: Pipeline 
  4. metadata: 
  5.   name: test-pipeline 
  6. spec: 
  7.   resources:  # 為 Tasks 提供輸入和輸出資源聲明 
  8.     - name: demo-git 
  9.       type: git 
  10.     - name: harbor-image 
  11.       type: image 
  12.   params: 
  13.   - name: image-tag 
  14.     type: string 
  15.   tasks:  # 添加task到流水線中 
  16.     # 運(yùn)行應(yīng)用測(cè)試 
  17.     - name: test 
  18.       taskRef: 
  19.         name: test 
  20.       resources: 
  21.         inputs: 
  22.           - name: repo # Task 輸入名稱 
  23.             resource: demo-git # Pipeline 資源名稱 
  24.     - name: get-build-id 
  25.       taskRef: 
  26.         name: generate-build-id 
  27.       params: 
  28.       - name: base-version 
  29.         value: $(params.image-tag) 
  30.     # 構(gòu)建并推送 Docker 鏡像 
  31.     - name: build-and-push 
  32.       taskRef: 
  33.         name: build-and-push 
  34.       runAfter: 
  35.       - test # 測(cè)試任務(wù)執(zhí)行之后 
  36.       resources: 
  37.         inputs: 
  38.         - name: repo  # 指定輸入的git倉庫資源 
  39.           resource: demo-git 
  40.         outputs:  # 指定輸出的鏡像資源 
  41.         - name: builtImage 
  42.           resource: harbor-image 
  43.       params: 
  44.       - name: imageTag 
  45.         value: "$(tasks.get-build-id.results.build-id)" 

然后在 build-and-push 任務(wù)中通過 "$(tasks.get-build-id.results.build-id)" 獲取構(gòu)建的 ID,將這個(gè) ID 作為參數(shù)傳入任務(wù)中去,所以我們也需要在 build-and-push 任務(wù)中增加 build-id 這個(gè)參數(shù):

  1. # task-build-push.yaml 
  2. apiVersion: tekton.dev/v1beta1 
  3. kind: Task 
  4. metadata: 
  5.   name: build-and-push 
  6. spec: 
  7.   resources: 
  8.     inputs: # 定義輸入資源 
  9.     - name: repo  #輸入資源,就是github的那個(gè)倉庫 
  10.       type: git 
  11.     outputs: # 定義輸出資源 
  12.     - name: builtImage # 輸出鏡像名字 
  13.       type: image 
  14.   params: 
  15.   - name: pathToDockerfile #指明 dockerfile 在倉庫中的哪個(gè)位置 
  16.     type: string 
  17.     default: $(resources.inputs.repo.path)/Dockerfile # repo資源的路徑 
  18.     description: The path to the dockerfile to build 
  19.   - name: pathToContext #指明 dockerfile 在倉庫中的哪個(gè)位置 
  20.     type: string 
  21.     default: $(resources.inputs.repo.path)  # repo資源的路徑 
  22.     description: the build context used by docker daemon 
  23.   - name: imageTag 
  24.     type: string 
  25.     default"v0.2.0" 
  26.     description: the docker image tag 
  27.   steps: 
  28.     - name: build-and-push 
  29.       image: docker:stable 
  30.       script: | 
  31.         #!/usr/bin/env sh 
  32.         docker login harbor.k8s.local 
  33.         docker build -t $(resources.outputs.builtImage.url):$(params.imageTag) -f $(params.pathToDockerfile) $(params.pathToContext) 
  34.         docker push $(resources.outputs.builtImage.url):$(params.imageTag)  # 這邊的參數(shù)都是在 input 和 output 中定義的 
  35.       volumeMounts: 
  36.         - name: dockersock #將docker.sock文件掛載進(jìn)來,使用宿主機(jī)docker daemon 構(gòu)建鏡像 
  37.           mountPath: /var/run/docker.sock 
  38.   volumes: 
  39.     - name: dockersock 
  40.       hostPath: 
  41.         path: /var/run/docker.sock 

然后需要將 builtImage 這個(gè) output 資源的 url 定義中將鏡像 tag 去掉,在 PipelineRun 對(duì)象中新增 image-tag 的參數(shù):

  1. # test-pipelinerun.yaml 
  2. apiVersion: tekton.dev/v1beta1 
  3. kind: PipelineRun 
  4. metadata: 
  5.   name: test-pipelinerun 
  6. spec: 
  7.   serviceAccountName: build-sa 
  8.   pipelineRef: 
  9.     name: test-pipeline 
  10.   resources: 
  11.   - name: demo-git  # 指定輸入的git倉庫資源 
  12.     resourceRef: 
  13.       name: demo-git 
  14.   - name: harbor-image  # 指定輸出的鏡像資源 
  15.     resourceRef: 
  16.       name: harbor-image 
  17.   params: 
  18.   - name: image-tag 
  19.     value: "v0.3.0" 

所有修改完成后,重新執(zhí)行我們的整個(gè)流水線即可。

  1. $ tkn pipelinerun logs test-pipelinerun 
  2. [test : git-source-repo-g68nd] {"level":"info","ts":1623934515.6170688,"caller":"git/git.go:169","msg":"Successfully cloned https://github.com.cnpmjs.org/cnych/tekton-demo @ 5e1e3a1d0f167b9b639df5b802a0f0f81064d21e (grafted, HEAD, origin/master) in path /workspace/repo"
  3. [test : git-source-repo-g68nd] {"level":"info","ts":1623934515.6349964,"caller":"git/git.go:207","msg":"Successfully initialized and updated submodules in path /workspace/repo"
  4.  
  5. [test : run-test] PASS 
  6. [test : run-test] ok   _/workspace/repo 0.002s 
  7.  
  8. [get-build-id : get-timestampCurrent Timestamp: 20210617-125634 
  9. [get-build-id : get-timestamp] 20210617-125634 
  10.  
  11. [get-build-id : get-buildid] v0.3.0-20210617-125634 
  12.  
  13.  
  14. [build-and-push : git-source-repo-v2lhk] {"level":"info","ts":1623934601.68953,"caller":"git/git.go:169","msg":"Successfully cloned https://github.com.cnpmjs.org/cnych/tekton-demo @ 5e1e3a1d0f167b9b639df5b802a0f0f81064d21e (grafted, HEAD, origin/master) in path /workspace/repo"
  15. [build-and-push : git-source-repo-v2lhk] {"level":"info","ts":1623934601.7080255,"caller":"git/git.go:207","msg":"Successfully initialized and updated submodules in path /workspace/repo"
  16.  
  17. [build-and-push : build-and-push] Authenticating with existing credentials... 
  18. [build-and-push : build-and-push] Login Succeeded 
  19. [build-and-push : build-and-push] WARNING! Your password will be stored unencrypted in /root/.docker/config.json. 
  20. [build-and-push : build-and-push] Configure a credential helper to remove this warning. See 
  21. [build-and-push : build-and-push] https://docs.docker.com/engine/reference/commandline/login/#credentials-store 
  22. [build-and-push : build-and-push] 
  23. [build-and-push : build-and-push] Sending build context to Docker daemon  154.1kB 
  24. [build-and-push : build-and-push] Step 1/6 : FROM golang:1.14-alpine 
  25. ...... 
  26. [build-and-push : build-and-push] Successfully built 2358e77bbe0e 
  27. [build-and-push : build-and-push] Successfully tagged harbor.k8s.local/course/tekton-demo:v0.3.0-20210617-125634 
  28. [build-and-push : build-and-push] The push refers to repository [harbor.k8s.local/course/tekton-demo] 
  29. [build-and-push : build-and-push] f9a271a3fb3c: Preparing 
  30. ...... 
  31. [build-and-push : build-and-push] 26ec43d351f2: Pushed 
  32. [build-and-push : build-and-push] v0.3.0-20210617-125634: digest: sha256:68be388e3f85dd10a6689a986eb2f7f7f5a5c89bb03f40c3db3178e0ce242752 size: 2198 
  33.  
  34. [build-and-push : image-digest-exporter-t54fb] {"severity":"INFO","timestamp":"2021-06-17T12:56:46.54052284Z","caller":"logging/config.go:116","message":"Successfully created the logger."
  35. [build-and-push : image-digest-exporter-t54fb] {"severity":"INFO","timestamp":"2021-06-17T12:56:46.541010181Z","caller":"logging/config.go:117","message":"Logging level set to: info"
  36. [build-and-push : image-digest-exporter-t54fb] {"severity":"INFO","timestamp":"2021-06-17T12:56:46.541254959Z","caller":"imagedigestexporter/main.go:59","message":"No index.json found for: builtImage","commit":"7ca5d61"

我們可以看到在 get-build-id 任務(wù)中為我們生成了 v0.3.0-20210617-125634 這樣的鏡像 TAG,最后也通過 results 傳遞到了下面的構(gòu)建任務(wù)中去,鏡像的 TAG 也更新了。

Tekton Catalog

當(dāng)然這些任務(wù)其實(shí)都具有一定的通用性的,為此 Tekton 官方提供了一個(gè) Catalog 的服務(wù),用來專門提供一些通用的任務(wù),比如我們想要獲取 Git Commit 的相關(guān)信息,可以使用 https://artifacthub.io/packages/tekton-task/tekton-catalog-tasks/git-clone 這個(gè) Catalog,文檔中也包含相關(guān)的使用說明。

到這里我們就完成了使用 Tekton 創(chuàng)建 CI/CD 流水線的一個(gè)簡(jiǎn)單示例,不過這個(gè)示例還比較簡(jiǎn)單,接下來我們?cè)偻ㄟ^一個(gè)稍微復(fù)雜點(diǎn)的應(yīng)用來完成我們前面的 Jenkins 流水線。

 

責(zé)任編輯:姜華 來源: k8s技術(shù)圈
相關(guān)推薦

2021-06-26 14:22:34

Tekton流水線Kubernetes

2021-06-28 06:32:46

Tekton Kubernetes Clone

2017-03-02 14:12:13

流水線代碼Clojure

2023-04-02 21:49:10

開源Tekton

2022-07-18 06:05:28

Gitlab流水線

2017-02-28 16:00:45

DevOpsMarkdownreST

2023-05-10 15:08:00

Pipeline設(shè)計(jì)模式

2013-06-06 09:31:52

2017-02-28 15:40:30

Docker流水線Azure

2021-11-08 07:41:16

Go流水線編程

2024-01-07 12:47:35

Golang流水線設(shè)計(jì)模式

2021-04-09 09:45:33

GitOps環(huán)境應(yīng)用程序

2017-03-15 10:08:26

軟件開發(fā)流水線

2022-03-01 13:55:27

TektonKubernetes集群

2022-03-08 08:32:43

Tekton云原生開源

2022-01-26 08:12:42

Jenkins開源流水線

2023-08-18 10:24:52

GitLabCI 流水線

2021-12-24 08:02:48

GitLabCI模板庫流水線優(yōu)化

2023-09-27 08:24:49

2021-05-20 06:57:16

RabbitMQ開源消息
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)