جينڪنز ۾ منصوبن کي ڪيئن گڏ ڪجي جيڪڏهن توهان کي ضرورت آهي ڪيترن ئي مختلف ماحولن جي

جينڪنز ۾ منصوبن کي ڪيئن گڏ ڪجي جيڪڏهن توهان کي ضرورت آهي ڪيترن ئي مختلف ماحولن جي

جينڪنز بابت هيبري تي ڪيترائي مضمون آهن، پر ڪجھ مثال بيان ڪن ٿا ته ڪيئن جينڪنز ۽ ڊاڪر ايجنٽ ڪم ڪن ٿا. تمام مشهور پروجيڪٽ ٺاهڻ وارو اوزار جهڙوڪ ڊرون.io, بٽ بڪ پائپ لائن, 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 ڪنٽينر مليو آهي جيڪو عمل ڪري سگهي ٿو Docker ڪمانڊ ميزبان مشين تي.

ٺاھ جوڙ

گهڻو وقت اڳ جينڪنز کي ان جي ضابطن کي استعمال ڪندي بيان ڪرڻ جو موقعو مليو پائپ لائن نحو، جيڪو بلڊ اسڪرپٽ کي تبديل ڪرڻ ۽ ان کي مخزن ۾ ذخيرو ڪرڻ بلڪل آسان بڻائي ٿو.

تنهن ڪري اچو ته هڪ خاص Dockerfile پاڻ کي مخزن ۾ رکون، جنهن ۾ سڀني لائبريرين جي تعمير لاء ضروري هوندي. هن طريقي سان، ڊولپر پاڻ هڪ ٻيهر قابل ماحول تيار ڪري سگهي ٿو ۽ ميزبان تي Node.JS جي مخصوص ورزن کي نصب ڪرڻ لاء OPS کان پڇڻ جي ضرورت نه هوندي.

FROM node:12.10.0-alpine

RUN npm install yarn -g

هي تعمير ٿيل تصوير اڪثر Node.JS ايپليڪيشنن لاءِ موزون آهي. ڇا جيڪڏهن، مثال طور، توهان کي JVM پروجيڪٽ لاءِ هڪ تصوير جي ضرورت آهي جنهن ۾ سونار اسڪينر شامل آهي؟ توھان آزاد آھيو اجزاء چونڊڻ لاءِ جيڪي توھان کي اسيمبليءَ لاءِ گهربل آھن.

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جتي توھان بيان ڪري سگھو ٿا:

  • توهان جي نالي جي پاليسي مطابق اسيمبلي ڪنٽينر جو نالو؛
  • بلڊ ڪنٽينر کي هلائڻ لاءِ دليلن جي ضرورت آهي، جتي اسان جي صورت ۾ اسان موجوده ڊاريڪٽري کي ڪنٽينر اندر ڊاريڪٽري طور نصب ڪيو.

۽ اڳ ۾ ئي تعمير جي مرحلن ۾ اسان ظاهر ڪيو ٿا ته ڪهڙن حڪمن تي عمل ڪرڻ لاء ڊاکر تعمير ايجنٽ جي اندر. اهو ڪجهه به ٿي سگهي ٿو، تنهن ڪري آئون پڻ جواب ڏيڻ وارو استعمال ڪندي ايپليڪيشن جي ترتيب شروع ڪريان ٿو.

هيٺ مان هڪ عام Jenkinsfile ڏيکارڻ چاهيان ٿو جيڪا هڪ سادي 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. پر مان ان بابت مستقبل ۾ ڳالهائيندس.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو