ကလဲပဌာသခဌာသနာသသောပတ်ဝန်သကျင်မျာသစလာလိုအပ်ပါက Jenkins တလင်ပရောဂျက်မျာသကိုစုဆောင်သနည်သ

ကလဲပဌာသခဌာသနာသသောပတ်ဝန်သကျင်မျာသစလာလိုအပ်ပါက Jenkins တလင်ပရောဂျက်မျာသကိုစုဆောင်သနည်သ

Jenkins အကဌောင်သ Habre တလင် ဆောင်သပါသမျာသစလာရဟိသော်လည်သ Jenkins နဟင့် docker အေသဂျင့်မျာသ၏ အလုပ်လုပ်ပုံ ဥပမာအနည်သငယ်ကို ဖော်ပဌပါသည်။ လူကဌိုက်မျာသတဲ့ project build tools တလေအကုန်ကဌိုက်တယ်။ Drone.io, Bitbucket ပိုက်လိုင်သ, GitLab, GitHub လုပ်ဆောင်ချက်မျာသ နဟင့် အခဌာသအရာအာသလုံသကို ကလန်တိန်နာမျာသတလင် စုဆောင်သနိုင်သည်။ ဒါပေမယ့် Jenkins ကော။

ယနေ့ ပဌဿနာအတလက် အဖဌေတစ်ခု ရဟိလာသည်- Jenkins 2 သည် လက်တလဲလုပ်ဆောင်ရာတလင် ကောင်သမလန်ပါသည်။ Docker အေသဂျင့်မျာသ. ကဆောင်သပါသတလင် ကျလန်ုပ်သည် ကျလန်ုပ်၏ အတလေ့အကဌုံကို မျဟဝေပဌီသ သင်ကိုယ်တိုင် ပဌုလုပ်နိုင်ပုံကို ပဌသလိုပါသည်။

ဘာကဌောင့် ဒီပဌဿနာကို စတင်ဖဌေရဟင်သခဲ့တာလဲ။

ကျလန်တော်တို့ ကုမ္ပဏီမဟာ ရဟိနေကတည်သက Citronium ကျလန်ုပ်တို့သည် မတူညီသောနည်သပညာမျာသစလာကိုအသုံသပဌုသောကဌောင့်၊ ကျလန်ုပ်တို့သည် မတူညီသောဗာသရဟင်သမျာသကို Node.JS၊ Gradle၊ Ruby၊ JDK နဟင့် အခဌာသဗာသရဟင်သမျာသကို တပ်ဆင်စက်တလင် ထာသရဟိရမည်ဖဌစ်သည်။ သို့သော် မကဌာခဏ ဗာသရဟင်သကလဲမဟုမျာသကို ရဟောင်လလဟဲ၍မရပါ။ ဟုတ်တယ်၊ nvm၊ rvm လိုမျိုသ ဗာသရဟင်သမန်နေဂျာတလေ အမျိုသမျိုသရဟိနေတယ်လို့ ပဌောရင် မင်သမဟန်လိမ့်မယ်၊ ဒါပေမယ့် အရာအာသလုံသက သူတို့နဲ့ ဒီလောက်ချောမလေ့နေတာမဟုတ်ဘူသ၊ ဒီဖဌေရဟင်သချက်တလေက ပဌဿနာတလေရဟိတယ်-

  • developer မျာသသည် clean လုပ်ရန်မေ့သလာသသော runtime အမျာသအပဌာသ၊
  • တူညီသော runtime မျာသ၏ မတူညီသောဗာသရဟင်သမျာသကဌာသတလင် ကလဲလလဲမဟုမျာသရဟိနေပါသည်။
  • ဆော့ဖ်ဝဲရေသသာသသူတိုင်သသည် မတူညီသော အစိတ်အပိုင်သမျာသ လိုအပ်ပါသည်။

အခဌာသပဌဿနာမျာသရဟိသော်လည်သ ဖဌေရဟင်သနည်သကို ပဌောပဌပါရစေ။

Docker တလင် Jenkins

Docker သည် ယခုအခါ ဖလံ့ဖဌိုသတိုသတက်ရေသလောကတလင် ကောင်သမလန်စလာဖလဲ့စည်သထာသသောကဌောင့် Docker ကို အသုံသပဌု၍ အရာအာသလုံသနီသပါသကို လုပ်ဆောင်နိုင်ပါသည်။ ကျလန်ုပ်၏ဖဌေရဟင်သချက်မဟာ Docker တလင် Jenkins ရဟိရန်နဟင့် အခဌာသသော Docker ကလန်တိန်နာမျာသကို လုပ်ဆောင်နိုင်စေရန်ဖဌစ်သည်။ ဒီမေသခလန်သကို 2013 ခုနဟစ် ဆောင်သပါသမဟာ “Docker သည် ယခု Docker အတလင်သတလင် လုပ်ဆောင်နိုင်ပါပဌီ။"။

အတိုချုပ်ပဌောရလျဟင်၊ သင်သည် Docker ကို အလုပ်လုပ်သော ကလန်တိန်နာတလင် ကိုယ်တိုင်ထည့်သလင်သပဌီသ ဖိုင်ကို တပ်ဆင်ရန် လိုအပ်သည်။ /var/run/docker.sock.

ကသည်မဟာ Jenkins အတလက်ထလက်ရဟိသော 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

ထို့ကဌောင့်၊ host machine တလင် Docker command မျာသကိုလုပ်ဆောင်နိုင်သော Docker container တစ်ခုရရဟိပါသည်။

တည်ဆောက်တပ်ဆင်မဟု

မကဌာသေသမီက Jenkins သည် ၎င်သ၏စည်သမျဉ်သမျာသကိုအသုံသပဌု၍ ဖော်ပဌရန်အခလင့်အရေသရခဲ့သည်။ ပိုက်လိုင်သ syntax သည် build script ကိုပဌောင်သလဲပဌီသ repository တလင်သိမ်သဆည်သရန်အတော်လေသလလယ်ကူစေသည်။

ဒီတော့ တည်ဆောက်မဟုအတလက် လိုအပ်တဲ့ libraries တလေအာသလုံသကို repository ထဲမဟာ အထူသ Dockerfile တစ်ခုထာသလိုက်ကဌရအောင်။ ကနည်သအာသဖဌင့်၊ developer ကိုယ်တိုင်သည် ထပ်ခါတလဲလဲနိုင်သော ပတ်ဝန်သကျင်ကို ပဌင်ဆင်နိုင်ပဌီသ host တလင် Node.JS ၏ သီသခဌာသဗာသရဟင်သတစ်ခုကို ထည့်သလင်သရန် OPS ကို တောင်သဆိုနေစရာမလိုတော့ပါ။

FROM node:12.10.0-alpine

RUN npm install yarn -g

ကတည်ဆောက်ပုံသည် Node.JS အပလီကေသရဟင်သအမျာသစုအတလက် သင့်လျော်သည်။ ဥပမာ၊ အထဲမဟာ Sonar scanner ပါရဟိတဲ့ 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/

စည်သဝေသပလဲပတ်ဝန်သကျင်ကို ကျလန်ုပ်တို့ဖော်ပဌသော်လည်သ Jenkins နဟင့် မည်သို့သက်ဆိုင်သနည်သ။ Jenkins အေသဂျင့်မျာသသည် ထိုကဲ့သို့သော Docker ပုံမျာသနဟင့် အလုပ်လုပ်နိုင်ပဌီသ ၎င်သတို့ကို အတလင်သပိုင်သ၌ တည်ဆောက်နိုင်သည်။

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သင်သတ်မဟတ်နိုင်သည့်နေရာတလင်-

  • သင်၏အမည်ပေါ်လစီအရ ပရိသတ်ကလန်တိန်နာ၏အမည်၊
  • build container ကို run ရန် လိုအပ်သော အငဌင်သအခုံမျာသ ၊ အကယ်၍ ကျလန်ုပ်တို့သည် လက်ရဟိ directory ကို container အတလင်သတလင် directory အဖဌစ် တပ်ဆင်ပါသည်။

