Tekton Pipeline - jaringan pipa asli Kubernetes


Tekton Pipeline adalah proyek baru yang memungkinkan Anda untuk menjalankan pipa CI / CD menggunakan pendekatan asli Kubernetes. Tekton Pipelines awalnya merupakan bagian dari proyek “Knative build”. Jika Anda ingin tahu lebih banyak tentang proyek ini, saya sangat merekomendasikan mengunjungi situs web mereka, yang tersedia di tautan di sini .


Sebelum kita mulai berbicara tentang apa artinya "Kubernetes-asli" dan bagaimana Tekton Pipeline bekerja, saya ingin mengambil langkah mundur dan menjelaskan secara singkat mengapa menjalankan pipa dalam wadah daripada pada tuan rumah sangat penting dan berguna: Beberapa waktu yang lalu kami mulai mentransfer aplikasi yang kami kerjakan ke wadah. Kami melakukan ini karena manfaat seperti isolasi, dependensi transparan, skalabilitas, dan imutabilitas. Bukankah itu sama berguna untuk pipa CI / CD? Pikirkan "build-host," yang akan menyediakan alat dan dependensi yang diperlukan untuk satu tugas build spesifik. Tentang lingkungan yang akan sama setiap kali diluncurkan dan tidak akan memiliki ketergantungan pada proyek lain, yang dapat menyebabkan masalah. Dan juga, tentang jaringan pipa penskalaan yang mudah. Itulah mengapa kita dapat dan harus menjalankan jaringan pipa kemas!


Sekarang kita telah berbicara secara singkat tentang containerisasi untuk jaringan pipa, mari kita bicara bagaimana proyek Pipa Tekton dengan pendekatan asli Kubernetes dapat membantu:


Tekton Pipeline memungkinkan kita untuk menjalankan pipeline kemas dalam kluster Kubernet yang ada. Ini berarti bahwa kita tidak memerlukan mesin tambahan untuk menjalankan jaringan pipa kita dan, oleh karena itu, kita dapat menggunakan yang sudah ada dengan lebih baik.


Ini bagus, tapi jujur ​​saja, itu tidak membuat Tekton Pipeline unik. Oleh karena itu, Tekton Pipeline melangkah lebih jauh dan menyimpan semua yang terkait dengan jaringan pipa kami di dalam Kubernetes - sebagai sumber daya Kubernetes. Ini memungkinkan kami untuk bekerja dengan konveyor kami, serta dengan sumber daya lainnya. Pikirkan Penyebaran atau Layanan, yang dapat Anda buat dan kelola menggunakan file kubectl dan YAML.


gambar


Mulai dari mana


Seperti disebutkan di atas, Tekton Pipeline terletak di dalam cluster Kubernetes. Ini didasarkan pada 5 Custom Resource Definition (CRD), Deployment, ConfigMaps, dan Layanan. Anda dapat menjalankan perintah berikut untuk memulai:


kubectl apply -f https://storage.googleapis.com/tekton-releases/latest/release.yaml 

Selain sumber daya di atas, ia juga akan membuat Namespace, Kebijakan Keamanan Pod, Akun Layanan dan ClusterRoles. Tekton Pipeline siap untuk digunakan segera setelah semua Pods di Namespace yang baru dibuat (nama standarnya adalah tekton-pipeline) siap.


Tentu saja, Anda dapat melihat file YAML ini dan menyesuaikannya sesuai dengan kebutuhan Anda.


Jika Anda perlu berbagi artefak atau sumber daya saluran pipa lainnya di antara tugas, Anda harus menyiapkan penyimpanan untuk itu. Anda dapat menggunakan PVC, yang akan diminta setiap kali diperlukan (inisialisasi volume dinamis adalah kunci!), Atau penyimpanan gumpalan. Anda akan menemukan informasi lebih lanjut tentang tugas ini di sini .


Pipa pertama


Jadi bagaimana cara kerja Pipa Tekton? Saya akan menjelaskan perbedaan antara Definisi Kustom Sumber Daya Pipa Tekton dalam contoh kecil. Pipeline akan membuat (membangun) aplikasi kecil di Go, membuat gambar yang diperlukan dan kemudian mendorongnya ke dalam Registry. Anda dapat menemukan semua file yang relevan di sini .


