Me pehea te kohikohi kaupapa i Jenkins mena ka hiahia koe ki te maha o nga taiao rereke

Me pehea te kohikohi kaupapa i Jenkins mena ka hiahia koe ki te maha o nga taiao rereke

He maha nga tuhinga mo Habré mo Jenkins, engari he iti noa nga korero mo te mahi a Jenkins me nga kaimahi docker. Katoa nga taputapu hanga kaupapa rongonui penei Drone.io, Pipeline Bitbucket, GitLab, Nga mahi a GitHub me etahi atu, ka taea te kohi i nga mea katoa i roto i nga ipu. Engari me pehea a Jenkins?

I tenei ra he otinga mo te raru: He pai a Jenkins 2 ki te mahi tahi Nga kaihoko Docker. I roto i tenei tuhinga e hiahia ana ahau ki te whakapuaki i taku wheako me te whakaatu me pehea e taea ai e koe.

He aha ahau i timata ai ki te whakaoti i tenei raru?

I te mea kei roto tatou i te kamupene Citronium Na te mea he maha nga hangarau rereke e whakamahia ana e matou, me pupuri e matou nga momo putanga rereke o Node.JS, Gradle, Ruby, JDK me etahi atu i runga i te miihini huihuinga. Engari i te nuinga o nga wa kaore e taea te karo i nga pakanga putanga. Ae, ka tika koe mena ka kii koe he maha nga kaiwhakahaere putanga penei i te nvm, rvm, engari kaore nga mea katoa i te maeneene ki a raatau ka raru enei otinga:

  • te nui o te wa mahi ka wareware nga kaihanga ki te horoi;
  • he taupatupatu kei waenganui i nga momo putanga rereke o nga wa whakahaere kotahi;
  • Ko ia kaiwhakawhanake he huinga rereke rereke.

He raruraru ano, engari me korero atu ahau ki a koe mo te otinga.

Jenkins i Docker

I te mea kua tino tau a Docker ki te ao whanaketanga, tata katoa ka taea te whakahaere ma te whakamahi i a Docker. Ko taku otinga ko te whai Jenkins ki Docker ka taea e koe te whakahaere i etahi atu ipu Docker. I timata tenei patai i te tau 2013 i roto i te tuhinga "Ka taea e Docker te rere i roto i te Docker".

Hei poto, me whakauru noa koe i a Docker ki roto i te ipu mahi ka whakairihia te konae /var/run/docker.sock.

Anei tetahi tauira Dockerfile i puta mo 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

Na, ka whiwhi matou i tetahi ipu Docker ka taea te whakahaere i nga whakahau a Docker i runga i te miihini manaaki.

Hanga tatūnga

No mua tata nei ka whai waahi a Jenkins ki te whakaahua i ana ture ma te whakamahi Pipeline syntax, he mea ngawari ki te whakarereke i te tuhinga hanga me te penapena i roto i te putunga.

Na me whakatakoto he Dockerfile motuhake ki roto i te putunga, kei roto nga whare pukapuka katoa e tika ana mo te hanga. Ma tenei ara, ka taea e te kaiwhakawhanake ake te whakarite i tetahi taiao tukurua me te kore e tono ki a OPS kia whakauruhia he putanga motuhake o Node.JS ki runga i te kaihautu.

FROM node:12.10.0-alpine

RUN npm install yarn -g

He pai tenei ahua hanga mo te nuinga o nga tono Node.JS. He aha mehemea, hei tauira, ka hiahia koe ki tetahi ahua mo te kaupapa JVM me te matawai Sonar kei roto? Ka waatea koe ki te whiriwhiri i nga waahanga e hiahiatia ana mo te huihuinga.

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/

I whakaahuahia e matou te taiao huihuinga, engari he aha te mahi a Jenkins? A ka taea e nga kaihoko a Jenkins te mahi me enei whakaahua Docker me te hanga i roto.

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

Tohutohu agent whakamahi rawa dockerka taea e koe te tohu:

  • te ingoa o te ipu huihuinga kia rite ki to kaupapa here whakaingoa;
  • nga tautohenga e hiahiatia ana hei whakahaere i te ipu hanga, kei roto i a maatau ka whakairihia te raarangi o naianei hei raarangi i roto i te ipu.

Na kei roto i nga waahanga hanga ka tohuhia e maatau nga whakahau hei whakahaere i roto i te kaihoko hanga Docker. Ka taea e tenei tetahi mea, na reira ka whakarewahia ano e ahau te tuku tono ma te whakamahi ansible.

Kei raro e hiahia ana ahau ki te whakaatu i tetahi Jenkinsfile ka taea e tetahi tono Node.JS ngawari te hanga.

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 te mea i tupu?

Na tenei tikanga, i whakatauhia e matou nga raru e whai ake nei:

  • ka whakaitihia te wa whirihoranga huihuinga taiao ki te 10 - 15 meneti mo ia kaupapa;
  • he taiao hanga tono tino whakahoki, na te mea ka taea e koe te hanga penei i runga i to rorohiko rohe;
  • karekau he raruraru me nga taupatupatu i waenga i nga momo momo taputapu o te huihuinga;
  • i nga wa katoa he mokowāmahi ma e kore e kaokao.

Ko te otinga ake he maamaa, he maamaa hoki ka taea e koe te whiwhi i etahi painga. Ae, kua piki ake te paepae urunga ki te whakataurite ki nga whakahau ngawari mo nga huihuinga, engari inaianei he taurangi ka hangaia i nga wa katoa ka taea e te kaiwhakawhanake te whiriwhiri i nga mea katoa e tika ana mo tana mahi hanga.

Ka taea hoki e koe te whakamahi i te ahua i kohia e ahau Jenkins + Docker. Kei te tuwhera nga puna katoa, kei te waahi rmuhamedgaliev/jenkins_docker.

I a koe e tuhi ana i tenei tuhinga, i ara ake he korerorero mo te whakamahi i nga kaihoko ki runga i nga kaitoro mamao kia kore ai e utaina te node matua ma te whakamahi i te monomai. docker-monomai. Engari ka korero ahau mo tenei a muri ake nei.

Source: will.com

Tāpiri i te kōrero