Cara ngumpulake proyek ing Jenkins yen sampeyan butuh macem-macem lingkungan

Cara ngumpulake proyek ing Jenkins yen sampeyan butuh macem-macem lingkungan

Ana akeh artikel ing Habré babagan Jenkins, nanging sawetara sing njlèntrèhaké conto cara kerja Jenkins lan agen docker. Kabeh alat mbangun proyek populer kaya Drone.io, Pipa Bitbucket, GitLab, Tindakan GitHub lan liyane, bisa ngumpulake kabeh ing kontaner. Nanging babagan Jenkins?

Dina iki ana solusi kanggo masalah: Jenkins 2 gedhe ing karya karo Agen Docker. Ing artikel iki aku pengin nuduhake pengalaman lan nuduhake carane sampeyan bisa nindakake dhewe.

Yagene aku miwiti ngrampungake masalah iki?

Awit kita ing perusahaan Citronium Amarga nggunakake macem-macem teknologi, kita kudu nyimpen versi Node.JS, Gradle, Ruby, JDK lan liya-liyane ing mesin perakitan. Nanging asring konflik versi ora bisa dihindari. Ya, sampeyan bakal bener yen sampeyan ujar manawa ana macem-macem manajer versi kaya nvm, rvm, nanging ora kabeh lancar lan solusi kasebut duwe masalah:

  • jumlah gedhe saka runtime sing gawe lali kanggo ngresiki;
  • ana konflik antarane versi beda saka runtimes padha;
  • Saben pangembang mbutuhake macem-macem komponen.

Ana masalah liyane, nanging mugi kula pitutur marang kowe bab solusi.

Jenkins ing Docker

Wiwit Docker saiki wis mapan ing jagad pangembangan, meh kabeh bisa ditindakake nggunakake Docker. Solusiku yaiku nduwe Jenkins ing Docker lan bisa mbukak wadah Docker liyane. Pitakonan iki wiwit ditakoni ing taun 2013 ing artikel "Docker saiki bisa mlaku ing Docker".

Ing cendhak, sampeyan mung kudu nginstal Docker dhewe ing wadhah sing bisa digunakake lan pasang file kasebut /var/run/docker.sock.

Iki minangka conto Dockerfile sing dadi 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

Mangkono, kita entuk wadhah Docker sing bisa nglakokake perintah Docker ing mesin host.

Nggawe persiyapan

Ora suwe Jenkins entuk kesempatan kanggo njlèntrèhaké aturan nggunakake Pipeline sintaks, sing ndadekake gampang ngganti skrip mbangun lan nyimpen ing repositori.

Dadi ayo sijine Dockerfile khusus ing repositori kasebut, sing bakal ngemot kabeh perpustakaan sing dibutuhake kanggo mbangun. Kanthi cara iki, pangembang dhewe bisa nyiyapake lingkungan sing bisa diulang lan ora kudu njaluk OPS kanggo nginstal versi Node.JS tartamtu ing host.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Gambar mbangun iki cocok kanggo umume aplikasi Node.JS. Apa yen, contone, sampeyan kudu gambar kanggo project JVM karo scanner Sonar klebu nang? Sampeyan bebas milih komponen sing dibutuhake kanggo perakitan.

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/

We diterangake lingkungan Déwan, nanging apa Jenkins apa karo? Lan agen Jenkins bisa nggarap gambar Docker kasebut lan mbangun kanthi internal.

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

Petunjuk agent nggunakake properti dockerngendi sampeyan bisa nemtokake:

  • jeneng wadhah perakitan miturut kabijakan jeneng sampeyan;
  • argumen sing dibutuhake kanggo mbukak wadhah mbangun, ing ngendi ing kasus kita, kita masang direktori saiki minangka direktori ing njero wadhah.

Lan wis ana ing langkah-langkah mbangun, kita nuduhake perintah sing kudu dieksekusi ing agen mbangun Docker. Iki bisa dadi apa wae, mula aku uga miwiti panyebaran aplikasi nggunakake ansible.

Ing ngisor iki aku pengin nuduhake Jenkinsfile umum sing bisa dibangun aplikasi Node.JS sing prasaja.

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

}

Ana apa?

Thanks kanggo metode iki, kita ngrampungake masalah ing ngisor iki:

  • wektu konfigurasi Déwan lingkungan suda kanggo 10 - 15 menit saben project;
  • lingkungan mbangun aplikasi rampung repeatable, wiwit sampeyan bisa mbangun cara iki ing komputer lokal;
  • ora ana masalah karo konflik antarane macem-macem versi piranti perakitan;
  • tansah papan kerja sing resik sing ora macet.

Solusi kasebut prasaja lan jelas lan ngidini sampeyan entuk sawetara kaluwihan. Ya, ambang entri wis mundhak sithik dibandhingake karo prentah sing gampang kanggo majelis, nanging saiki ana jaminan manawa bakal dibangun lan pangembang dhewe bisa milih kabeh sing dibutuhake kanggo proses mbangun.

Sampeyan uga bisa nggunakake gambar sing diklumpukake Jenkins + Docker. Kabeh sumber mbukak lan dumunung ing rmuhamedgaliev/jenkins_docker.

Nalika nulis artikel iki, ana diskusi babagan nggunakake agen ing server remot supaya ora mbukak simpul master nggunakake plugin. docker-plugin. Nanging aku bakal ngomong babagan iki ing mangsa ngarep.

Source: www.habr.com

Add a comment