برنامه نویسی

ایجاد خط لوله CI/CD چند محیطی: راهنمای عملی با Tekton و ArgoCD

Summarize this content to 400 words in Persian Lang

مقدمه

راه اندازی خط لوله CI/CD چند محیطی می تواند مشکل باشد. پس از صرف ساعت‌های بی‌شماری برای رفع اشکالات خط لوله در تولید، آموخته‌ام که درست کردن اصول اولیه بسیار مهم است. در این راهنما، من شما را در ساخت یک خط لوله قوی CI/CD با استفاده از Tekton و ArgoCD راهنمایی می‌کنم، چالش‌های واقعی را که با آن‌ها روبرو بودم و نحوه حل آنها به اشتراک می‌گذارم.

چیزی که ما می سازیم

ما یک خط لوله کامل CI/CD راه اندازی می کنیم که:

وقتی تغییرات را فشار می دهیم، به طور خودکار کد ما را می سازد و آزمایش می کند
استقرار در محیط‌های مختلف (dev، مرحله‌بندی، پرود)
اسرار را ایمن مدیریت می کند
شامل مانیتورینگ مناسب و قابلیت های برگشتی است

وقتی کارمان تمام شد، خط لوله ما چگونه خواهد بود:

راه اندازی پیش نیازها

ابتدا بیایید محیط خود را آماده کنیم. شما نیاز خواهید داشت:

یک خوشه Kubernetes (من از نوع برای آزمایش محلی استفاده می کنم)
kubectl نصب شده است
یک حساب GitHub
داکر نصب شده است

بیایید یک خوشه محلی برای آزمایش ایجاد کنیم:

kind create cluster –name cicd-cluster
# Output:
Creating cluster “cicd-cluster” …
✓ Ensuring node image (kindest/node:v1.21.1) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
✓ Joining worker nodes 🚜
Set kubectl context to “kind-cicd-cluster”

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در حال نصب Tekton

اینجا جایی است که من اولین چالش خود را انجام دادم. نصب استاندارد Tekton با خوشه مهربان من کار نمی کرد. در اینجا نحوه رفع آن است:

# First attempt (didn’t work)
kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml

# Error output:
Error from server (InternalError): error when creating “https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml”:
Internal error occurred: failed calling webhook “webhook.pipeline.tekton.dev”

# The fix: Install CRDs first
kubectl apply –filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.notags.yaml

# Verify installation
kubectl get pods -n tekton-pipelines

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی مورد انتظار:

NAME READY STATUS RESTARTS AGE
tekton-pipelines-controller-8954d86c5-hz7tk 1/1 Running 0 45s
tekton-pipelines-webhook-59d7f99cc4-2l54k 1/1 Running 0 45s

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

راه اندازی اولین خط لوله ما

بیایید یک خط لوله اساسی ایجاد کنیم که یک برنامه ساده Node.js را بسازد. ساختار پروژه ما در اینجا است:

./my-app/
├── src/
│ └── app.js
├── tests/
│ └── app.test.js
├── Dockerfile
└── package.json

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اولین وظیفه Tekton خود را برای شبیه سازی مخزن ایجاد کنید:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: git-clone
spec:
workspaces:
– name: output
params:
– name: url
type: string
steps:
– name: clone
image: alpine/git:v2.26.2
script: |
git clone $(params.url) /workspace/source
volumeMounts:
– name: source
mountPath: /workspace/source

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

وقتی برای اولین بار این را اجرا کردم، با یک مشکل رایج روبرو شدم – مشکلات نصب فضای کاری. در اینجا نحوه رفع آن آمده است:

# Create a PersistentVolumeClaim first
kubectl apply -f – <
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: source-pvc
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 1Gi
EOF

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یکپارچه سازی ArgoCD

اکنون بخش جالب می آید – راه اندازی ArgoCD برای مدیریت استقرار ما. ابتدا بیایید آن را نصب کنیم:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# Get the initial admin password
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=”{.data.password}” | base64 -d

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا یک چالش واقعی وجود دارد که من با آن مواجه شدم: ArgoCD برنامه های من را به طور خودکار همگام سازی نمی کرد. راه حل در پیکربندی خط مشی همگام سازی بود:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app-dev
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/yourusername/my-app-config
path: environments/dev
targetRevision: HEAD
destination:
server: https://kubernetes.default.svc
namespace: dev
syncPolicy:
automated:
prune: true # This was missing!
selfHeal: true

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مدیریت تنظیمات محیطی خاص

