ایجاد پارامترهای پویا در یک کار جنکینز، یا اینکه چگونه کار خود را کاربر پسند کنید

روز خوب، هابر!

امروز می خواهم یکی از روش های استفاده را به اشتراک بگذارم افزونه Active Choices انجام وظیفه در جنکینز یکپارچه ترین و قابل درک ترین برای کاربر.

معرفی

چنین مخففی به عنوان DevOps برای مدت طولانی چیز جدیدی برای جامعه فناوری اطلاعات نیست. برای بسیاری از افراد، عبارت "ساخت DevOps" با نوعی دکمه جادویی مرتبط است، با کلیک کردن، کد برنامه به طور خودکار به یک برنامه کاربردی مستقر و آزمایش شده تبدیل می شود (در واقع پیچیده تر است، اما ما از همه فرآیندها انتزاعی می کنیم).

بنابراین، ما دستور ساخت چنین دکمه جادویی را دریافت کردیم تا مدیران بتوانند با یک کلیک برنامه را اجرا کنند. انواع مختلفی از اجرای این کار وجود دارد: از نوشتن یک ربات برای هر یک از پیام رسان ها و پایان دادن به توسعه یک برنامه جداگانه. با این وجود، هدف همه اینها یکسان است - راه اندازی مونتاژ و استقرار برنامه تا حد امکان شفاف و راحت باشد.

در مورد ما استفاده خواهیم کرد جنکینز.


ایجاد پارامترهای پویا در یک کار جنکینز، یا اینکه چگونه کار خود را کاربر پسند کنید

کار

یک کار راحت جنکینز ایجاد کنید که مونتاژ و (یا) استقرار میکروسرویس انتخابی یک نسخه خاص را اجرا کند.

ایجاد پارامترهای پویا در یک کار جنکینز، یا اینکه چگونه کار خود را کاربر پسند کنید

داده های ورودی

ما چندین مخزن داریم که حاوی کد منبع میکروسرویس های مختلف است.

تعریف پارامترها

ورودی کار ما باید پارامترهای زیر را دریافت کند:

  1. URL مخزن با کد میکروسرویس که می‌خواهیم هنگام اجرای کار بسازیم و مستقر کنیم.
  2. شناسه commit برای ساخت از.

همانطور که هست

ساده ترین راه برای انجام این کار ایجاد دو پارامتر از نوع String است.

ایجاد پارامترهای پویا در یک کار جنکینز، یا اینکه چگونه کار خود را کاربر پسند کنید

در این حالت، کاربر باید به صورت دستی مسیر مخزن و شناسه commit را وارد کند، که می بینید، خیلی راحت نیست.

ایجاد پارامترهای پویا در یک کار جنکینز، یا اینکه چگونه کار خود را کاربر پسند کنید

همانطور که می شود

حالا بیایید نوع دیگری از پارامترها را امتحان کنیم تا تمام مزایای آن را ببینیم.
بیایید اولین پارامتر را با نوع Choice Parameter ایجاد کنیم، دومی - Active Choices Reactive Reference Parameter. در پارامتر با نوع Choice، به صورت دستی نام مخازن را در قسمت Choices اضافه می کنیم، جایی که کد میکروسرویس های ما ذخیره می شود.

ایجاد پارامترهای پویا در یک کار جنکینز، یا اینکه چگونه کار خود را کاربر پسند کنید

اگر مخاطب این مقاله را دوست داشته باشد، در مقاله بعدی روند پیکربندی وظایف در جنکینز را با استفاده از توضیحات از طریق کد (Configuration as code) شرح خواهم داد. ما نیازی به وارد کردن دستی نام مخازن و ایجاد پارامتر نداریم، همه چیز به طور خودکار اتفاق می افتد (کد ما لیست مخازن را از SCM دریافت می کند و با این لیست یک پارامتر ایجاد می کند).

مقادیر پارامتر دوم بسته به مقداری که پارامتر اول می گیرد (test1 یا test2) به صورت پویا پر می شود، زیرا هر مخزن لیستی از تعهدات خاص خود را دارد.

پارامتر مرجع واکنش فعال Active Choices دارای فیلدهای زیر برای پر کردن است:

  1. نام - نام پارامتر
  2. خط - کدی که هر بار که مقدار پارامتر از قسمت پارامتر Referenced تغییر می کند (در مورد ما، زمانی که بین test1 و test2 را انتخاب می کنیم) اجرا می شود.
  3. توضیحات: - شرح مختصری از پارامتر
  4. نوع انتخاب - نوع شی برگردانده شده توسط اسکریپت (در مورد ما، کد html را برمی گردانیم).
  5. پارامتر ارجاع شده – نام پارامتری که با تغییر مقدار آن کد از قسمت Script اجرا می شود.

ایجاد پارامترهای پویا در یک کار جنکینز، یا اینکه چگونه کار خود را کاربر پسند کنید

بیایید مستقیماً به پر کردن مهمترین فیلد در این پارامتر ادامه دهیم. به ما دو نوع پیاده سازی برای انتخاب پیشنهاد می شود: استفاده اسکریپت گرووی یا اسکریپت اسکریپتلر.
ما اولین مورد را انتخاب می کنیم، زیرا Scriptler فقط یک افزونه است که اسکریپت هایی را که قبلاً نوشته اید ذخیره می کند و به شما امکان می دهد بدون کپی پیست مجدد از آنها در کارهای دیگر استفاده کنید.

کد Groovy برای دریافت تمام تعهدات از یک مخزن انتخابی:

AUTH = "логин и пароль в Base64"                           
GIT_URL = "url до вашей SCM (https://bitbucket.org/)"                       
PROJECT_NAME = "имя проектной области, где находятся репозитории"

def htmlBuild() {
    html = """
            <html>
            <head>
            <meta charset="windows-1251">
            <style type="text/css">
            div.grayTable {
            text-align: left;
            border-collapse: collapse;
            }
            .divTable.grayTable .divTableCell, .divTable.grayTable .divTableHead {
            padding: 0px 3px;
            }
            .divTable.grayTable .divTableBody .divTableCell {
            font-size: 13px;
            }
            </style>
            </head>
            <body>
        """

    def commitOptions = ""
    getCommitsForMicroservice(MICROSERVICE_NAME).each {
        commitOptions += "<option style='font-style: italic' value='COMMIT=${it.getKey()}'>${it}</option>"
    }
    html += """<p style="display: inline-block;">
        <select id="commit_id" size="1" name="value">
            ${commitOptions}
        </select></p></div>"""

    html += """
            </div>
            </div>
            </div>
            </body>
            </html>
         """
    return html
}

def getCommitsForMicroservice(microserviceRepo) {
    def commits = [:]
    def endpoint = GIT_URL + "/rest/api/1.0/projects/${PROJECT_NAME}/repos/${microserviceRepo}/commits"
    def conn = new URL(endpoint).openConnection()
    conn.setRequestProperty("Authorization", "Basic ${AUTH}")
    def response = new groovy.json.JsonSlurper().parseText(conn.content.text)
    response.values.each {
        commits.put(it.displayId, it.message)
    }
    return commits
}

return htmlBuild()

بدون وارد شدن به جزئیات، این کد نام میکروسرویس (MICROSERVICE_NAME) را به عنوان ورودی دریافت می کند، درخواستی را به بیت بکت (روش getCommitsForMicroservice) با استفاده از API خود و دریافت شناسه و پیام commit تمام commit ها برای میکروسرویس داده شده.
همانطور که قبلا ذکر شد، این کد باید html که در صفحه نمایش داده می شود را برگرداند ساخت با پارامترها در جنکینز، بنابراین تمام مقادیر دریافتی از Bitbucket را در یک لیست قرار می دهیم و آنها را به انتخاب اضافه می کنیم.

پس از انجام تمام مراحل باید به چنین صفحه زیبایی دست پیدا کنیم ساخت با پارامترها.

اگر میکروسرویس test1 را انتخاب کردید:

ایجاد پارامترهای پویا در یک کار جنکینز، یا اینکه چگونه کار خود را کاربر پسند کنید

اگر میکروسرویس test2 را انتخاب کردید:

ایجاد پارامترهای پویا در یک کار جنکینز، یا اینکه چگونه کار خود را کاربر پسند کنید

موافق باشید که تعامل کاربر با کار شما به این روش بسیار راحت تر از کپی کردن آدرس اینترنتی و جستجوی شناسه commit مورد نیاز است.

PS این مقاله یک مثال بسیار ساده است که ممکن است در این شکل کاربرد عملی نداشته باشد، زیرا مونتاژها پارامترهای بسیار متفاوت تری دارند، اما هدف این مقاله نشان دادن نحوه کار ابزار بود، نه ارائه راه حل کاری.

PSS همانطور که قبلاً نوشتم، اگر این مقاله مفید باشد، مقاله بعدی در مورد آن خواهد بود پیکربندی پویا وظایف جنکینز از طریق کد.

منبع: www.habr.com

اضافه کردن نظر