صابر طباطبائی یزدی
صابر طباطبائی یزدی
خواندن ۵ دقیقه·۲ ماه پیش

اتوماتیک سازی wso2 در پروسه ci-cd

من یک سرور wso2 دارم که کانفیگ کردم و و داره کار میکنه اندپوینت که من ساختم یک اندپوینت گراف کیو ال ساختم و منتشر کردم حالا میخواهم در ci سی دی برای هر یک از میکروسرویس هایی که منتشر میشود بیاییم و پس از بالا آمدن هر پروژه در یک پایپ لاین دستی یا اتوماتیک همه میکروسرویس ها را بخوانیم از کانسال consul و سپس فایل گراف کیو ال را دانلود کنیم و سپس درwso2 که کانفیگش در کانسال هست منتشر آپلود کنیم و و سپس ذخیره و انتشار save and دیپلوی یا انتشار نسخه جدید را بزنیم. و نتیجه نسخه جدید را در کانسال در کلید مزبور ذخیره کنیم و ورژن هم تهیه کنیم در گیت از کانسال

ChatGPT said:


برای پیاده‌سازی سناریویی که شما مطرح کردید، یعنی یک فرآیند CI/CD خودکار برای انتشار نسخه‌های جدید GraphQL endpoint در WSO2 و مدیریت این انتشار‌ها با استفاده از ابزارهایی مانند Consul، WSO2 API Manager و Git، می‌توانید از یک پایپ‌لاین خودکار یا دستی استفاده کنید. در این سناریو، فرض می‌کنم شما ازWSO2 API Manager برای مدیریت و انتشار GraphQL APIها استفاده می‌کنید و می‌خواهید بعد از هر میکروسرویس جدیدی که منتشر می‌شود، GraphQL schema آن به صورت اتوماتیک یا دستی در WSO2 آپلود و منتشر شود.

مراحل کلی پیاده‌سازی:

  1. بازیابی اطلاعات میکروسرویس‌ها از Consul:
    Consul اطلاعات میکروسرویس‌های شما را در قالب سرویس‌های ثبت شده نگهداری می‌کند. باید لیستی از میکروسرویس‌ها را از Consul دریافت کنید تا بتوانید با استفاده از آن‌ها کارهای بعدی را انجام دهید.
  2. دانلود فایل GraphQL schema:
    پس از شناسایی میکروسرویس‌های ثبت‌شده، می‌توانید فایل GraphQL schema مربوط به هر میکروسرویس را از منابعی که در Consul ثبت شده‌اند دانلود کنید.
  3. انتشار API در WSO2 API Manager:
    با استفاده از APIهای مدیریتی WSO2، فایل‌های GraphQL را به WSO2 API Manager آپلود کنید و API جدیدی بسازید یا نسخه قبلی را به‌روز کنید.
  4. ذخیره و انتشار API جدید (Save and Deploy):
    پس از انتشار API جدید، باید آن را ذخیره و سپس منتشر کنید تا در دسترس قرار گیرد.
  5. ذخیره اطلاعات API جدید در Consul و Git:
    پس از موفقیت‌آمیز بودن انتشار API، اطلاعات مربوط به نسخه جدید API را در Consul ثبت کنید و آن را در یک ریپازیتوری Git ذخیره و نسخه‌بندی کنید.

جزئیات مراحل:

1. دریافت اطلاعات میکروسرویس‌ها از Consul

از Consul API برای خواندن اطلاعات سرویس‌های ثبت‌شده در Consul استفاده کنید. برای دریافت اطلاعات سرویس‌ها، می‌توانید از این درخواست HTTP استفاده کنید:

bash

Copy code

curl http://localhost:8500/v1/catalog/services

این درخواست یک لیست از تمام سرویس‌های ثبت‌شده در Consul را برمی‌گرداند. پس از آن می‌توانید با جزئیات بیشتری در مورد هر سرویس از طریقConsul API اطلاعات جمع‌آوری کنید.

برای دریافت اطلاعات جزئی یک سرویس خاص:

bash

Copy code

curl http://localhost:8500/v1/catalog/service/<service_name>

2. دانلود فایل GraphQL Schema

پس از دریافت لیست میکروسرویس‌ها از Consul، باید محل دقیق فایل GraphQL Schema هر سرویس را بدانید (این اطلاعات معمولاً می‌تواند به صورت متا‌داده در Consul ثبت شده باشد یا به صورت دستی تنظیم شود). پس از شناسایی محل فایل، می‌توانید از یک دستور curl یا ابزار مشابه برای دانلود فایل استفاده کنید.

مثال:

bash

Copy code

curl http://<service-url>/schema.graphql -o schema.graphql

3. انتشار API در WSO2 API Manager

حالا که فایل‌های GraphQL schema را در اختیار دارید، باید از WSO2 Publisher APIs استفاده کنید تا یک API جدید بسازید یا API قبلی را آپدیت کنید. WSO2 API Manager یک API مدیریت(Publisher API) ارائه می‌دهد که از طریق آن می‌توانید APIهای جدید ایجاد کنید.

  1. ایجاد API جدید (یا آپدیت API موجود):

از این درخواست POST برای ایجاد API جدید استفاده کنید:

bash

Copy code

curl -k -X POST "https://<wso2_host>:9443/api/am/publisher/v2/apis/import-graphql-schema" \

-H "Authorization: Bearer <access_token>" \

-F "file=@schema.graphql" \

-F "additionalProperties={ \

\"name\": \"GraphQLAPI\", \

\"context\": \"/graphql\", \

\"version\": \"v1\", \

\"provider\": \"admin\", \

\"securityScheme\": [\"OAuth2\"] \

}"

در این درخواست، schema.graphql همان فایلی است که در مرحله قبل دانلود کردید.

  1. ذخیره و انتشار (Deploy API):

پس از ایجاد یا به‌روزرسانی API، برای انتشار آن از این درخواست استفاده کنید:

bash

Copy code

curl -k -X POST "https://<wso2_host>:9443/api/am/publisher/v2/apis/change-lifecycle?apiId=<API_ID>&action=Publish" \

-H "Authorization: Bearer <access_token>"

4. ذخیره اطلاعات در Consul و Git

پس از موفقیت‌آمیز بودن انتشار API، می‌توانید اطلاعات مربوط به API جدید (مانند ID یا نسخه) را در Consul ثبت کنید.

برای ثبت اطلاعات در Consul:

bash

Copy code

curl -X PUT --data '{"API_ID": "12345", "version": "v1"}' http://localhost:8500/v1/kv/apis/GraphQLAPI

همچنین می‌توانید یک commit درGit ایجاد کنید که نشان‌دهنده تغییرات جدید در GraphQL schema و نسخه API باشد.

bash

Copy code

git add schema.graphql

git commit -m "Update GraphQL schema for version v1"

git tag v1

git push origin main --tags

ابزارها و تکنولوژی‌های مورد نیاز:

  1. Consul: برای ذخیره‌سازی اطلاعات میکروسرویس‌ها و وضعیت APIها.
  2. WSO2 API Manager Publisher API: برای مدیریت و انتشار APIها به صورت خودکار.
  3. Git: برای نسخه‌بندی تغییرات و مدیریت نسخه‌های API.
  4. Jenkins یا GitLab CI/CD: برای پیاده‌سازی پایپ‌لاین‌های خودکار CI/CD.

پایپ‌لاینCI/CD

در نهایت، شما می‌توانید این مراحل را به عنوان یک پایپ‌لاین CI/CD در Jenkins یا GitLab CI تعریف کنید. این پایپ‌لاین می‌تواند به صورت خودکار (در پاسخ به انتشار یک میکروسرویس جدید) یا به صورت دستی اجرا شود و تمامی مراحل فوق را به ترتیب انجام دهد.

نمونه‌ای از یک پایپ‌لاین Jenkins:

groovy

Copy code

pipeline {

agent any

stages {

stage('Get Services from Consul') {

steps {

script {

def services = sh(script: "curl http://localhost:8500/v1/catalog/services", returnStdout: true).trim()

echo "Services: ${services}"

}

}

}

stage('Download GraphQL Schema') {

steps {

script {

sh 'curl http://<service-url>/schema.graphql -o schema.graphql'

}

}

}

stage('Publish API in WSO2') {

steps {

script {

sh '''curl -k -X POST "https://<wso2_host>:9443/api/am/publisher/v2/apis/import-graphql-schema" \

-H "Authorization: Bearer <access_token>" \

-F "file=@schema.graphql" \

-F "additionalProperties={\"name\": \"GraphQLAPI\", \"context\": \"/graphql\", \"version\": \"v1\", \"provider\": \"admin\"}"'''

}

}

}

stage('Save and Deploy API') {

steps {

script {

sh '''curl -k -X POST "https://<wso2_host>:9443/api/am/publisher/v2/apis/change-lifecycle?apiId=<API_ID>&action=Publish" \

-H "Authorization: Bearer <access_token>"'''

}

}

}

stage('Store in Consul and Git') {

steps {

script {

sh '''curl -X PUT --data '{"API_ID": "12345", "version": "v1"}' http://localhost:8500/v1/kv/apis/GraphQLAPI'''

sh 'git add schema.graphql'

sh 'git commit -m "Update GraphQL schema for version v1"'

sh 'git push origin main'

}

}

}

}

}

این پایپ‌لاین CI/CD تمامی مراحل را از دریافت اطلاعات میکروسرویس‌ها تا انتشار API و ذخیره نسخه جدید را به صورت خودکار انجام می‌دهد.

نتیجه‌گیری

این راه‌حل به شما امکان می‌دهد تا به صورت اتوماتیک یا دستی، پس از هر تغییر در میکروسرویس‌ها، GraphQL schema مربوطه را در WSO2 منتشر کنید، آن را ذخیره و نسخه‌بندی کنید و در نهایت اطلاعات آن را در Consul و Git ذخیره کنید.

wso2consul
برنامه نویس.42ساله. از مدرک MCSD دات نت سال 2002 شروع کردم البته بعد از لیسانس و تمام عمرم رو در مدیریت با ابزار های شیرپوینت و MSPS و CRM و غیره گذراندم.https://zil.ink/sabert
شاید از این پست‌ها خوشتان بیاید