जेनकिंस में परियोजनाओं का निर्माण कैसे करें, यदि आपको विभिन्न वातावरणों की बहुत आवश्यकता है

छवि


जेनकिंस के बारे में हैबे पर बहुत सारे लेख हैं, लेकिन जेनकिंस और डॉक एजेंट के काम के कुछ उदाहरण वर्णित हैं। सभी लोकप्रिय परियोजना निर्माण उपकरण जैसे Drone.io , Bitbucket Pipeline , GitLab , GitHub क्रियाएं और अन्य सब कुछ कंटेनरों में एकत्र कर सकते हैं। लेकिन जेनकिंस के बारे में क्या?


आज समस्या का समाधान है: जेनकिन्स 2 डॉकर एजेंटों के साथ काम करने में बहुत अच्छा है। लेख में मैं अनुभव साझा करना चाहता हूं और दिखाता हूं कि आप इसे खुद कैसे कर सकते हैं।


मैंने इस समस्या का समाधान क्यों किया?


चूंकि हम Citronium में कई अलग-अलग तकनीकों का उपयोग करते हैं, इसलिए हमें असेंबली मशीन पर Node.JS, Gradle, Ruby, JDK और अन्य के विभिन्न संस्करणों को रखना होगा। लेकिन अक्सर संस्करण संघर्ष से बचा नहीं जा सकता। हां, आप सही होंगे यदि आप कहते हैं कि विभिन्न संस्करण प्रबंधक हैं जैसे कि एनवीएम, आरवीएम, लेकिन सब कुछ उनके साथ इतना सहज नहीं है और इन समाधानों में समस्याएं हैं:


  • डेवलपर्स चलाने के लिए भूल जाते हैं कि बड़ी संख्या में रनटाइम;
  • एक ही रनटाइम के विभिन्न संस्करणों के बीच संघर्ष होते हैं;
  • प्रत्येक डेवलपर को घटकों के एक अलग सेट की आवश्यकता होती है।

अन्य समस्याएं हैं, लेकिन मैं आपको समाधान के बारे में बेहतर बताना चाहता हूं।


डॉकटर में जेनकिन्स


चूंकि डॉकटर अब विकास उद्योग में अच्छी तरह से निहित है, लगभग हर चीज को डोकर का उपयोग करके शुरू किया जा सकता है। मेरा समाधान जेनकिन्स के लिए डॉकर में है और अन्य डॉकटर कंटेनरों को चलाने में सक्षम है। यह सवाल 2013 में लेख " डॉकर अब डॉकर के भीतर चला सकता है " में वापस पूछा जाने लगा।


यदि संक्षेप में, काम करने वाले कंटेनर में डॉकर को स्थापित करना और /var/run/docker.sock फ़ाइल माउंट करना /var/run/docker.sock है।


यहाँ एक डॉकरीफाइल उदाहरण है जो जेनकिंस के लिए सामने आया था।


 FROM jenkins/jenkins:lts ARG DOCKER_COMPOSE_VERSION=1.25.0 USER root RUN apt-get update && \ apt-get upgrade -y && \ apt-get -y install apt-transport-https \ ca-certificates \ curl \ gnupg2 \ git \ software-properties-common && \ curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \ add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \ $(lsb_release -cs) \ stable" && \ apt-get update && \ apt-get -y install docker-ce && \ apt-get clean autoclean && apt-get autoremove && rm -rf /var/lib/{apt,dpkg,cache,log}/ RUN curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose RUN usermod -aG docker jenkins && gpasswd -a jenkins docker USER jenkins 

इस प्रकार, हमें एक डॉकर कंटेनर मिला है जो होस्ट मशीन पर डोकर कमांड निष्पादित कर सकता है।


सेटअप बनाएँ


बहुत समय पहले नहीं, जेनकिन्स को पाइपलाइन नियमों का उपयोग करके अपने नियमों का वर्णन करने का अवसर मिला, जो आपको बिल्ड स्क्रिप्ट को बदलने और उसे भंडार में संग्रहीत करने की अनुमति देता है।


तो चलो रिपॉजिटरी में एक विशेष डॉकरफाइल डालते हैं, जिसमें पुस्तकालय के निर्माण के लिए आवश्यक सभी पुस्तकालय होंगे। इस प्रकार, डेवलपर स्वयं एक दोहराए जाने योग्य वातावरण तैयार कर सकता है और OPS को होस्ट में Node.JS का एक निश्चित संस्करण डालने के लिए कहने की आवश्यकता नहीं होगी।


 FROM node:12.10.0-alpine RUN npm install yarn -g 

यह बिल्ड इमेज अधिकांश Node.JS एप्लिकेशन के लिए उपयुक्त है। और अगर, उदाहरण के लिए, आपको सोनार के अंदर शामिल एक स्कैनर के साथ एक जेवीएम परियोजना के लिए एक छवि की आवश्यकता है? आप स्वयं उन घटकों को चुनने के लिए स्वतंत्र हैं जिन्हें आपको बनाने की आवश्यकता है।


 FROM adoptopenjdk/openjdk12:latest RUN apt update \ && apt install -y \ bash unzip wget RUN mkdir -p /usr/local/sonarscanner \ && cd /usr/local/sonarscanner \ && wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip \ && unzip sonar-scanner-cli-3.3.0.1492-linux.zip \ && mv sonar-scanner-3.3.0.1492-linux/* ./ \ && rm sonar-scanner-cli-3.3.0.1492-linux.zip \ && rm -rf sonar-scanner-3.3.0.1492-linux \ && ln -s /usr/local/sonarscanner/bin/sonar-scanner /usr/local/bin/sonar-scanner ENV PATH $PATH:/usr/local/sonarscanner/bin/ ENV SONAR_RUNNER_HOME /usr/local/sonarscanner/bin/ 

हमने बिल्ड माहौल का वर्णन किया है, लेकिन जेनकिंस का इससे क्या लेना-देना है? और जेनकिंस एजेंट ऐसी डॉकर छवियों के साथ काम कर सकते हैं और अंदर निर्माण कर सकते हैं।


 stage("Build project") { agent { docker { image "project-build:${DOCKER_IMAGE_BRANCH}" args "-v ${PWD}:/usr/src/app -w /usr/src/app" reuseNode true label "build-image" } } steps { sh "yarn" sh "yarn build" } } 

agent निर्देश docker संपत्ति का उपयोग करता है, जहाँ आप निर्दिष्ट कर सकते हैं:


  • आपकी नामकरण नीति के अनुसार विधानसभा कंटेनर का नाम;
  • विधानसभा कंटेनर को शुरू करने के लिए आवश्यक तर्क, जहां हमारे मामले में हम वर्तमान निर्देशिका को कंटेनर के अंदर एक निर्देशिका के रूप में माउंट करते हैं।

जेनकींस


और पहले से ही विधानसभा चरणों में हम इंगित करते हैं कि कौन सी असेंबली डॉकर एजेंट के अंदर निष्पादित करने के लिए आदेश देती है। यह कुछ भी कर सकता है, इसलिए मैं भी ansible का उपयोग करके ऐप की तैनाती चलाता हूं


नीचे मैं एक जेनरिक जेनकिंसफाइल दिखाना चाहता हूं जो एक सरल नोड.जेएस एप्लिकेशन का निर्माण कर सकता है।


 def DOCKER_IMAGE_BRANCH = "" def GIT_COMMIT_HASH = "" pipeline { options { buildDiscarder( logRotator( artifactDaysToKeepStr: "", artifactNumToKeepStr: "", daysToKeepStr: "", numToKeepStr: "10" ) ) disableConcurrentBuilds() } agent any stages { stage("Prepare build image") { steps { sh "docker build -f Dockerfile.build . -t project-build:${DOCKER_IMAGE_BRANCH}" } } stage("Build project") { agent { docker { image "project-build:${DOCKER_IMAGE_BRANCH}" args "-v ${PWD}:/usr/src/app -w /usr/src/app" reuseNode true label "build-image" } } steps { sh "yarn" sh "yarn build" } } post { always { step([$class: "WsCleanup"]) cleanWs() } } } 

क्या हुआ था?


इस पद्धति के लिए धन्यवाद, हमने निम्नलिखित समस्याओं को हल किया है:


  • पर्यावरण विधानसभा का कॉन्फ़िगरेशन समय प्रति प्रोजेक्ट 10 - 15 मिनट तक घटाया जाता है;
  • पूरी तरह से अनुप्रयोग विधानसभा का दोहराव वाला वातावरण, क्योंकि इसे स्थानीय कंप्यूटर पर भी इकट्ठा किया जा सकता है;
  • विधानसभा उपकरणों के विभिन्न संस्करणों के साथ कोई संघर्ष नहीं;
  • हमेशा एक साफ कार्यक्षेत्र जो भरा हुआ नहीं है।

समाधान स्वयं सरल और स्पष्ट है और आपको कुछ लाभ प्राप्त करने की अनुमति देता है। हां, सरल निर्माण कमांड की तुलना में प्रवेश सीमा थोड़ी बढ़ गई है, लेकिन अब इस बात की गारंटी है कि इसे हमेशा एकत्र किया जाएगा और डेवलपर स्वयं वह सब कुछ चुन सकता है जो उसकी निर्माण प्रक्रिया के लिए आवश्यक है।


आप उस छवि का भी उपयोग कर सकते हैं जिसे मैंने जेनकिन्स + डोकर एकत्र किया है। सभी स्रोत खुले हैं और rmuhamedgaliev / jenkins_docker पर झूठ है।


लेख के लेखन के दौरान, दूरस्थ सर्वर पर एजेंटों का उपयोग करने के बारे में चर्चा हुई ताकि डॉक-प्लगइन का उपयोग करके मास्टर नोड को लोड न किया जाए। लेकिन मैं भविष्य में इस बारे में बात करूंगा।

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


All Articles