ብዙ የተለያዩ አካባቢዎች ከፈለጉ በጄንኪንስ ውስጥ ፕሮጀክቶችን እንዴት እንደሚሰበስቡ

ብዙ የተለያዩ አካባቢዎች ከፈለጉ በጄንኪንስ ውስጥ ፕሮጀክቶችን እንዴት እንደሚሰበስቡ

ስለ ጄንኪንስ በሀብሬ ላይ ብዙ መጣጥፎች አሉ፣ ግን ጥቂቶች የጄንኪንስ እና ዶከር ወኪሎች እንዴት እንደሚሠሩ ምሳሌዎችን ይገልጻሉ። ሁሉም ታዋቂ የፕሮጀክት ግንባታ መሳሪያዎች እንደ Drone.io, Bitbucket የቧንቧ መስመር, GitLab, GitHub ድርጊቶች እና ሌሎች, ሁሉንም ነገር በመያዣዎች ውስጥ መሰብሰብ ይችላሉ. ግን ስለ ጄንኪንስስ?

ዛሬ ለችግሩ መፍትሄ አለ: ጄንኪንስ 2 አብሮ በመሥራት ጥሩ ነው የዶከር ወኪሎች. በዚህ ጽሑፍ ውስጥ የእኔን ልምድ ማካፈል እና እራስዎ እንዴት ማድረግ እንደሚችሉ ማሳየት እፈልጋለሁ.

ይህንን ችግር ለምን መፍታት ጀመርኩ?

ኩባንያ ውስጥ ስለሆንን ሲትሮኒየም ብዙ የተለያዩ ቴክኖሎጂዎችን ስለምንጠቀም, የተለያዩ የ Node.JS, Gradle, Ruby, JDK እና ሌሎች ስሪቶችን በመገጣጠሚያ ማሽን ላይ ማስቀመጥ አለብን. ግን ብዙ ጊዜ የስሪት ግጭቶችን ማስወገድ አይቻልም. አዎ፣ እንደ nvm፣rvm ያሉ የተለያዩ የስሪት አስተዳዳሪዎች አሉ ከተባለ ትክክል ትሆናለህ፣ነገር ግን ሁሉም ነገር በእነሱ ላይ ለስላሳ አይደለም እና እነዚህ መፍትሄዎች ችግሮች አሉባቸው።

  • ገንቢዎች ለማጽዳት የሚረሱት ትልቅ የሩጫ ጊዜ;
  • በተለያዩ ተመሳሳይ የሩጫ ጊዜ ስሪቶች መካከል ግጭቶች አሉ;
  • እያንዳንዱ ገንቢ የተለያዩ ክፍሎች ስብስብ ያስፈልገዋል።

ሌሎች ችግሮች አሉ, ግን ስለ መፍትሄው ልንገራችሁ.

ጄንኪንስ በዶከር

ዶከር አሁን በዕድገት ዓለም ውስጥ በሚገባ የተቋቋመ በመሆኑ፣ ማንኛውም ነገር ማለት ይቻላል ዶከርን በመጠቀም ሊሠራ ይችላል። የእኔ መፍትሄ ጄንኪንስ በዶከር ውስጥ እንዲኖር እና ሌሎች የዶከር ኮንቴይነሮችን ማስኬድ መቻል ነው። ይህ ጥያቄ በ 2013 በአንቀጹ ውስጥ መመለስ ጀመረ ።Docker አሁን በ Docker ውስጥ መሮጥ ይችላል።".

በአጭሩ Docker እራሱን በሚሰራ መያዣ ውስጥ መጫን እና ፋይሉን መጫን ብቻ ያስፈልግዎታል /var/run/docker.sock.

ለጄንኪንስ የወጣው Dockerfile ምሳሌ ይኸውና።

FROM jenkins/jenkins:lts

USER root

RUN apt-get update && 

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 && 
usermod -aG docker jenkins

RUN curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose 

RUN apt-get clean autoclean && apt-get autoremove —yes && rm -rf /var/lib/{apt,dpkg,cache,log}/

USER jenkins

ስለዚህ, በአስተናጋጅ ማሽን ላይ የዶከር ትዕዛዞችን ሊፈጽም የሚችል Docker መያዣ አግኝተናል.

ማዋቀርን ይገንቡ

ከጥቂት ጊዜ በፊት ጄንኪንስ ደንቦቹን በመጠቀም ደንቦቹን ለመግለጽ እድሉን አግኝቷል ቧንቧው አገባብ፣ ይህም የግንባታ ስክሪፕቱን ለመለወጥ እና በማከማቻው ውስጥ ለማስቀመጥ በጣም ቀላል ያደርገዋል።

ስለዚህ ለግንባታው አስፈላጊ የሆኑትን ሁሉንም ቤተ-መጻሕፍት የያዘ ልዩ Dockerfile በራሱ ማከማቻ ውስጥ እናስቀምጠው። በዚህ መንገድ ገንቢው ራሱ ሊደገም የሚችል አካባቢ ማዘጋጀት ይችላል እና 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የት መግለጽ ይችላሉ:

  • በስም ፖሊሲዎ መሰረት የስብሰባ መያዣ ስም;
  • የግንባታውን ኮንቴይነር ለማስኬድ የሚያስፈልጉ ክርክሮች, በእኛ ሁኔታ አሁን ያለውን ማውጫ እንደ መያዣው ውስጥ እንደ ማውጫ እንጭናለን.

እና ቀድሞውኑ በግንባታ ደረጃዎች ውስጥ በ Docker የግንባታ ወኪል ውስጥ የትኛዎቹ ትዕዛዞች እንደሚተገበሩ እንጠቁማለን። ይህ ማንኛውም ነገር ሊሆን ይችላል፣ ስለዚህ እኔም አፕሊኬሽን ማሰማራትን አስጀምሬያለሁ።

ከዚህ በታች ቀላል Node.JS መተግበሪያ ሊገነባ የሚችለውን አጠቃላይ ጄንኪንስፋይል ማሳየት እፈልጋለሁ።

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.

ይህንን ጽሑፍ በሚጽፉበት ጊዜ ፕለጊን ተጠቅመው ዋናውን መስቀለኛ መንገድ ላለመጫን በሩቅ አገልጋዮች ላይ ወኪሎችን ስለመጠቀም ውይይት ተነሳ. docker-plugin. ግን ስለዚህ ጉዳይ ወደፊት እናገራለሁ.

ምንጭ: hab.com

አስተያየት ያክሉ