
Ziningi izindatshana ezimayelana no-Habr mayelana noJenkins, kodwa zimbalwa ezichaza isibonelo sendlela ama-ejenti akwa-Jenkins nama-Docker asebenza ngayo. Wonke amathuluzi okwakha amaphrojekthi adumile afana , , , nabanye bangakha yonke into ezitsheni. Kodwa kuthiwani ngoJenkins?
Namuhla kunesixazululo senkinga: Jenkins 2 muhle ekusebenzeni naye Kulesi sihloko, ngifuna ukwabelana ngolwazi lwami futhi ngikubonise ukuthi ungakwenza kanjani lokhu ngokwakho.
Kungani ngiqale ukuxazulula le nkinga?
Njengoba sisenkampanini Njengoba sisebenzisa ubuchwepheshe obuhlukahlukene, kufanele sigcine izinguqulo ezihlukene ze-Node.JS, Gradle, Ruby, JDK, nezinye emshinini wokwakha. Kodwa izingxabano zenguqulo ngokuvamile azinakugwenywa. Yize ungahle usho ukuthi kukhona abaphathi benguqulo abahlukahlukene njenge-nvm ne-rvm, abalona ucezu lwekhekhe njalo, futhi lezi zixazululo zinezinkinga zazo:
- umthamo omkhulu wezikhathi zokusebenza abathuthukisi abakhohlwa ukuzihlanza;
- kukhona ukungqubuzana phakathi kwezinguqulo ezahlukene zezikhathi zokusebenza ezifanayo;
- Unjiniyela ngamunye udinga isethi ehlukile yezingxenye.
Zikhona ezinye izinkinga, kodwa ake ngikutshele ngesixazululo.
UJenkins e-Docker
Njengoba i-Docker isisungulwe kahle emhlabeni wokuthuthuka, cishe yonke into ingaqhutshwa kusetshenziswa i-Docker. Isixazululo sami ukuthi ngibe noJenkins ku-Docker futhi ngikwazi ukusebenzisa ezinye iziqukathi ze-Docker. Lo mbuzo waqala ukuphendulwa emuva ngo-2013 esihlokweni esithi "".
Ngamafuphi, udinga nje ukufaka i-Docker ngokwayo esitsheni esisebenzayo bese ufaka ifayela /var/run/docker.sock.
Nasi isibonelo se-Dockerfile ephumele ku-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 jenkinsNgakho-ke, sithole isitsha se-Docker esingakhipha imiyalo ye-Docker emshinini wokusingathwa.
Yakha isethaphu
Kungekudala, uJenkins uthole ikhono lokuchaza imithetho yayo esebenzisa i-syntax, eyenza kube lula ukushintsha iskripthi sokwakha bese usigcina endaweni yokugcina.
Ngakho-ke ake sibeke i-Dockerfile ekhethekile endaweni yokugcina, equkethe yonke imitapo yolwazi edingekayo ekwakheni. Ngale ndlela, umthuthukisi angalungiselela indawo ephindaphindwayo ngaphandle kokuthi acele i-OPS ukuthi ifake inguqulo ethile ye-Node.JS kumsingathi.
FROM node:12.10.0-alpine
RUN npm install yarn -gLesi sithombe sokwakha sifanelekele izinhlelo zokusebenza eziningi ze-Node.JS. Kodwa kuthiwani uma, ngokwesibonelo, udinga isithombe se-JVM sephrojekthi eneskena se-Sonar esihlanganisiwe? Ukhululekile ukukhetha izingxenye ozidingayo ekwakheni.
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/
Siyichazile indawo yokwakha, kodwa uJenkins uhlangene ngani nayo? Ama-ejenti we-Jenkins angasebenza nalezi zithombe ze-Docker futhi akhe ngaphakathi kwazo.
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"
}
}Isiqondiso agent isebenzisa impahla docker, lapho ungacacisa khona:
- igama lesiqukathi somhlangano ngokwenqubomgomo yakho yokuqamba;
- izimpikiswano ezidingekayo ukuze kusetshenziswe isiqukathi sokwakha, lapho kithi sikhweza uhla lwemibhalo lwamanje njengohla lwemibhalo ngaphakathi kwesiqukathi.
Futhi ezinyathelweni zokwakha, sicacisa ukuthi yimiphi imiyalo okufanele isebenze ngaphakathi kwe-ejenti yokwakha ye-Docker. Lokhu kungaba noma yini, ngakho-ke futhi ngisebenzisa ukuthunyelwa kwezinhlelo zokusebenza ngisebenzisa i-Ansible.
Ngezansi ngifuna ukukhombisa i-Jenkinsfile evamile engakha uhlelo lokusebenza olulula lwe-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()
}
}
}Pho kwenzekani?
Sisebenzisa le ndlela, saxazulula izinkinga ezilandelayo:
- isikhathi sokumisa indawo yokwakha sincishisiwe sibe yimizuzu eyi-10-15 iphrojekthi ngayinye;
- indawo yokwakha ephindaphindwayo ngokugcwele, njengoba ingabuye yakhiwe kukhompyutha yendawo;
- azikho izinkinga ngezingxabano phakathi kwezinguqulo ezahlukene zamathuluzi okwakha;
- njalo indawo yokusebenza ehlanzekile engamidi.
Isixazululo ngokwaso silula futhi sisobala, futhi sinikeza izinzuzo kuphela. Yebo, umgoqo wokungena uphakeme kancane kunemiyalelo yokwakha elula, kodwa manje kunesiqinisekiso sokuthi isakhiwo sizohlala sisebenza, futhi unjiniyela angakhetha yonke into ayidingayo ngenqubo yabo yokwakha.
Ungasebenzisa futhi isithombe engisihlanganisile. Yonke imithombo ivuliwe futhi ivuliwe .
Ngenkathi kubhalwa lesi sihloko, kube nengxoxo mayelana nokusebenzisa ama-ejenti kumaseva akude ukugwema ukulayisha i-master node nge-plugin. Kodwa ngizokutshela ngalokhu esikhathini esizayo.
Source: www.habr.com
