CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết blog CFSDN này Các phương pháp triển khai trong nước của CI/CD framework Tekton gốc trên nền tảng đám mây được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.

Tekton là framework gốc đám mây mã nguồn mở CI/CD rất mạnh mẽ và linh hoạt. Cam kết cung cấp các giải pháp CI/CD gốc đám mây được chuẩn hóa và đầy đủ tính năng. [Bài viết này chủ yếu đồng bộ hóa hình ảnh tekton với kho Tencent Cloud thông qua tự động hóa đường ống và triển khai tekton].
Hình ảnh ứng dụng
Kho hình ảnh đám mây của Alibaba thực sự có những hạn chế... Lần này tôi chuyển sang Kho hình ảnh đám mây Tencent;ccr.ccs.tencentyun.com/tektons/dashboard.

Đường ống
Với hành động GitHub
- Đồng bộ hóa hình ảnh và tạo tệp ánh xạ hình ảnh (json):
- Thu thập các tệp ánh xạ hình ảnh dưới dạng tạo phẩm;
- Cái này là một quy trình làm việc cơ bản ĐẾN giúp bạn bắt đầu với Hành động
-
- tên: Nhận hình ảnh Tekton
- môi trường:
- PHIÊN BẢN: v0.29.0
-
- TRÊN:
- xô:
- đường dẫn:
- - '.github/workflows/tekton.yaml'
- - 'tekton/**'
-
- việc làm:
- xây dựng:
- chạy-TRÊN: ubuntu-18.04
- các bước:
- - sử dụng: hành động/kiểm tra@v2
- - tên: xây dựng
- chạy: |
-
- curl https://storage.googleapis.com/tekton-releases/pipeline/previous/${{ env.VERSION }}/release.yaml -o release.yaml
- grep -v "#" phát hành.yaml | grep -v "^$" > release1.yaml ; sed -i 's/\-\-\-/###/g' phát hành1.yaml
- python3 tekton/get_tekton_images.py ${{ secrets.DOCKER_USER}} ${{ secrets.DOCKER_PASSWD}}
- - sử dụng: hành động/tải lên-artifact@v2
- với:
- tên: ${{ env.VERSION }}-tekton-images
- đường dẫn: tekton_images.json

