ඔබට විවිධ පරිසරයන් අවශ්‍ය නම් ජෙන්කින්ස් හි ව්‍යාපෘති එකතු කරන්නේ කෙසේද?

ඔබට විවිධ පරිසරයන් අවශ්‍ය නම් ජෙන්කින්ස් හි ව්‍යාපෘති එකතු කරන්නේ කෙසේද?

Jenkins ගැන Habré හි බොහෝ ලිපි ඇත, නමුත් Jenkins සහ docker නියෝජිතයන් ක්‍රියා කරන ආකාරය පිළිබඳ උදාහරණ කිහිපයක් විස්තර කරයි. වැනි සියලුම ජනප්‍රිය ව්‍යාපෘති ගොඩනැගීමේ මෙවලම් Drone.io, බිට්බකට් නල මාර්ගය, GitLab, GitHub ක්‍රියා සහ අනෙකුත්, බහාලුම්වල සියල්ල එකතු කළ හැකිය. නමුත් ජෙන්කින්ස් ගැන කුමක් කිව හැකිද?

අද ගැටලුවට විසඳුමක් තිබේ: Jenkins 2 සමඟ වැඩ කිරීමේදී විශිෂ්ටයි ඩොකර් නියෝජිතයන්. මෙම ලිපියෙන් මට මගේ අත්දැකීම් බෙදා ගැනීමට අවශ්‍ය වන අතර ඔබට එය තනිවම කළ හැකි ආකාරය පෙන්වීමට අවශ්‍යයි.

මම මෙම ගැටලුව විසඳීමට පටන් ගත්තේ ඇයි?

අපි සමාගමක නිසා සිට්රෝනියම් අපි විවිධ තාක්ෂණයන් බොහොමයක් භාවිතා කරන නිසා, අපට Node.JS, Gradle, Ruby, JDK සහ වෙනත් විවිධ අනුවාදයන් එකලස් කිරීමේ යන්ත්‍රයේ තබා ගත යුතුය. නමුත් බොහෝ විට අනුවාද ගැටුම් වළක්වා ගත නොහැක. ඔව්, nvm, rvm වැනි විවිධ අනුවාද කළමනාකරුවන් සිටින බව ඔබ පැවසුවහොත් ඔබ නිවැරදි වනු ඇත, නමුත් ඒවා සමඟ සෑම දෙයක්ම එතරම් සුමට නොවන අතර මෙම විසඳුම් ගැටළු තිබේ:

  • සංවර්ධකයින්ට පිරිසිදු කිරීමට අමතක වන විශාල ධාවන කාලය;
  • එකම ධාවන කාලවල විවිධ අනුවාද අතර ගැටුම් පවතී;
  • සෑම සංවර්ධකයෙකුටම විවිධ සංරචක කට්ටලයක් අවශ්‍ය වේ.

තවත් ගැටළු ඇත, නමුත් විසඳුම ගැන මම ඔබට කියමි.

ඩොකර් හි ජෙන්කින්ස්

Docker දැන් සංවර්ධන ලෝකයේ හොඳින් ස්ථාපිත වී ඇති බැවින්, Docker භාවිතයෙන් ඕනෑම දෙයක් පාහේ ධාවනය කළ හැක. මගේ විසඳුම වන්නේ ඩොකර් තුළ ජෙන්කින්ස් සිටීම සහ අනෙකුත් ඩොකර් බහාලුම් ධාවනය කිරීමට හැකි වීමයි. මෙම ප්‍රශ්නය 2013 දී "" ලිපියෙන් නැවත ඇසීමට පටන් ගත්තේය.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

මේ අනුව, අපට ධාරක යන්ත්‍රයේ ඩොකර් විධාන ක්‍රියාත්මක කළ හැකි ඩොකර් කන්ටේනරයක් ලැබුණි.

සැකසුම ගොඩනඟන්න

බොහෝ කලකට පෙර ජෙන්කින්ස්ට එහි නීති රීති විස්තර කිරීමට අවස්ථාව ලැබුණි නල මාර්ගය සින්ටැක්ස්, එය ගොඩනැගීමේ ස්ක්‍රිප්ට් වෙනස් කිරීම සහ ගබඩාවේ ගබඩා කිරීම ඉතා පහසු කරයි.

එබැවින් අපි ගබඩාව තුළම විශේෂ 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ඔබට සඳහන් කළ හැකි තැන:

  • ඔබගේ නම් කිරීමේ ප්‍රතිපත්තියට අනුව එකලස් කිරීමේ කන්ටේනරයේ නම;
  • බිල්ඩ් කන්ටේනරය ක්‍රියාත්මක කිරීමට තර්ක අවශ්‍ය වේ, එහිදී අපගේ නඩුවේදී අපි වත්මන් නාමාවලිය බහාලුම තුළ නාමාවලියක් ලෙස සවි කරමු.

දැනටමත් ගොඩනැගීමේ පියවරේදී අපි ඩොකර් ගොඩනැගීමේ නියෝජිතයා තුළ ක්‍රියාත්මක කළ යුතු විධානයන් දක්වන්නෙමු. මෙය ඕනෑම දෙයක් විය හැක, එබැවින් මම ansible භාවිතයෙන් යෙදුම් යෙදවීමද දියත් කරමි.

පහතින් මට සරල Node.JS යෙදුමක් ගොඩනගා ගත හැකි සාමාන්‍ය Jenkinsfile එකක් පෙන්වීමට අවශ්‍යයි.

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

අදහස් එක් කරන්න