برنامه نویسی

مقدمه ای بر جنکینز – ابزار CI/CD

جنکینز یک ابزار منبع باز CI/CD است که به طور گسترده در DevOps استفاده می شود. این راهنما شامل نصب Jenkins، استفاده از Secrets در Jenkins و نوشتن یک Jenkinsfile برای کشیدن و فشار دادن یک تصویر Docker به یک Oracle Cloud Container Registry است.

CI/CD چیست؟

بخش مهمی از یک روش توسعه خوب، یک تمرین خوب یکپارچه سازی/توسعه مستمر (CI/CD) است که بر روی استقرار به روز رسانی های برنامه شما برای استفاده عموم تمرکز دارد.

یک خط لوله CI/CD را می توان به دو بخش تقسیم کرد (بدیهی است):

  1. ادغام

به ادغام کد جدید در پایگاه کد مرکزی می پردازد. این شامل بررسی‌ها (بررسی‌های پرز/قالب، بررسی ساخت، آزمایش‌های واحد پایه، قرار گرفتن در معرض مخفی) و مراحل یکپارچه‌سازی با پایگاه کد مانند کشیدن کد خارجی و درخواست بررسی است.

2. گسترش

مواردی مانند ساختن یک تصویر Docker، فشار دادن آن، و بیرون راندن به‌روزرسانی استقرار به روشی ایمن، احتمالاً با استفاده از آزمایش A/B

بسیاری از این موارد مانند آزمایش‌های در حال اجرا تکراری هستند و بنابراین می‌توانند خودکار شوند، مثلاً در هر فشار کد جدید.

وارد جنکینز شوید.

اگر نام GitHub Actions را شنیده اید، جنکینز خواهر سطح پایین تر و منبع باز GitHub Actions است که امکان سفارشی سازی های بسیار بیشتری را فراهم می کند.

نصب جنکینز

Jenkins یک ابزار مستقل است که می‌توانید آن را به‌طور پیش‌فرض در http://localhost:8080 نصب و اجرا کنید.

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

صفحه اصلی جنکینز شما (localhost:8080) تا حدودی شبیه به این است:

عکس صفحه اصلی جنکینز

اجرای یک دستور اولیه Shell در جنکینز

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

از صفحه اصلی، کلیک کنید گزینه جدید > پروژه سبک آزاد (به یاد داشته باشید پروژه خود را نام ببرید).

هنگامی که پروژه را ایجاد کردید و به صفحه پیکربندی رسیدید، به پایین بروید تا مراحل ساخت را پیدا کنید و یک شل را اجرا کنید گام.

مرحله پوسته را در مراحل ساخت اجرا کنید

چیزی شبیه به:

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

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

و کلیک کنید صرفه جویی.

در صفحه پروژه، کلیک کنید اکنون بسازید و ببینید که Build History با بیلد شماره 1 شما ظاهر می شود. روی آن کلیک کنید.

روی build now کلیک کنید

کلیک خروجی کنسول و مشاهده کنید که اکو شما در کنسول چاپ شده است:

hello123 در کنسول بازتاب می شود

ذخیره اسرار

ذخیره اسرار برای تزریق بعداً به ساخت خود در جنکینز آسان است. برای ایجاد یک راز جدید، روی تصویر نمایه خود > اعتبارنامه > (جهانی) > افزودن اعتبارنامه کلیک کنید.

می توانید ترکیب نام کاربری/رمز عبور، اسرار متنی، اسرار فایل و موارد دیگر را اضافه کنید.

بیایید سعی کنیم a اضافه کنیم .env فایل به عنوان نمونه از آنجایی که در مک نمی توانم a را انتخاب کنم .env فایل از Finder، نام آن را به fenv. بیایید به اعتبار یک شناسه بدهیم fd-env-f.

افزودن یک اعتبار .env

و در اینجا، من نام کاربری و رمز عبور ورود به سیستم Oracle Container Registry Docker خود را اضافه می‌کنم، یعنی Token Auth. می توانید در مقاله دیگری درباره استفاده از رجیستری کانتینر بیشتر بخوانید.

افزودن رمز عبور نام کاربری ورود به Docker

یک نمونه فشار کامل Docker با Jenkinsfile

هدف ما برای این بخش آخر درک این موضوع است Jenkinsfile:

