Pehea e hōʻiliʻili ai i nā papahana ma Jenkins inā makemake ʻoe i nā kaiapuni like ʻole

Pehea e hōʻiliʻili ai i nā papahana ma Jenkins inā makemake ʻoe i nā kaiapuni like ʻole

Nui nā ʻatikala ma Habré e pili ana iā Jenkins, akā he liʻiliʻi e wehewehe i nā hiʻohiʻona o ka hana ʻana o Jenkins a me nā mea hana docker. ʻO nā mea hana hana kaulana a pau e like me Drone.io, Paipu Bitbucket, GitLab, Nā hana GitHub a me nā mea ʻē aʻe, hiki ke hōʻiliʻili i nā mea āpau i loko o nā pahu. Akā pehea ʻo Jenkins?

I kēia lā aia kahi hoʻonā i ka pilikia: He maikaʻi ʻo Jenkins 2 i ka hana pū me Nā ʻelele Docker. Ma kēia ʻatikala makemake wau e kaʻana like i koʻu ʻike a hōʻike pehea e hiki ai iā ʻoe ke hana iā ʻoe iho.

No ke aha wau i hoʻomaka ai e hoʻoponopono i kēia pilikia?

ʻOiai mākou i ka hui Citronium No ka mea, hoʻohana mākou i nā ʻenehana like ʻole, pono mākou e mālama i nā mana like ʻole o Node.JS, Gradle, Ruby, JDK a me nā mea ʻē aʻe ma ka mīkini hui. Akā ʻaʻole hiki ke pale pinepine i nā paio mana. ʻAe, pololei ʻoe inā ʻōlelo ʻoe aia nā mana mana like ʻole e like me nvm, rvm, akā ʻaʻole maʻalahi nā mea āpau me lākou a he pilikia kēia mau hoʻonā:

  • ka nui o ka manawa holo e poina ai nā mea hoʻomohala e hoʻomaʻemaʻe;
  • aia nā paio ma waena o nā mana like ʻole o nā manawa holo like;
  • Pono kēlā me kēia mea hoʻomohala i nā ʻāpana like ʻole.

Aia nā pilikia ʻē aʻe, akā e haʻi wau iā ʻoe e pili ana i ka hopena.

Jenkins ma Docker

No ka mea ua hoʻokumu maikaʻi ʻia ʻo Docker i ka honua hoʻomohala, kokoke i nā mea āpau e holo me Docker. ʻO kaʻu hopena e loaʻa iā Jenkins i Docker a hiki iā ia ke holo i nā pahu Docker ʻē aʻe. Ua hoʻomaka ʻia kēia nīnau i ka makahiki 2013 ma ka ʻatikala "Hiki iā Docker ke holo i loko o Docker".

I ka pōkole, pono ʻoe e hoʻokomo iā Docker iā ia iho i kahi pahu hana a kau i ka faila /var/run/docker.sock.

Eia kahi laʻana Dockerfile i huli ʻia no 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

No laila, loaʻa iā mākou kahi pahu Docker hiki ke hoʻokō i nā kauoha Docker ma ka mīkini hoʻokipa.

Hoʻonohonoho kūkulu

ʻAʻole i liʻuliʻu i loaʻa iā Jenkins ka manawa e wehewehe i kāna mau lula e hoʻohana ana Ka Pipeline syntax, he mea maʻalahi ke hoʻololi i ka palapala kūkulu a mālama i loko o ka waihona.

No laila e hoʻokomo i kahi Dockerfile kūikawā i loko o ka waihona ponoʻī, kahi e loaʻa ai nā hale waihona puke āpau e pono ai no ke kūkulu ʻana. ʻO kēia ala, hiki i ka mea hoʻomohala iā ia iho ke hoʻomākaukau i kahi kaiapuni hou a ʻaʻole pono e noi iā OPS e hoʻokomo i kahi mana kikoʻī o Node.JS ma ka host.

FROM node:12.10.0-alpine

RUN npm install yarn -g

He kūpono kēia kiʻi kūkulu no ka hapa nui o nā noi Node.JS. He aha inā, no ka laʻana, pono ʻoe i kahi kiʻi no kahi papahana JVM me kahi scanner Sonar i hoʻokomo ʻia i loko? Hiki iā ʻoe ke koho i nā ʻāpana āu e pono ai no ka hui ʻana.

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/

Ua wehewehe mākou i ke kaiapuni hui, akā he aha ka pili o Jenkins me ia? A hiki i nā ʻelele Jenkins ke hana pū me ia mau kiʻi Docker a kūkulu iā lākou i loko.

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

Kuhikuhi agent hoohana waiwai dockerkahi e hiki ai iā ʻoe ke kuhikuhi:

  • ka inoa o ka pahu hui e like me kāu kulekele inoa;
  • pono nā manaʻo hoʻopaʻapaʻa e holo i ka pahu kūkulu, kahi i kā mākou hihia ke kau nei mākou i ka papa kuhikuhi o kēia manawa ma ke ʻano he papa kuhikuhi i loko o ka ipu.

A i loko o nā papa hana e hōʻike nei mākou i nā kauoha e hoʻokō ai i loko o ka mea hana hale Docker. Hiki paha kēia i kekahi mea, no laila ke hoʻomaka nei au i ka hoʻohana ʻana i ka hoʻohana ʻana i ka ansible.

Ma lalo iho makemake wau e hōʻike i kahi Jenkinsfile maʻamau i hiki i kahi noi Node.JS maʻalahi ke kūkulu.

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

}

He aha i hana ai?

Mahalo i kēia ʻano, ua hoʻoponopono mākou i kēia mau pilikia:

  • Hoʻemi ʻia ka manawa hoʻonohonoho hoʻonohonoho kaiapuni i 10 - 15 mau minuke no kēlā me kēia papahana;
  • kahi kaiapuni kūkulu hou ʻia, no ka mea hiki iā ʻoe ke kūkulu i kēia ala ma kāu kamepiula kūloko;
  • ʻaʻohe pilikia me nā paio ma waena o nā ʻano like ʻole o nā mea hana hui;
  • mau wahi hana maʻemaʻe ʻaʻole paʻa.

ʻO ka hoʻonā pono'ī he maʻalahi a maopopo a hiki iāʻoe ke loaʻa kekahi mau mea maikaʻi. ʻAe, ua piʻi iki ka paepae komo i ka hoʻohālikelike ʻana i nā kauoha maʻalahi no nā hui, akā i kēia manawa aia kahi hōʻoia e kūkulu mau ʻia a hiki i ka mea hoʻomohala ke koho i nā mea āpau e pono ai no kāna kaʻina hana.

Hiki iā ʻoe ke hoʻohana i ke kiʻi aʻu i hōʻiliʻili ai ʻO Jenkins + Docker. Ua wehe ʻia nā kumu a pau a aia ma rmuhamedgaliev/jenkins_docker.

I ka wā e kākau ana i kēia ʻatikala, ua kū mai kahi kūkākūkā e pili ana i ka hoʻohana ʻana i nā ʻelele ma nā kikowaena mamao i ʻole e hoʻouka i ka master node me ka hoʻohana ʻana i kahi plugin. docker-plugin. Akā e kamaʻilio wau e pili ana i kēia i ka wā e hiki mai ana.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka