Yadda ake tattara ayyuka a Jenkins idan kuna buƙatar yanayi daban-daban

Yadda ake tattara ayyuka a Jenkins idan kuna buƙatar yanayi daban-daban

Akwai labarai da yawa akan Habré game da Jenkins, amma kaɗan sun bayyana misalan yadda Jenkins da wakilan docker ke aiki. Duk shahararrun kayan aikin gina kayan aikin kamar Drone.io, Bututun Bitbucket, GitLab, Ayyukan GitHub da sauransu, suna iya tattara komai a cikin kwantena. Amma menene game da Jenkins?

A yau akwai mafita ga matsalar: Jenkins 2 yana da kyau a aiki tare Wakilan Docker. A cikin wannan labarin Ina so in raba kwarewata kuma in nuna yadda za ku iya yin shi da kanku.

Me yasa na fara magance wannan matsalar?

Tunda muna cikin kamfani Citronium Saboda muna amfani da fasaha daban-daban, dole ne mu ajiye nau'o'in Node.JS, Gradle, Ruby, JDK da sauransu a kan na'ura mai haɗawa. Amma sau da yawa ba za a iya kauce wa rikice-rikicen sigar ba. Ee, za ku yi daidai idan kun ce akwai manajojin sigar daban-daban kamar nvm, rvm, amma ba komai ya yi daidai da su ba kuma waɗannan mafita suna da matsaloli:

  • babban adadin lokacin gudu wanda masu haɓakawa suka manta don tsaftacewa;
  • akwai rikice-rikice tsakanin nau'ikan nau'ikan nau'ikan lokaci guda;
  • Kowane mai haɓakawa yana buƙatar saiti na sassa daban-daban.

Akwai sauran matsalolin, amma bari in gaya muku game da mafita.

Jenkins in Docker

Tunda Docker yanzu yana da kyau a cikin ci gaban duniya, kusan komai ana iya gudanar da shi ta amfani da Docker. Maganina shine samun Jenkins a Docker kuma in sami damar gudanar da wasu kwantena Docker. An fara yin wannan tambayar a cikin 2013 a cikin labarin "Docker yanzu na iya aiki a cikin Docker".

A takaice, kawai kuna buƙatar shigar da Docker kanta a cikin kwandon aiki kuma ku hau fayil ɗin /var/run/docker.sock.

Anan akwai misalin Dockerfile wanda ya juya ga Jenkins.

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

Don haka, mun sami akwati Docker wanda zai iya aiwatar da umarnin Docker akan injin mai masauki.

Gina saitin

Ba da dadewa ba Jenkins ya sami damar bayyana dokokinta ta amfani da shi Pipeline syntax, wanda ke sa ya zama sauƙi don canza rubutun ginin da adana shi a cikin ma'ajin.

Don haka bari mu sanya Dockerfile na musamman a cikin ma'ajiyar kanta, wanda zai ƙunshi duk ɗakunan karatu da ake buƙata don ginin. Ta wannan hanyar, mai haɓakawa da kansa zai iya shirya yanayi mai maimaitawa kuma ba zai nemi OPS don shigar da takamaiman sigar Node.JS akan mai watsa shiri ba.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Wannan hoton ginin ya dace da yawancin aikace-aikacen Node.JS. Me zai faru idan, alal misali, kuna buƙatar hoto don aikin JVM tare da na'urar daukar hoto na Sonar a ciki? Kuna da 'yanci don zaɓar abubuwan da kuke buƙata don haɗuwa.

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/

Mun kwatanta yanayin taron, amma menene ya shafi Jenkins da shi? Kuma wakilan Jenkins na iya aiki tare da irin waɗannan hotunan Docker kuma su gina su a ciki.

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"
    }
}

Umarni agent yana amfani da dukiya dockerinda zaka iya sakawa:

  • sunan kwandon taro bisa ga manufar sunan ku;
  • muhawarar da ake buƙata don gudanar da ginin ginin, inda a cikin yanayinmu muke hawa kundin adireshi na yanzu azaman kundin adireshi a cikin akwati.

Kuma a cikin matakan ginawa mun nuna waɗanne umarni don aiwatarwa a cikin wakili na ginin Docker. Wannan na iya zama komai, don haka na ƙaddamar da tura aikace-aikacen ta amfani da mai yiwuwa.

A ƙasa ina so in nuna janar Jenkinsfile wanda aikace-aikacen Node.JS mai sauƙi zai iya ginawa.

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()
        }
    }

}

Me ya faru?

Godiya ga wannan hanyar, mun magance matsalolin masu zuwa:

  • An rage lokacin daidaitawar mahalli zuwa 10 - 15 mintuna a kowane aikin;
  • yanayin gina aikace-aikacen gaba ɗaya mai maimaitawa, tunda zaku iya gina shi ta wannan hanyar akan kwamfutar gida;
  • babu matsaloli tare da rikice-rikice tsakanin nau'ikan kayan aikin taro daban-daban;
  • koyaushe wurin aiki mai tsabta wanda ba ya toshewa.

Maganin kanta yana da sauƙi kuma a bayyane kuma yana ba ku damar samun wasu fa'idodi. Haka ne, ƙofar shiga ya tashi kadan idan aka kwatanta da umarni masu sauƙi don majalisai, amma yanzu akwai tabbacin cewa za a gina shi koyaushe kuma mai haɓakawa da kansa zai iya zaɓar duk abin da ya dace don tsarin gininsa.

Hakanan zaka iya amfani da hoton da na tattara Jenkins + Docker. Duk kafofin suna buɗe kuma suna a rmuhamedgaliev/jenkins_docker.

Yayin rubuta wannan labarin, tattaunawa ta taso game da yin amfani da wakilai akan sabar masu nisa don kada a ɗora kullin maigidan ta amfani da plugin. docker-plugin. Amma zan yi magana game da wannan a nan gaba.

source: www.habr.com

Add a comment