Quomodo incepta colligere in Jenkins si multis diversis ambitibus indigeas?

Quomodo incepta colligere in Jenkins si multis diversis ambitibus indigeas?

Multi articuli in HabrΓ© de Jenkins sunt, sed pauca exempla describunt quomodo Jenkins et grex agentia operantur. Omnes populares project instrumenta aedificant sicut Drone.io, Bitbucket Pipeline, GitLab, GitHub actiones alii vero omnia in vasis colligere possunt. Sed quid de Jenkins?

Hodie solutio problematis: Jenkins 2 magnus est qui laborat cum Docker agentium. In hoc articulo experientiae meae communicare volo et quomodo id ipsum facere possis demonstrare.

Cur incipiam solvendo hanc quaestionem?

Cum in comitatu sumus Citronium Quoniam multis variisque technologiis utimur, necesse est ut varias versiones Node, Gradle, Ruby, JDK et aliis in machina conventus servare debeamus. Sed saepe versio certamina vitari non possunt. Imo recte eris si dicas varias esse actoribus versiones quasi nvm, rvm, sed non omnia tam levia sunt illis, et hae solutiones problemata habent;

  • magnum pondus runtime quod tincidunt oblivisci munda;
  • certamina uaria eorumdem runtimerum sunt;
  • Quisque varius posuere elit eget elementum.

Alia sunt problemata, sed dicam tibi solutionem.

Jenkins in Docker

Cum Docker in mundo evolutionis nunc bene stabilitur, fere nihil potest uti Docker currere. Solutio mea est Jenkins in Docker habere et alias continentia Docker currere posse. Haec quaestio in anno 2013 interrogari coepit in articulo "Docker nunc currere potest in Docker".

In summa, debes ipsum Docker installare in vase laborante et tabellam conscendere /var/run/docker.sock.

Exemplum hic Dockerfile Jenkins evenit.

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

Ita vas Docker cepimus qui mandata Docker in machina exercitus exsequi potest.

Γ†dificate setup

Non ita pridem Jenkins facultatem obtinuit ut eius praecepta utendi describeret pipeline syntaxin, quae satis facile facit ut scripturam aedificet et in repositorium reponat.

Praecipuum igitur Dockerfile in ipso repositorio ponamus, quod omnes bibliothecas ad aedificandum necessarias continebit. Hoc modo ipse elit ambitum iterabilem parare potest nec petere OPS ut certam versionem Node.JS in exercitu instituat.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Haec imago fabricandi apta applicationibus plurimis Node.JS. Quid si, exempli gratia, opus est imaginem pro JVM proiecto cum scannario Sonario intus incluso? Vos liberum est eligere partes quae ad ecclesiam necessaria sunt.

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/

ambitum conventus descripsimus, sed quid Jenkins ad rem pertinet? Et Jenkins procuratores talibus Docker imaginibus operari possunt et eas interius construere.

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

Directive agent utitur res dockerubi specificare potes:

  • nomen conventus continens consilium tuum secundum nomen tuum;
  • argumenta ad currendum vas aedificandum, ubi in nostro casu directorium hodiernam sicut directorium intra continens conscendimus.

Et iam in gradibus aedificiorum designamus quae mandata exequi Docker intus agente aedificant. Hoc aliquid esse potest, ut ego etiam applicationem instruere instruere utendo ansible.

Infra ostendere volo Jenkinsfile genus simplex Node.JS applicationem aedificare potest.

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

}

Quid accidit?

Per hanc methodum sequentia problemata solvimus;

  • ambitus conventus configurationis tempus minuitur ad 10 - 15 minuta per project;
  • applicatio omnino iterabilis ambitum construendum, cum eam viam in computatro locali tuo aedificare possis;
  • nullae difficultates exstant cum pugnis inter instrumenta conventus varias versiones;
  • semper in opere mundissimo quod non plusculum habet.

Ipsa solutio simplex et aperta est, ac permittit ut aliqua commoda possideas. Ita, limen introitus orta est parum comparata simplicibus mandatis pro conventibus, nunc cautum est ut semper aedificatur et ipse elaborata omnia eligere potest quae ad eius processum aedificandum necessaria sunt.

Etiam imagine quam collegi Jenkins + Docker. Omnes fontes patent et sita sunt rmuhamedgaliev/jenkins_docker.

Dum hunc articulum scribens, disceptatio de procuratoribus remotis servientibus utens orta est ut nodi dominum non onerent plugin utendo docker-plugin. Sed de hoc in posterum dicemus.

Source: www.habr.com