Phân tích tập tin triển khai
1. Tải xuống bản triển khai phát hành yaml,
2. Phân tích hình ảnh trong đối tượng Triển khai,
a.tekton-pipelines-bộ điều khiển 。
b.tekton-pipelines-webhook 。
c.tekton-dashboard(最好tag) 。
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller:v0.29.0@sha256:72f79471f06d096cc53e51385017c9f0f7edbc87379bf415f99d4bd11cf7bc2b
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/kubeconfigwriter:v0.29.0@sha256:6d058f2203b9ab66f538cb586c7dc3b7cc31ae958a4135dd99e51799f24b06c9
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.29.0@sha256:c0b0ed1cd81090ce8eecf60b936e9345089d9dfdb6ebdd2fd7b4a0341ef4f2b9
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint:v0.29.0@sha256:66958b78766741c25e31954f47bc9fd53eaa28263506b262bf2cc6df04f18561
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/nop:v0.29.0@sha256:6a037d5ba27d9c6be32a9038bfe676fb67d2e4145b4f53e9c61fb3e69f06e816
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/imagedigestexporter:v0.29.0@sha256:e38dd0d32253fce5aaf1e501c0bc71facc3720564b7e97055921cc5390d612e0
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/pullrequest-init:v0.29.0@sha256:d28202fb8b33a1d4c05f261ef8dcbcdcf3b469887d4dad256ce91f73c917420e
- gcr.io/google.com/cloudsdktool/cloud-sdk@sha256:27b2c22bf259d9bc1a291e99c63791ba0c27a04d2db0a43241ba0f1f20f4067f
- gcr.io/distroless/base@sha256:aa4fd987555ea10e1a4ec8765da8158b5ffdfef1e72da512c7ede509bc9966c4
- mcr.microsoft.com/powershell:nanoserver@sha256:b6d5ff841b78bdf2dfed7550000fd4f3437385b8fa686ec0f010be24777654d6
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/webhook:v0.29.0@sha256:46d5b90a7f4e9996351ad893a26bcbd27216676ad4d5316088ce351fb2c2c3dd
Viết tập lệnh phân tích dữ liệu bằng Python:
- nhập yaml
- nhập json
- nhập khẩu hệ thống
- nhập khẩu chúng
-
- lớp Tekton:
- def __init__(self, tên_tệp, người_dùng_registry, mật_mật_registry):
- self.yaml_file = tên_tệp
- self.arg_imgs = ["gcr.io/tekton-releases/github.com/tektoncd/dashboard/cmd/dashboard@sha256:95f71a2568ced67ec370b5360f88bec3280601908cac9e62dfbb801114480437"]
- self.split_str = "###"
- tự triển khai = ["bộ điều khiển tekton-pipelines", "tekton-pipelines-webhook"]
- self.kind_type = "Triển khai"
- self.target_registry = "ccr.ccs.tencentyun.com/tektons/"
- self.repos = [ "bộ điều khiển", "kubeconfigwriter", "git-init",
- "điểm vào","không","imagedigestexporter",
- "pullrequest-init", "cloud-sdk", "căn cứ", "powershell", "móc treo"]
- tự.kết quả = []
- self.registry_user = người dùng đăng ký
- self.registry_passwd = mật khẩu đăng ký
-
- def load_yaml(bản thân, dữ liệu):
- nội dung = yaml.trọng tải(dữ liệu)
- trở lại nội dung
-
- def load_json(bản thân, dữ liệu):
- nội dung = json.loads(dữ liệu)
- trở lại nội dung
-
- def get_images(bản thân):
- f = mở(tệp yaml_self, 'r').đọc()
- vì Tôi TRONG f.chia("###")[:-1]:
- thử:
- nội dung = self.load_yaml(i.thay thế("###", ""))
- nếu nội dung["loại"] == loại_loại_bản_thân:
- tên_triển_khai = nội_dung["siêu dữ liệu"]["tên"]
- # Lấy hình ảnh
- nếu triển khai_tên TRONG tự triển khai:
- img = nội dung["đặc tả"]["bản mẫu"]["đặc tả"]["thùng chứa"][0]["hình ảnh"]
- self.arg_imgs.append(img)
- # Lấy hình ảnh trong tham số
- nếu deploy_name == "bộ điều khiển tekton-pipelines":
- arg_img = nội dung["đặc tả"]["bản mẫu"]["đặc tả"]["thùng chứa"][0]["đối số"]
- vì Một TRONG đối số_img:
- nếu như không a.bắt đầu bằng("-"):
- self.arg_imgs.append(a)
- ngoại trừ Ngoại lệ BẰNG Và:
- (các) bản in
- trở lại tự.arg_imgs
-
- def save_json_file(self, dữ liệu, tên_tệp):
- vì Tôi TRONG self.arg_imgs:
- self.result.append({
- "hình ảnh": Tôi,
- "t_image": self.target_registry + i.split("/")[-1].chia("@")[0]
- })
- newdata = json.dumps(self.result, thụt lề=4)
- một =mở(tên_tệp, 'TRONG')
- a.write(dữ liệu mới)
- Một.đóng()
-
- def sync_images(bản thân):
- f = mở("tekton_images.json", 'r').đọc()
- nội dung = self.load_json(f)
- docker_login_cmd = "docker đăng nhập -u {0} -p {1} {2}".định dạng(
- self.registry_user,
- self.registry_passwd,
- self.target_registry.split("/")[0])
- hệ điều hành(docker_login_cmd)
- vì mục TRONG nội dung:
- in("[Lấy hình ảnh] {}".format(mục))
- docker_pull_cmd = "kéo docker {0}".format(mục["hình ảnh"])
- docker_tag_cmd = "thẻ docker {0} {1}".format(mục["hình ảnh"], mục["t_image"])
- docker_push_cmd = "docker đẩy {0}".format(mục["t_image"])
- hệ điều hành(docker_pull_cmd + "&&" + docker_tag_cmd + "&&" + docker_push_cmd )
- in("[GetImagesDone] {}".format(mục))
-
- nếu __name__ == '__chủ yếu__':
- tekton = tekton("release1.yaml", sys.argv[1], sys.argv[2])
- hình ảnh = tekton.get_images()
- tekton.save_json_file(hình ảnh, "tekton_images.json")
- tekton.sync_images()
Tệp ánh xạ hình ảnh.
s_image là tên hình ảnh gốc, t_image là tên hình ảnh mục tiêu; kho hình ảnh của Tencent Cloud được sử dụng ở đây,
- [
- {
- "hình ảnh": "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller:v0.29.0@sha256:72f79471f06d096cc53e51385017c9f0f7edbc87379bf415f99d4bd11cf7bc2b",
- "t_image": "ccr.ccs.tencentyun.com/tektons/controller:v0.29.0"
- },
- {
- "hình ảnh": "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/kubeconfigwriter:v0.29.0@sha256:6d058f2203b9ab66f538cb586c7dc3b7cc31ae958a4135dd99e51799f24b06c9",
- "t_image": "ccr.ccs.tencentyun.com/tektons/kubeconfigwriter:v0.29.0"
- },
- {
- "hình ảnh": "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.29.0@sha256:c0b0ed1cd81090ce8eecf60b936e9345089d9dfdb6ebdd2fd7b4a0341ef4f2b9",
- "t_image": "ccr.ccs.tencentyun.com/tektons/git-init:v0.29.0"
- },
- {
- "hình ảnh": "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint:v0.29.0@sha256:66958b78766741c25e31954f47bc9fd53eaa28263506b262bf2cc6df04f18561",
- "t_image": "ccr.ccs.tencentyun.com/tektons/entrypoint:v0.29.0"
- },
- {
- "hình ảnh": "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/nop:v0.29.0@sha256:6a037d5ba27d9c6be32a9038bfe676fb67d2e4145b4f53e9c61fb3e69f06e816",
- "t_image": "ccr.ccs.tencentyun.com/tektons/nop:v0.29.0"
- },
- {
- "hình ảnh": "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/imagedigestexporter:v0.29.0@sha256:e38dd0d32253fce5aaf1e501c0bc71facc3720564b7e97055921cc5390d612e0",
- "t_image": "ccr.ccs.tencentyun.com/tektons/imagedigestexporter:v0.29.0"
- },
- {
- "hình ảnh": "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/pullrequest-init:v0.29.0@sha256:d28202fb8b33a1d4c05f261ef8dcbcdcf3b469887d4dad256ce91f73c917420e",
- "t_image": "ccr.ccs.tencentyun.com/tektons/pullrequest-init:v0.29.0"
- },
- {
- "hình ảnh": "gcr.io/google.com/cloudsdktool/cloud-sdk@sha256:27b2c22bf259d9bc1a291e99c63791ba0c27a04d2db0a43241ba0f1f20f4067f",
- "t_image": "ccr.ccs.tencentyun.com/tektons/cloud-sdk"
- },
- {
- "hình ảnh": "gcr.io/distroless/base@sha256:aa4fd987555ea10e1a4ec8765da8158b5ffdfef1e72da512c7ede509bc9966c4",
- "t_image": "ccr.ccs.tencentyun.com/tektons/base"
- },
- {
- "hình ảnh": "mcr.microsoft.com/powershell:nanoserver@sha256:b6d5ff841b78bdf2dfed7550000fd4f3437385b8fa686ec0f010be24777654d6",
- "t_image": "ccr.ccs.tencentyun.com/tektons/powershell:nanoserver"
- },
- {
- "hình ảnh": "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/webhook:v0.29.0@sha256:46d5b90a7f4e9996351ad893a26bcbd27216676ad4d5316088ce351fb2c2c3dd",
- "t_image": "ccr.ccs.tencentyun.com/tektons/webhook:v0.29.0"
- },
- {
- "hình ảnh": "gcr.io/tekton-releases/github.com/tektoncd/dashboard/cmd/dashboard@sha256:95f71a2568ced67ec370b5360f88bec3280601908cac9e62dfbb801114480437",
- "t_image": "ccr.ccs.tencentyun.com/tektons/dashboard"
-
- }
- ]
Có thể tải xuống tệp ánh xạ hình ảnh từ trang GitHubActions:

Tải xuống tập lệnh phản chiếu
Phân tích tệp hình ảnh được tạo ở trên, docker pull tải hình ảnh tương ứng về cục bộ,
- nhập json
- nhập khẩu chúng
-
- lớp Tekton:
- định nghĩa __init__(bản thân):
- self.json_file = "tekton_images.json"
- self.target_registry = "ccr.ccs.tencentyun.com/tektons/"
- # self.registry_user = người dùng đăng ký
- # self.registry_passwd = mật khẩu_registry
-
- def load_json(bản thân, dữ liệu):
- nội dung = json.loads(dữ liệu)
- trở lại nội dung
-
- def down_images(bản thân):
- f = mở(tệp self.json_file, 'r').đọc()
- nội dung = self.load_json(f)
-
- # docker_login_cmd = "docker đăng nhập -u {0} -p {1} {2}".định dạng(
- # self.registry_user,
- # self.registry_passwd,
- # self.target_registry.split("/")[0])
- vì mục TRONG nội dung:
- in("[Lấy hình ảnh] {}".format(mục["t_image"]))
- docker_pull_cmd = "kéo docker {0}".format(mục["t_image"])
- # docker_tag_cmd = "thẻ docker {0} {1}".format(mục["t_image"], mục["hình ảnh"].tách ra("@")[0])
- hệ điều hành(docker_pull_cmd + "&&" + docker_tag_cmd )
- in("[GetImagesDone] {}".format(mục))
-
- nếu __name__ == '__chủ yếu__':
- t = Tekton().down_images()
triển khai Tekton
Thay thế hình ảnh trong file triển khai
- Cập nhật hình ảnh trong bản phát hành.yaml theo cách thủ công; sau đó kubectl áp dụng bản phát hành.yaml để triển khai (sẽ có thời gian tối ưu hóa tập lệnh sau này để đạt được bản cập nhật tự động của bản phát hành.yaml)
- Cập nhật hình ảnh theo cách thủ công trong tekton-dashboard-release.yaml sau đó triển khai;
- [root@master ~]# kubectl -n tekton-pipelines lấy pod
- TÊN TRẠNG THÁI SẴN SÀNG KHỞI ĐỘNG LẠI TUỔI
- tekton-dashboard-5c4b89d9-2z8g7 1/1 Đang chạy 0 21m
- tekton-pipelines-controller-b96f647bb-gff69 1/1 Đang chạy 0 13h
- tekton-pipelines-webhook-76bc9c97b9-cd2m4 1/1 Đang chạy 0 13 giờ
Viết một Ingress để hiển thị bảng điều khiển tekton:
- apiVersion: phần mở rộng/v1beta1
- loại: Ingress
- siêu dữ liệu:
- tên: dịch vụ tekton
- không gian tên: tekton-pipelines
- chú thích:
- kubernetes.io/ingress.class: nginx
- nginx.ingress.kubernetes.io/proxy-body-kích cỡ: 256 phút
- đặc điểm kỹ thuật:
- quy tắc:
- - máy chủ: tekton.idevops.site
- http:
- đường dẫn:
- - con đường: /
- phần sau:
- Tên dịch vụ: tekton-dashboard
- dịch vụCổng: 9097
Truy cập trang giao diện người dùng:

Viết đường ống
- Phiên bản api: tekton.dev/v1beta1
- loại: Nhiệm vụ
- siêu dữ liệu:
- tên: tektoncd-task
- đặc điểm kỹ thuật:
- tài nguyên:
- đầu vào:
- - tên: kho lưu trữ
- loại: git
- các bước:
- - tên: chạy thử
- hình ảnh: maven:3-jdk-8
- workingDir: /workspace/repo
- yêu cầu: ["mvn"]
- các đối số: ["lau dọn", "bưu kiện"]
-
- Phiên bản api: tekton.dev/v1alpha1
- loại: PipelineResource
- siêu dữ liệu:
- tên: tektoncd-tài nguyên
- đặc điểm kỹ thuật:
- loại: git
- tham số:
- - tên: địa chỉ
- giá trị: http://192.168.1.200/devops/devops-maven-service.git
- - tên: ôn tập
- giá trị: chủ
-
- Phiên bản api: tekton.dev/v1beta1
- loại: TaskRun
- siêu dữ liệu:
- tên: cdpipeline
- đặc điểm kỹ thuật:
- nhiệm vụRef:
- tên: tektoncd-task
- tài nguyên:
- đầu vào:
- - tên: kho lưu trữ
- tham chiếu tài nguyên:
- tên: tektoncd-tài nguyên
Liên kết gốc: https://mp.weixin.qq.com/s/Rn44lRhaEC4YkUi2dD7TKg.
Cuối cùng, bài viết này về phương pháp triển khai trong nước của khung CI/CD gốc trên đám mây Tekton kết thúc tại đây. Nếu bạn muốn biết thêm về phương pháp triển khai trong nước của khung CI/CD gốc trên nền tảng đám mây Tekton, vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục. duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!