உங்களுக்கு பல்வேறு சூழல்கள் தேவைப்பட்டால் ஜென்கின்ஸில் திட்டங்களை எவ்வாறு சேகரிப்பது

உங்களுக்கு பல்வேறு சூழல்கள் தேவைப்பட்டால் ஜென்கின்ஸில் திட்டங்களை எவ்வாறு சேகரிப்பது

ஜென்கின்ஸ் பற்றி ஹப்ரேயில் பல கட்டுரைகள் உள்ளன, ஆனால் ஜென்கின்ஸ் மற்றும் டோக்கர் முகவர்கள் எவ்வாறு செயல்படுகிறார்கள் என்பதற்கான உதாரணங்களை சிலர் விவரிக்கின்றனர். போன்ற அனைத்து பிரபலமான திட்ட உருவாக்க கருவிகள் Drone.io, பிட்பக்கெட் பைப்லைன், GitLab, GitHub செயல்கள் மற்றும் மற்றவர்கள், கொள்கலன்களில் அனைத்தையும் சேகரிக்க முடியும். ஆனால் ஜென்கின்ஸ் பற்றி என்ன?

இன்று பிரச்சனைக்கு ஒரு தீர்வு உள்ளது: Jenkins 2 உடன் வேலை செய்வதில் சிறந்தது டோக்கர் முகவர்கள். இந்த கட்டுரையில் நான் எனது அனுபவத்தைப் பகிர்ந்து கொள்ள விரும்புகிறேன், அதை நீங்களே எப்படி செய்யலாம் என்பதைக் காட்ட விரும்புகிறேன்.

நான் ஏன் இந்த சிக்கலை தீர்க்க ஆரம்பித்தேன்?

நாங்கள் நிறுவனத்தில் இருப்பதால் சிட்ரோனியம் நாம் பல்வேறு தொழில்நுட்பங்களைப் பயன்படுத்துவதால், Node.JS, Gradle, Ruby, JDK மற்றும் பிறவற்றின் வெவ்வேறு பதிப்புகளை அசெம்பிளி மெஷினில் வைத்திருக்க வேண்டும். ஆனால் பெரும்பாலும் பதிப்பு மோதல்களைத் தவிர்க்க முடியாது. ஆம், nvm, rvm போன்ற பல்வேறு பதிப்பு மேலாளர்கள் இருப்பதாக நீங்கள் சொன்னால் நீங்கள் சொல்வது சரிதான், ஆனால் அவர்களுடன் எல்லாம் அவ்வளவு சீராக இல்லை மற்றும் இந்த தீர்வுகளில் சிக்கல்கள் உள்ளன:

  • டெவலப்பர்கள் சுத்தம் செய்ய மறந்துவிடும் அதிக அளவு இயக்க நேரம்;
  • ஒரே இயக்க நேரங்களின் வெவ்வேறு பதிப்புகளுக்கு இடையே முரண்பாடுகள் உள்ளன;
  • ஒவ்வொரு டெவலப்பருக்கும் வெவ்வேறு கூறுகள் தேவை.

மற்ற பிரச்சனைகள் உள்ளன, ஆனால் தீர்வு பற்றி நான் உங்களுக்கு சொல்கிறேன்.

டோக்கரில் ஜென்கின்ஸ்

டோக்கர் இப்போது வளர்ச்சி உலகில் நன்கு நிறுவப்பட்டிருப்பதால், டோக்கரைப் பயன்படுத்தி கிட்டத்தட்ட எதையும் இயக்க முடியும். டோக்கரில் ஜென்கின்ஸ் இருப்பதும் மற்ற டோக்கர் கொள்கலன்களை இயக்குவதும் எனது தீர்வு. இந்த கேள்வி 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

எனவே, ஹோஸ்ட் கணினியில் டோக்கர் கட்டளைகளை இயக்கக்கூடிய டோக்கர் கொள்கலன் கிடைத்தது.

அமைப்பை உருவாக்கவும்

நீண்ட காலத்திற்கு முன்பு ஜென்கின்ஸ் அதன் விதிகளைப் பயன்படுத்தி விவரிக்கும் வாய்ப்பைப் பெற்றார் பைப்லைன் தொடரியல், இது பில்ட் ஸ்கிரிப்டை மாற்றுவது மற்றும் களஞ்சியத்தில் சேமிப்பதை மிகவும் எளிதாக்குகிறது.

எனவே, ஒரு சிறப்பு டாக்கர்ஃபைலை களஞ்சியத்திலேயே வைப்போம், அதில் உருவாக்கத் தேவையான அனைத்து நூலகங்களும் இருக்கும். இந்த வழியில், டெவெலப்பரே மீண்டும் மீண்டும் செய்யக்கூடிய சூழலைத் தயாரிக்கலாம் மற்றும் ஹோஸ்டில் 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நீங்கள் எங்கே குறிப்பிடலாம்:

  • உங்கள் பெயரிடும் கொள்கையின்படி சட்டசபை கொள்கலனின் பெயர்;
  • பில்ட் கன்டெய்னரை இயக்குவதற்கு வாதங்கள் தேவை, நம் விஷயத்தில் தற்போதைய கோப்பகத்தை கொள்கலனுக்குள் ஒரு கோப்பகமாக ஏற்றுவோம்.

டோக்கர் பில்ட் ஏஜெண்டிற்குள் எந்த கட்டளைகளை இயக்க வேண்டும் என்பதை ஏற்கனவே உருவாக்க படிகளில் குறிப்பிடுகிறோம். இது எதுவாகவும் இருக்கலாம், எனவே நான் அன்சிபிளைப் பயன்படுத்தி பயன்பாட்டு வரிசைப்படுத்தலையும் தொடங்குகிறேன்.

ஒரு எளிய 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

கருத்தைச் சேர்