Það eru margar greinar á Habré um Jenkins, en fáar lýsa dæmum um hvernig Jenkins og hafnarverkamenn vinna. Öll vinsæl verkfæri verkefna eins og
Í dag er lausn á vandamálinu: Jenkins 2 er frábært að vinna með
Af hverju byrjaði ég að leysa þetta vandamál?
Þar sem við erum í félagsskap
- mikið magn af keyrslutíma sem forritarar gleyma að þrífa;
- það eru árekstrar á milli mismunandi útgáfur af sömu keyrslutíma;
- Sérhver þróunaraðili þarf mismunandi sett af íhlutum.
Það eru önnur vandamál, en ég skal segja þér frá lausninni.
Jenkins í Docker
Þar sem Docker er nú vel við lýði í þróunarheiminum er hægt að keyra næstum hvað sem er með Docker. Mín lausn er að hafa Jenkins í Docker og geta keyrt aðra Docker gáma. Þessi spurning byrjaði að vera spurð aftur árið 2013 í greininni "
Í stuttu máli, þú þarft bara að setja Docker sjálft upp í virka ílát og tengja skrána /var/run/docker.sock
.
Hér er dæmi um Dockerfile sem reyndist 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
Þannig fengum við Docker gám sem getur framkvæmt Docker skipanir á hýsingarvélinni.
Byggja uppsetningu
Ekki er langt síðan Jenkins fékk tækifæri til að lýsa reglum sínum með því að nota
Svo skulum við setja sérstaka Dockerfile í geymsluna sjálfa, sem mun innihalda öll nauðsynleg bókasöfn fyrir bygginguna. Þannig getur verktaki sjálfur undirbúið endurtekið umhverfi og þarf ekki að biðja OPS um að setja upp ákveðna útgáfu af Node.JS á hýsilinn.
FROM node:12.10.0-alpine
RUN npm install yarn -g
Þessi smíðamynd hentar flestum Node.JS forritum. Hvað ef þú þarft til dæmis mynd fyrir JVM verkefni með Sonar skanni innifalinn? Þér er frjálst að velja þá íhluti sem þú þarft fyrir samsetningu.
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/
Við lýstum samsetningarumhverfinu, en hvað hefur Jenkins með það að gera? Og umboðsmenn Jenkins geta unnið með slíkar Docker myndir og smíðað þær innbyrðis.
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"
}
}
Tilskipun agent
notar eign docker
þar sem þú getur tilgreint:
- nafn samsetningarílátsins samkvæmt nafnastefnu þinni;
- rök sem þarf til að keyra byggingargáminn, þar sem í okkar tilviki festum við núverandi möppu sem möppu inni í gámnum.
Og þegar í byggingarskrefunum tilgreinum við hvaða skipanir á að framkvæma innan Docker byggingarfulltrúans. Þetta getur verið hvað sem er, svo ég ræsi líka uppsetningu forrita með því að nota ansible.
Hér að neðan vil ég sýna almenna Jenkinsskrá sem einfalt Node.JS forrit getur byggt.
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()
}
}
}
Hvað gerðist?
Þökk sé þessari aðferð leystum við eftirfarandi vandamál:
- Stillingartími umhverfissamsetningar minnkar í 10 - 15 mínútur á hvert verkefni;
- algjörlega endurtekið forritsbyggingarumhverfi, þar sem þú getur byggt það upp á þennan hátt á heimatölvunni þinni;
- það eru engin vandamál með árekstra milli mismunandi útgáfur af samsetningarverkfærum;
- alltaf hreint vinnusvæði sem stíflast ekki.
Lausnin sjálf er einföld og augljós og gerir þér kleift að fá nokkra kosti. Já, aðgangsþröskuldurinn hefur hækkað aðeins miðað við einfaldar skipanir fyrir samsetningar, en nú er trygging fyrir því að það verði alltaf byggt og verktaki getur sjálfur valið allt sem er nauðsynlegt fyrir byggingarferli hans.
Þú getur líka notað myndina sem ég safnaði
Við ritun þessarar greinar kom upp umræða um að nota umboðsmenn á ytri netþjónum til að hlaða ekki aðalhnút með viðbót
Heimild: www.habr.com