Aya seueur tulisan ngeunaan Habré ngeunaan Jenkins, tapi sakedik ngajelaskeun conto kumaha Jenkins sareng agén docker damel. Sadaya alat ngawangun proyék populér sapertos
Dinten aya solusi pikeun masalah: Jenkins 2 hébat dina gawé bareng
Naha kuring mimiti ngarengsekeun masalah ieu?
Kusabab urang di parusahaan
- jumlah badag runtime nu pamekar poho pikeun ngabersihan;
- aya konflik antara versi béda tina runtimes sarua;
- Unggal pamekar peryogi sakumpulan komponén anu béda.
Aya masalah sejen, tapi hayu atuh ngabejaan Anjeun tentang solusi.
Jenkins di Docker
Kusabab Docker ayeuna parantos mapan di dunya pamekaran, ampir sadayana tiasa dijalankeun nganggo Docker. Solusi kuring nyaéta gaduh Jenkins di Docker sareng tiasa ngajalankeun wadah Docker anu sanés. Patarosan ieu mimiti ditaroskeun deui dina 2013 dina tulisan "
Pondokna, anjeun ngan ukur kedah masang Docker sorangan dina wadah kerja sareng pasang filena /var/run/docker.sock
.
Ieu conto Dockerfile anu tétéla pikeun 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
Janten, kami ngagaduhan wadah Docker anu tiasa ngalaksanakeun paréntah Docker dina mesin host.
Setélan ngawangun
Teu lila pisan Jenkins meunang kasempetan pikeun ngajelaskeun aturan na ngagunakeun
Ku kituna hayu urang nempatkeun hiji Dockerfile husus dina Repository sorangan, nu bakal ngandung sakabéh perpustakaan diperlukeun pikeun ngawangun. Ku cara ieu, pamekar sorangan tiasa nyiapkeun lingkungan anu tiasa diulang sareng henteu kedah naroskeun OPS pikeun masang versi khusus Node.JS dina host.
FROM node:12.10.0-alpine
RUN npm install yarn -g
Gambar ngawangun ieu cocog pikeun kalolobaan aplikasi Node.JS. Kumaha upami, contona, anjeun peryogi gambar pikeun proyék JVM kalayan panyeken Sonar kalebet di jero? Anjeun bébas milih komponén nu peryogi pikeun assembly.
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/
Urang digambarkeun lingkungan assembly, tapi naon Jenkins kudu ngalakukeun jeung eta? Sareng agén Jenkins tiasa damel sareng gambar Docker sapertos kitu sareng ngawangun aranjeunna sacara 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"
}
}
Pitunjuk agent
ngagunakeun harta docker
dimana anjeun tiasa nangtukeun:
- nami wadahna assembly nurutkeun kawijakan ngaran anjeun;
- argumen diperlukeun pikeun ngajalankeun wadahna ngawangun, dimana bisi urang Gunung diréktori ayeuna salaku diréktori jero wadahna.
Sareng parantos dina léngkah-léngkah ngawangun kami nunjukkeun paréntah mana anu kedah dieksekusi di jero agén ngawangun Docker. Ieu tiasa nanaon, janten kuring ogé ngaluncurkeun panyebaran aplikasi nganggo ansible.
Handap Abdi hoyong nembongkeun Jenkinsfile generik yén aplikasi Node.JS basajan bisa ngawangun.
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()
}
}
}
Aya naon?
Hatur nuhun kana metoda ieu, urang ngajawab masalah di handap ieu:
- waktos konfigurasi assembly lingkungan diréduksi jadi 10 - 15 menit per proyék;
- lingkungan ngawangun aplikasi sagemblengna repeatable, saprak anjeun bisa ngawangun eta cara kieu dina komputer lokal Anjeun;
- teu aya masalah sareng konflik antara versi béda tina parabot assembly;
- salawasna hiji workspace bersih nu teu meunang clogged.
Solusi sorangan basajan tur atra tur ngidinan Anjeun pikeun meunangkeun sababaraha kaunggulan. Leres, bangbarung éntri parantos ningkat sakedik dibandingkeun sareng paréntah saderhana pikeun majelis, tapi ayeuna aya jaminan yén éta bakal salawasna diwangun sareng pamekar nyalira tiasa milih sadayana anu dipikabutuh pikeun prosés ngawangunna.
Anjeun oge bisa make gambar kuring dikumpulkeun
Nalika nyerat tulisan ieu, timbul diskusi ngeunaan ngagunakeun agén dina server jauh supados henteu ngamuat master node nganggo plugin.
sumber: www.habr.com