Pertama-tama, kita membuat dua definisi PipelineResouce yang akan kita gunakan untuk mendefinisikan repositori Git dan Registry sebagai tujuan akhir sebagai kode sumber. Sumber Daya Pipa bersifat opsional dan karenanya sangat berguna untuk menggunakan jaringan pipa yang sama, tetapi dengan sumber dan tujuan yang berbeda.


 apiVersion: tekton.dev/v1alpha1 kind: PipelineResource metadata: name: git-repo spec: type: git params: - name: revision value: master - name: url value: https://gitlab.com/nmeisenzahl/tekton-demo --- apiVersion: tekton.dev/v1alpha1 kind: PipelineResource metadata: name: image-registry spec: type: image params: - name: url value: registry.gitlab.com/nmeisenzahl/tekton-demo/demo:latest 

Sekarang kita perlu membuat sumber daya Tugas untuk menentukan urutan langkah-langkah dalam pipa kita. Tentu saja, jika perlu, Anda dapat membuat beberapa tugas. Dalam contoh kita, kita akan menggunakan Kaniko untuk membuat Gambar. Dockerfile ini, seperti sumber daya lain untuk aplikasi, terletak di repositori Git.


 apiVersion: tekton.dev/v1alpha1 kind: Task metadata: name: build-docker-image spec: inputs: resources: - name: git-repo type: git params: - name: pathToDockerFile description: Path to Dockerfile default: /workspace/git-repo/Dockerfile - name: pathToContext description: The build context used by Kaniko default: /workspace/git-repo outputs: resources: - name: image-registry type: image steps: - name: build-and-push image: gcr.io/kaniko-project/executor:v0.10.0 env: - name: "DOCKER_CONFIG" value: "/builder/home/.docker/" command: - /kaniko/executor args: - --dockerfile=${inputs.params.pathToDockerFile} - --destination=${outputs.resources.image-registry.url} - --context=${inputs.params.pathToContext} 

Sekarang kita dapat membuat sumber daya TaskRun untuk meluncurkan turunan dari tugas di atas. Namun, dalam contoh ini, kami menggunakan Pipeline , yang dapat kami gunakan untuk menggabungkan beberapa tugas (tugas) secara berturut-turut:


 apiVersion: tekton.dev/v1alpha1 kind: Pipeline metadata: name: demo-pipeline spec: resources: - name: git-repo type: git - name: image-registry type: image tasks: - name: build-docker-image taskRef: name: build-docker-image params: - name: pathToDockerFile value: /workspace/git-repo/Dockerfile - name: pathToContext value: /workspace/git-repo resources: inputs: - name: git-repo resource: git-repo outputs: - name: image-registry resource: image-registry 

Karena kami meletakkan Gambar yang dibuat dalam registri, Anda perlu memastikan bahwa pipa dapat mengotentikasi dengan menetapkan ImagePullSecrets untuk akun layanan yang diinginkan (dalam kasus kami, itu adalah akun layanan - default).


Sekarang kami memiliki semua yang diperlukan untuk meluncurkan pipa. Untuk melakukan ini, kita perlu menentukan definisi terakhir untuk sumber daya PipelineRun :


 apiVersion: tekton.dev/v1alpha1 kind: PipelineRun metadata: name: demo-pipeline-run-1 spec: pipelineRef: name: demo-pipeline resources: - name: git-repo resourceRef: name: git-repo - name: image-registry resourceRef: name: image-registry 

Anda dapat menggunakan kubectl get pipelineruns -o yaml untuk memeriksa status pipa.


Apalagi


Selain proyek Pipa Tekton itu sendiri, ada juga proyek untuk CLI yang membuat bekerja dengan saluran pipa lebih mudah. Anda juga dapat mengatur Dasbor berbasis web untuk melihat dan mengelola jaringan pipa Anda dari browser.


Selain itu, tim yang sama sedang mengerjakan proyek lain yang disebut Pemicu Tekton. Proyek ini cukup baru (komitmen pertama adalah 4 minggu yang lalu) dan masih dalam pengembangan. Pemicu Tekton memungkinkan Anda untuk memanggil Tekton Pipeline berdasarkan “pemicu”. Ini bisa berupa git-commit, git-issues atau webhooks lainnya (kait web). Informasi lebih lanjut tersedia di sini .


Baca juga artikel lain di blog kami:


Source: https://habr.com/ru/post/id481992/


All Articles