در اینجا یک ترفند ساده است که برای مدیریت محیط های مختلف یاد گرفتم. به جای حفظ مانیفست های جداگانه، از Kustomize استفاده کنید:

# base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
– deployment.yaml
– service.yaml

# overlays/dev/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
– ../../base
patchesStrategicMerge:
– resources-patch.yaml

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

معیارهای دنیای واقعی

پس از اجرای این خط لوله در شرکت من، در اینجا پیشرفت های واقعی مشاهده شد:

زمان استقرار از 45 دقیقه به 8 دقیقه کاهش یافتاستقرار ناموفق 70 درصد کاهش یافتزمان بازیابی از 2 ساعت به 15 دقیقه بهبود یافته است

در اینجا تصویری از میزان موفقیت استقرار ما ارائه شده است:

مشکلات و راه حل های رایج

مشکل زمان‌بندی خط لوله: ساخت‌های طولانی‌مدت به‌طور مرموزی با شکست مواجه می‌شوند راه‌حل: زمان تنظیم شده در PipelineRun:

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
spec:
timeouts:
pipeline: “1h”
tasks: “30m”

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مشکل ArgoCD خارج از همگام سازی: تغییرات دستی در خوشه راه حل: اجرای اضافه شده:

syncPolicy:
automated:
prune: true
selfHeal: true

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

منابع و مراحل بعدی

اسناد رسمی:

خطوط لوله تکتونراهنمای کاربر ArgoCD

پشتیبانی جامعه:

ArgoCD Slack

به یاد داشته باشید، CI/CD یک سفر است، نه یک مقصد. کوچک شروع کنید، همه چیز را اندازه بگیرید و بر اساس نیازهای تیم خود تکرار کنید.خودکارسازی مبارک! 🚀

مقدمه

راه اندازی خط لوله CI/CD چند محیطی می تواند مشکل باشد. پس از صرف ساعت‌های بی‌شماری برای رفع اشکالات خط لوله در تولید، آموخته‌ام که درست کردن اصول اولیه بسیار مهم است. در این راهنما، من شما را در ساخت یک خط لوله قوی CI/CD با استفاده از Tekton و ArgoCD راهنمایی می‌کنم، چالش‌های واقعی را که با آن‌ها روبرو بودم و نحوه حل آنها به اشتراک می‌گذارم.

چیزی که ما می سازیم

ما یک خط لوله کامل CI/CD راه اندازی می کنیم که:

  • وقتی تغییرات را فشار می دهیم، به طور خودکار کد ما را می سازد و آزمایش می کند
  • استقرار در محیط‌های مختلف (dev، مرحله‌بندی، پرود)
  • اسرار را ایمن مدیریت می کند
  • شامل مانیتورینگ مناسب و قابلیت های برگشتی است

وقتی کارمان تمام شد، خط لوله ما چگونه خواهد بود:

فلوچارت خط لوله تکتون

راه اندازی پیش نیازها

ابتدا بیایید محیط خود را آماده کنیم. شما نیاز خواهید داشت:

  • یک خوشه Kubernetes (من از نوع برای آزمایش محلی استفاده می کنم)
  • kubectl نصب شده است
  • یک حساب GitHub
  • داکر نصب شده است

بیایید یک خوشه محلی برای آزمایش ایجاد کنیم:

kind create cluster --name cicd-cluster
# Output:
Creating cluster "cicd-cluster" ...
 Ensuring node image (kindest/node:v1.21.1) 🖼
 Preparing nodes 📦
 Writing configuration 📜
 Starting control-plane 🕹️
 Installing CNI 🔌
 Installing StorageClass 💾
 Joining worker nodes 🚜
Set kubectl context to "kind-cicd-cluster"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در حال نصب Tekton

اینجا جایی است که من اولین چالش خود را انجام دادم. نصب استاندارد Tekton با خوشه مهربان من کار نمی کرد. در اینجا نحوه رفع آن است:

# First attempt (didn't work)
kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml

# Error output:
Error from server (InternalError): error when creating "https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml": 
Internal error occurred: failed calling webhook "webhook.pipeline.tekton.dev"

# The fix: Install CRDs first
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.notags.yaml

# Verify installation
kubectl get pods -n tekton-pipelines
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی مورد انتظار:

NAME                                           READY   STATUS    RESTARTS   AGE
tekton-pipelines-controller-8954d86c5-hz7tk   1/1     Running   0          45s
tekton-pipelines-webhook-59d7f99cc4-2l54k     1/1     Running   0          45s
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

راه اندازی اولین خط لوله ما

بیایید یک خط لوله اساسی ایجاد کنیم که یک برنامه ساده Node.js را بسازد. ساختار پروژه ما در اینجا است:

./my-app/
├── src/
   └── app.js
├── tests/
   └── app.test.js
├── Dockerfile
└── package.json
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اولین وظیفه Tekton خود را برای شبیه سازی مخزن ایجاد کنید:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: git-clone
spec:
  workspaces:
    - name: output
  params:
    - name: url
      type: string
  steps:
    - name: clone
      image: alpine/git:v2.26.2
      script: |
        git clone $(params.url) /workspace/source
      volumeMounts:
        - name: source
          mountPath: /workspace/source
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

وقتی برای اولین بار این را اجرا کردم، با یک مشکل رایج روبرو شدم – مشکلات نصب فضای کاری. در اینجا نحوه رفع آن آمده است:

# Create a PersistentVolumeClaim first
kubectl apply -f - <
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: source-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
EOF
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یکپارچه سازی ArgoCD

اکنون بخش جالب می آید – راه اندازی ArgoCD برای مدیریت استقرار ما. ابتدا بیایید آن را نصب کنیم:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# Get the initial admin password
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا یک چالش واقعی وجود دارد که من با آن مواجه شدم: ArgoCD برنامه های من را به طور خودکار همگام سازی نمی کرد. راه حل در پیکربندی خط مشی همگام سازی بود:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-dev
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/yourusername/my-app-config
    path: environments/dev
    targetRevision: HEAD
  destination:
    server: https://kubernetes.default.svc
    namespace: dev
  syncPolicy:
    automated:
      prune: true  # This was missing!
      selfHeal: true
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مدیریت تنظیمات محیطی خاص

در اینجا یک ترفند ساده است که برای مدیریت محیط های مختلف یاد گرفتم. به جای حفظ مانیفست های جداگانه، از Kustomize استفاده کنید:

# base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - deployment.yaml
  - service.yaml

# overlays/dev/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
  - ../../base
patchesStrategicMerge:
  - resources-patch.yaml
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

معیارهای دنیای واقعی

پس از اجرای این خط لوله در شرکت من، در اینجا پیشرفت های واقعی مشاهده شد:

زمان استقرار از 45 دقیقه به 8 دقیقه کاهش یافت
استقرار ناموفق 70 درصد کاهش یافت
زمان بازیابی از 2 ساعت به 15 دقیقه بهبود یافته است

در اینجا تصویری از میزان موفقیت استقرار ما ارائه شده است:

میزان موفقیت استقرار

مشکلات و راه حل های رایج

  1. مشکل زمان‌بندی خط لوله: ساخت‌های طولانی‌مدت به‌طور مرموزی با شکست مواجه می‌شوند راه‌حل: زمان تنظیم شده در PipelineRun:
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
spec:
  timeouts:
    pipeline: "1h"
    tasks: "30m"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. مشکل ArgoCD خارج از همگام سازی: تغییرات دستی در خوشه راه حل: اجرای اضافه شده:
syncPolicy:
  automated:
    prune: true
    selfHeal: true
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

منابع و مراحل بعدی

اسناد رسمی:

خطوط لوله تکتون
راهنمای کاربر ArgoCD

پشتیبانی جامعه:

ArgoCD Slack

به یاد داشته باشید، CI/CD یک سفر است، نه یک مقصد. کوچک شروع کنید، همه چیز را اندازه بگیرید و بر اساس نیازهای تیم خود تکرار کنید.
خودکارسازی مبارک! 🚀

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا