Егер сізге әртүрлі орталар қажет болса, Дженкинстегі жобаларды қалай жинауға болады

Егер сізге әртүрлі орталар қажет болса, Дженкинстегі жобаларды қалай жинауға болады

Хабреде Дженкинс туралы көптеген мақалалар бар, бірақ Дженкинс пен докер агенттерінің қалай жұмыс істейтіні туралы мысалдар аз. Барлық танымал жоба құру құралдары сияқты Drone.io, Битбукет құбыры, GitLab, GitHub әрекеттері және басқалары контейнерлерге бәрін жинай алады. Бірақ Дженкинс ше?

Бүгінде мәселенің шешімі бар: Дженкинс 2 онымен жұмыс істеуде тамаша Докер агенттері. Бұл мақалада мен өз тәжірибеммен бөліскім келеді және мұны өзіңіз қалай жасауға болатынын көрсеткім келеді.

Неліктен мен бұл мәселені шеше бастадым?

Біз серіктестікте болғандықтан Цитроний Біз көптеген әртүрлі технологияларды қолданатындықтан, құрастыру машинасында Node.JS, Gradle, Ruby, JDK және басқалардың әртүрлі нұсқаларын сақтауымыз керек. Бірақ көбінесе нұсқадағы қайшылықтарды болдырмау мүмкін емес. Иә, егер сіз nvm, rvm сияқты әртүрлі нұсқа менеджерлері бар деп айтсаңыз, дұрыс боласыз, бірақ олармен бәрі бірдей емес және бұл шешімдерде проблемалар бар:

  • әзірлеушілер тазалауды ұмытып кететін жұмыс уақытының үлкен көлемі;
  • бірдей орындалу уақыттарының әртүрлі нұсқалары арасында қайшылықтар бар;
  • Әрбір әзірлеушіге әртүрлі компоненттер жиынтығы қажет.

Басқа мәселелер бар, бірақ шешімін айтайын.

Докердегі Дженкинс

Docker қазір даму әлемінде жақсы орнатылғандықтан, Docker көмегімен кез келген дерлік іске қосуға болады. Менің шешімім - Дженкинстің Docker-де болуы және басқа Docker контейнерлерін іске қосу. Бұл сұрақ 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 қояйық, онда құрастыруға қажетті барлық кітапханалар болады. Осылайша, әзірлеушінің өзі қайталанатын ортаны дайындай алады және OPS-тен хостта Node.JS нақты нұсқасын орнатуды сұраудың қажеті жоқ.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Бұл құрастыру кескіні көптеген Node.JS қолданбалары үшін қолайлы. Мысалы, ішінде Sonar сканері бар 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/

Біз құрастыру ортасын сипаттадық, бірақ Дженкинстің оған қандай қатысы бар? Дженкинс агенттері мұндай 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мұнда көрсетуге болады:

  • атау саясатыңызға сәйкес құрастыру контейнерінің атауы;
  • құрастыру контейнерін іске қосу үшін қажет аргументтер, біздің жағдайда ағымдағы каталогты контейнер ішіндегі каталог ретінде орнатамыз.

Құрастыру қадамдарында біз 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 минутқа дейін қысқарады;
  • толығымен қайталанатын қолданбаларды құрастыру ортасы, өйткені оны жергілікті компьютерде осылай құрастыруға болады;
  • құрастыру құралдарының әртүрлі нұсқалары арасындағы қайшылықтармен проблемалар жоқ;
  • әрқашан бітеліп қалмайтын таза жұмыс кеңістігі.

Шешімнің өзі қарапайым және айқын және кейбір артықшылықтарды алуға мүмкіндік береді. Иә, жиындарға арналған қарапайым пәрмендермен салыстырғанда кіру шегі сәл көтерілді, бірақ қазір оның әрқашан құрастырылатынына және әзірлеуші ​​​​өзінің құрастыру процесі үшін қажеттінің бәрін таңдай алатынына кепілдік бар.

Мен жинаған суретті де пайдалануға болады Дженкинс + Докер. Барлық дереккөздер ашық және мына мекенжайда орналасқан rmuhamedgliev/jenkins_docker.

Осы мақаланы жазу кезінде плагин арқылы негізгі түйінді жүктемеу үшін қашықтағы серверлерде агенттерді пайдалану туралы пікірталас туындады. докер-плагин. Бірақ мен бұл туралы алдағы уақытта айтатын боламын.

Ақпарат көзі: www.habr.com

пікір қалдыру