// Jenkinsfile
pipeline {
    agent any
    stages {
        stage('Clean workspace') {
            steps {
                cleanWs()
            }
        }
        stage('Git pull after each commit') {
            steps {
                git branch: 'dev', credentialsId: 'fd-git-creds', url: 'https://github.com/farisdurrani/nonexistentrepo'
                echo 'pulled successfully'
            }
        }
        stage('Build and Push Docker Frontend Image') {
            steps {
                withCredentials(
                    [file(credentialsId: 'fd-env-f', variable: 'mapEnvF')]
                ) {
                    script {
                        docker.withRegistry(registryUrl, registryCredential) {
                            // create .env file
                            sh "sudo touch ./frontend/.env"
                            sh "sudo chmod 666 ./frontend/.env"
                            sh "cp \"$mapEnvF\" ./frontend/.env"

                            // build image, push to registry, and remove image
                            image = docker.build(
                                "$frontendImage", 
                                "./frontend"
                                )
                            image.push(tagLatest)
                            sh "docker rmi ${image.id}"
                        }
                    }
                }
            }
        }
    }
    environment {
        tenancyNamespace = 'id8wj7jebvoqh'
        registry = 'iad.ocir.io'
        registryCredential = "fd-docker-oci-container-registry"
        registryUrl = "https://$registry/"
        tagPrefix = "$registry/$tenancyNamespace"
        frontendImage = "$tagPrefix/myapp-f:latest"

        // required to save/re-use Yarn cache across multiple runs
        YARN_GLOBAL_FOLDER = "${JENKINS_HOME}/workspace/.yarn/global"
    }
}
وارد حالت تمام صفحه شوید

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

این فایل کد خط لوله ساخت جنکینز این برنامه است که معمولاً در فهرست اصلی مخزن برنامه ذخیره می شود و به طور معمول نامیده می شود. Jenkinsfile.

این فایل دارای 3 مرحله است که هر مرحله مراحل خاص خود را دارد:

  1. پاک کردن فضای کاری – تمام فایل های ساخت قبلی که در ساخت های قبلی ایجاد شده بودند را حذف کنید
  2. Git pull – کشیدن کد از مخزن
  3. تصویر Docker را بسازید و به رجیستری کانتینر اوراکل فشار دهید

دو مورد اول نسبتاً ساده هستند. توجه داشته باشید که ما از a استفاده می کنیم credentialsId، برای ورود به git repo در Credentials ایجاد شده است.

هدف مرحله سوم ساخت و فشار دادن تصویر داکر در حین تزریق a است .env فایل در تصویر

و بله، باید از Docker داخلی استفاده کنید --build-arg برای انجام این کار پرچم گذاری کنید، اما ما در اینجا بیشتر نگران عملکرد پایه جنکینز هستیم.

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

کپی پیست کردن Jenkinsfile با ورود به یک خط لوله جدید جنکینز (نه یک پروژه فری استایل)، ما یک خط لوله مناسب آماده کرده ایم.

افزودن Jenkinsfile به خط لوله

از طرف دیگر، ممکن است انتخاب کنید که خط لوله جنکینز به a Jenkinsfile با انتخاب در یک مخزن git ذخیره می شود Pipeline script from SCM به عنوان تعریف خط لوله:

اسکریپت خط لوله از SCM

کار را ذخیره و اجرا کنید. در اینجا نمونه ای از ظاهر بسیاری از مشاغل ساخت جنکینز آورده شده است:

بسیاری از جنکینز به عنوان مثال شغلی ایجاد می کنند

مهم: مجوزهای Docker

ممکن است هنگام استفاده از Docker در Jenkins با این مشکل مواجه شوید:

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
وارد حالت تمام صفحه شوید

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

برای حل این مشکل به این پاسخ StackOverflow اشاره می کنم که پیشنهاد می کند هر بار که رایانه شما راه اندازی می شود در ترمینال اصلی خود اجرا کنید:

sudo chmod 666 /var/run/docker.sock
وارد حالت تمام صفحه شوید

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

مهم: " در مقابل ' در جنکینزفایل

یک تمایز قوی بین دو نقل قول وجود دارد " و تک نقل قول ها ' در جنکینزفایل " درون یابی رشته ای را فعال می کند، به عنوان مثال،docker rmi ${image.id} در حالی که ' نمی کند، و باعث می شود رشته خام را بدون جایگزینی به همان شکلی که هست برگرداند.

ساختمان با برنامه زمانبندی

برای اجرای خط لوله ساخت جنکینز در یک زمان بندی با هر تغییر کد، کافی است یک را اضافه کنید نظرسنجی SCM به عنوان مثال، گزینه زیر Build Triggers،

H/30 * * * *
وارد حالت تمام صفحه شوید

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

برای اجرای کار ساخت هر 30 دقیقه. اگر هیچ تغییری در کد راه دور شناسایی نشد، خط لوله اجرا نمی شود.


بیانیه بندر امن
اطلاعات ارائه شده در این کانال/مقاله/داستان صرفاً برای مقاصد اطلاعاتی در نظر گرفته شده است و نمی توان از آن به عنوان بخشی از هیچ قرارداد قراردادی استفاده کرد. محتوا تحویل هیچ ماده، کد یا عملکردی را تضمین نمی کند و نباید تنها مبنای تصمیم گیری خرید باشد. پست های این سایت متعلق به من است و لزوماً منعکس کننده دیدگاه ها یا کارهای Oracle یا Mythics, LLC نیست.

این اثر تحت مجوز Creative Commons Attribution 4.0 بین المللی مجوز دارد.

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

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

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

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