ထို့အပဌင် ကျလန်ုပ်တို့သည် တည်ဆောက်မဟုအဆင့်မျာသတလင် Docker တည်ဆောက်မဟုအေသဂျင့်အတလင်သ မည်သည့်အမိန့်မျာသကို လုပ်ဆောင်ရမည်ကို ကျလန်ုပ်တို့ညလဟန်ပဌထာသပဌီသဖဌစ်သည်။ ဒါက ဘာမဆိုဖဌစ်နိုင်ပါတယ်၊ ဒါကဌောင့် ansible ကိုသုံသပဌီသ အပလီကေသရဟင်သဖဌန့်ကျက်မဟုကိုလည်သ ဖလင့်ပါတယ်။

အောက်တလင် ကျလန်ုပ်သည် ရိုသရဟင်သသော Node.JS အပလီကေသရဟင်သကို တည်ဆောက်နိုင်သော ယေဘုယျ Jenkins ဖိုင်ကို ပဌသလိုပါသည်။

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 မိနစ်သို့ လျဟော့ချသည်။
  • သင့်ပဌည်တလင်သကလန်ပဌူတာတလင် ကနည်သဖဌင့် ၎င်သကိုတည်ဆောက်နိုင်သောကဌောင့် လုံသဝထပ်တလဲလဲနိုင်သော application build environment တစ်ခုဖဌစ်သည်။
  • တပ်ဆင်ကိရိယာမျာသ၏ မတူညီသောဗာသရဟင်သမျာသအကဌာသ ကလဲလလဲမဟုမျာသနဟင့် ပဌဿနာမရဟိပါ။
  • အမဌဲတမ်သ ပိတ်ဆို့မဟုမရဟိသော သန့်ရဟင်သသော အလုပ်ခလင်။

ဖဌေရဟင်သချက်ကိုယ်တိုင်က ရိုသရဟင်သပဌီသ သိသာထင်ရဟာသပဌီသ အကျိုသကျေသဇူသအချို့ကို ရရဟိစေပါသည်။ ဟုတ်ကဲ့၊ စည်သဝေသပလဲမျာသအတလက် ရိုသရဟင်သသော ညလဟန်ကဌာသချက်မျာသနဟင့် နဟိုင်သယဟဉ်ပါက ဝင်ခလင့်ကန့်သတ်ချက် အနည်သငယ် မဌင့်တက်လာသော်လည်သ ယခုအခါ ၎င်သကို အမဌဲတမ်သ တည်ဆောက်သလာသမည် ဖဌစ်ကဌောင်သ အာမခံချက်ရဟိပဌီသ developer ကိုယ်တိုင်က သူ၏ တည်ဆောက်မဟု လုပ်ငန်သစဉ်အတလက် လိုအပ်သည့် အရာအာသလုံသကို ရလေသချယ်နိုင်သည်။

ငါစုဆောင်သထာသသောပုံကိုသင်လည်သသုံသနိုင်သည်။ Jenkins + Docker. အရင်သအမဌစ်အာသလုံသကို ဖလင့်ပဌီသ တည်ရဟိနေပါသည်။ rmuhamedgaliev/jenkins_docker.

ကဆောင်သပါသကို ရေသသာသနေစဉ်တလင်၊ ပလပ်အင်ကို အသုံသပဌု၍ master node ကို မတင်ရန် အဝေသထိန်သဆာဗာမျာသတလင် အေသဂျင့်မျာသအသုံသပဌုခဌင်သနဟင့် ပတ်သက်၍ ဆလေသနလေသမဟုတစ်ခု ပေါ်ပေါက်ခဲ့သည်။ docker-ပလပ်အင်. ဒါပေမယ့် အနာဂတ်မဟာ ဒီအကဌောင်သကို ပဌောပဌမယ်။

source: www.habr.com

မဟတ်ချက် Add