Mae llawer o erthyglau ar Habré am Jenkins, ond ychydig sy'n disgrifio enghreifftiau o sut mae Jenkins ac asiantau docwyr yn gweithio. Pob offeryn adeiladu prosiect poblogaidd fel
Heddiw mae ateb i’r broblem: mae Jenkins 2 yn wych am weithio gydag ef
Pam wnes i ddechrau datrys y broblem hon?
Gan ein bod mewn cwmni
- llawer iawn o amser rhedeg y mae datblygwyr yn anghofio ei lanhau;
- mae gwrthdaro rhwng gwahanol fersiynau o'r un amseroedd rhedeg;
- Mae angen set wahanol o gydrannau ar bob datblygwr.
Mae problemau eraill, ond gadewch imi ddweud wrthych am yr ateb.
Jenkins yn Docker
Gan fod Docker bellach wedi'i hen sefydlu yn y byd datblygu, gellir rhedeg bron unrhyw beth gan ddefnyddio Docker. Fy ateb yw cael Jenkins yn Docker a gallu rhedeg cynwysyddion Docker eraill. Dechreuwyd gofyn y cwestiwn hwn yn ôl yn 2013 yn yr erthygl “
Yn fyr, does ond angen i chi osod Docker ei hun mewn cynhwysydd sy'n gweithio a gosod y ffeil /var/run/docker.sock
.
Dyma enghraifft Dockerfile a drodd allan i 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
Felly, cawsom gynhwysydd Docker a all weithredu gorchmynion Docker ar y peiriant gwesteiwr.
Adeiladu setup
Ddim yn bell yn ôl cafodd Jenkins y cyfle i ddisgrifio ei reolau gan ddefnyddio
Felly gadewch i ni roi Dockerfile arbennig yn yr ystorfa ei hun, a fydd yn cynnwys yr holl lyfrgelloedd sy'n angenrheidiol ar gyfer yr adeiladu. Fel hyn, gall y datblygwr ei hun baratoi amgylchedd ailadroddadwy ac ni fydd yn rhaid iddo ofyn i OPS osod fersiwn benodol o Node.JS ar y gwesteiwr.
FROM node:12.10.0-alpine
RUN npm install yarn -g
Mae'r ddelwedd adeiladu hon yn addas ar gyfer y rhan fwyaf o gymwysiadau Node.JS. Beth os, er enghraifft, mae angen delwedd arnoch ar gyfer prosiect JVM gyda sganiwr Sonar wedi'i gynnwys y tu mewn? Rydych chi'n rhydd i ddewis y cydrannau sydd eu hangen arnoch chi ar gyfer cydosod.
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/
Disgrifiasom amgylchedd y cynulliad, ond beth sydd gan Jenkins i'w wneud ag ef? A gall asiantau Jenkins weithio gyda delweddau Docker o'r fath a'u hadeiladu'n fewnol.
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"
}
}
Cyfarwyddeb agent
yn defnyddio eiddo docker
lle gallwch chi nodi:
- enw'r cynhwysydd cydosod yn unol â'ch polisi enwi;
- dadleuon sydd eu hangen i redeg y cynhwysydd adeiladu, lle yn ein hachos ni rydym yn gosod y cyfeiriadur cyfredol fel cyfeiriadur y tu mewn i'r cynhwysydd.
Ac eisoes yn y camau adeiladu rydym yn nodi pa orchmynion i'w gweithredu y tu mewn i asiant adeiladu Docker. Gall hyn fod yn unrhyw beth, felly rwyf hefyd yn lansio defnydd cais gan ddefnyddio ansible.
Isod rwyf am ddangos ffeil Jenkins generig y gall cymhwysiad Node.JS syml ei adeiladu.
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()
}
}
}
Beth ddigwyddodd?
Diolch i'r dull hwn, rydym wedi datrys y problemau canlynol:
- mae amser cyfluniad y cynulliad amgylchedd yn cael ei leihau i 10 - 15 munud fesul prosiect;
- amgylchedd adeiladu cymwysiadau cwbl ailadroddadwy, oherwydd gallwch chi ei adeiladu fel hyn ar eich cyfrifiadur lleol;
- nid oes unrhyw broblemau gyda gwrthdaro rhwng gwahanol fersiynau o offer cydosod;
- man gwaith glân bob amser nad yw'n rhwystredig.
Mae'r ateb ei hun yn syml ac yn amlwg ac yn caniatáu ichi gael rhai manteision. Ydy, mae'r trothwy mynediad wedi codi ychydig o'i gymharu â gorchmynion syml ar gyfer gwasanaethau, ond nawr mae gwarant y bydd bob amser yn cael ei adeiladu a gall y datblygwr ei hun ddewis popeth sy'n angenrheidiol ar gyfer ei broses adeiladu.
Gallwch hefyd ddefnyddio'r ddelwedd a gasglwyd gennyf
Wrth ysgrifennu'r erthygl hon, cododd trafodaeth am ddefnyddio asiantau ar weinyddion pell er mwyn peidio â llwytho'r prif nod gan ddefnyddio ategyn
Ffynhonnell: hab.com