Adunay daghang mga artikulo sa Habré bahin kang Jenkins, apan pipila ra ang naghulagway sa mga pananglitan kung giunsa ang pagtrabaho sa Jenkins ug mga ahente sa pantalan. Ang tanan nga bantog nga mga himan sa pagtukod sa proyekto sama sa
Karon adunay solusyon sa problema: Ang Jenkins 2 maayo sa pagtrabaho
Ngano nga gisugdan nako pagsulbad kini nga problema?
Since naa mi kauban
- usa ka dako nga kantidad sa runtime nga nakalimtan sa mga developer nga limpyohan;
- adunay mga panagbangi tali sa lainlaing mga bersyon sa parehas nga runtime;
- Ang matag developer nanginahanglan usa ka lainlaing hugpong sa mga sangkap.
Adunay ubang mga problema, apan sultihan ko ikaw bahin sa solusyon.
Jenkins sa Docker
Tungod kay ang Docker maayo na karon nga natukod sa kalibutan sa pag-uswag, halos bisan unsang butang mahimong ipadagan gamit ang Docker. Ang akong solusyon mao ang pagbaton sa Jenkins sa Docker ug makahimo sa pagpadagan sa ubang mga sudlanan sa Docker. Kini nga pangutana nagsugod sa pagpangutana balik sa 2013 sa artikulo nga "
Sa laktud, kinahanglan nimo nga i-install ang Docker mismo sa usa ka sulud nga nagtrabaho ug i-mount ang file /var/run/docker.sock
.
Ania ang usa ka pananglitan nga Dockerfile nga nahimo alang sa 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
Sa ingon, nakakuha kami usa ka sudlanan sa Docker nga mahimo’g ipatuman ang mga mando sa Docker sa host machine.
Pagtukod og setup
Dili pa lang dugay nakuha ni Jenkins ang oportunidad sa paghulagway sa mga lagda niini gamit
Busa ibutang nato ang usa ka espesyal nga Dockerfile sa repositoryo mismo, nga maglangkob sa tanang mga librarya nga gikinahanglan alang sa pagtukod. Niining paagiha, ang developer mismo makaandam sa usa ka balikbalik nga palibot ug dili kinahanglan nga mangutana sa OPS sa pag-instalar sa usa ka piho nga bersyon sa Node.JS sa host.
FROM node:12.10.0-alpine
RUN npm install yarn -g
Kini nga imahe sa pagtukod angay alang sa kadaghanan sa mga aplikasyon sa Node.JS. Unsa kaha kung, pananglitan, kinahanglan nimo ang usa ka imahe alang sa usa ka proyekto sa JVM nga adunay usa ka Sonar scanner nga gilakip sa sulod? Ikaw gawasnon sa pagpili sa mga sangkap nga imong gikinahanglan alang sa asembliya.
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/
Among gihulagway ang palibot sa asembliya, apan unsa may kalabotan niini ni Jenkins? Ug ang mga ahente sa Jenkins mahimong magtrabaho sa ingon nga mga imahe sa Docker ug matukod kini sa sulod.
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"
}
}
Direktiba agent
naggamit sa kabtangan docker
diin mahimo nimong itakda:
- ang ngalan sa sudlanan sa asembliya sumala sa imong palisiya sa pagngalan;
- mga argumento nga gikinahanglan sa pagpadagan sa pagtukod nga sudlanan, diin sa among kaso among gi-mount ang kasamtangan nga direktoryo isip usa ka direktoryo sulod sa sudlanan.
Ug naa na sa mga lakang sa pagtukod gipakita namon kung unsang mga mando ang ipatuman sa sulod sa ahente sa pagtukod sa Docker. Mahimo kini nga bisan unsa, mao nga naglansad usab ako sa pag-deploy sa aplikasyon gamit ang ansible.
Sa ubos gusto nakong ipakita ang usa ka generic nga Jenkinsfile nga mahimo sa usa ka yano nga aplikasyon sa Node.JS.
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()
}
}
}
Unsay nahitabo?
Salamat niini nga pamaagi, nasulbad namo ang mosunod nga mga problema:
- Ang oras sa pag-configure sa asembliya sa palibot gipamubu sa 10 - 15 minuto matag proyekto;
- usa ka bug-os nga mabalikbalik nga aplikasyon sa pagtukod sa palibot, tungod kay mahimo nimo kini tukuron sa imong lokal nga kompyuter;
- walay mga problema sa mga panagbangi tali sa lain-laing mga bersyon sa mga himan sa asembliya;
- kanunay usa ka limpyo nga workspace nga dili mabara.
Ang solusyon mismo yano ug klaro ug nagtugot kanimo nga makakuha og pipila ka mga bentaha. Oo, ang entry threshold mitaas og gamay kon itandi sa yano nga mga sugo alang sa mga asembliya, apan karon adunay usa ka garantiya nga kini kanunay nga matukod ug ang developer mismo makapili sa tanan nga gikinahanglan alang sa iyang proseso sa pagtukod.
Mahimo usab nimo gamiton ang imahe nga akong nakolekta
Samtang gisulat kini nga artikulo, mitumaw ang usa ka diskusyon bahin sa paggamit sa mga ahente sa hilit nga mga server aron dili ma-load ang master node gamit ang usa ka plugin
Source: www.habr.com