Ana akeh artikel ing Habré babagan Jenkins, nanging sawetara sing njlèntrèhaké conto cara kerja Jenkins lan agen docker. Kabeh alat mbangun proyek populer kaya
Dina iki ana solusi kanggo masalah: Jenkins 2 gedhe ing karya karo
Yagene aku miwiti ngrampungake masalah iki?
Awit kita ing perusahaan
- jumlah gedhe saka runtime sing gawe lali kanggo ngresiki;
- ana konflik antarane versi beda saka runtimes padha;
- Saben pangembang mbutuhake macem-macem komponen.
Ana masalah liyane, nanging mugi kula pitutur marang kowe bab solusi.
Jenkins ing Docker
Wiwit Docker saiki wis mapan ing jagad pangembangan, meh kabeh bisa ditindakake nggunakake Docker. Solusiku yaiku nduwe Jenkins ing Docker lan bisa mbukak wadah Docker liyane. Pitakonan iki wiwit ditakoni ing taun 2013 ing artikel "
Ing cendhak, sampeyan mung kudu nginstal Docker dhewe ing wadhah sing bisa digunakake lan pasang file kasebut /var/run/docker.sock
.
Iki minangka conto Dockerfile sing dadi 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
Mangkono, kita entuk wadhah Docker sing bisa nglakokake perintah Docker ing mesin host.
Nggawe persiyapan
Ora suwe Jenkins entuk kesempatan kanggo njlèntrèhaké aturan nggunakake
Dadi ayo sijine Dockerfile khusus ing repositori kasebut, sing bakal ngemot kabeh perpustakaan sing dibutuhake kanggo mbangun. Kanthi cara iki, pangembang dhewe bisa nyiyapake lingkungan sing bisa diulang lan ora kudu njaluk OPS kanggo nginstal versi Node.JS tartamtu ing host.
FROM node:12.10.0-alpine
RUN npm install yarn -g
Gambar mbangun iki cocok kanggo umume aplikasi Node.JS. Apa yen, contone, sampeyan kudu gambar kanggo project JVM karo scanner Sonar klebu nang? Sampeyan bebas milih komponen sing dibutuhake kanggo perakitan.
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/
We diterangake lingkungan Déwan, nanging apa Jenkins apa karo? Lan agen Jenkins bisa nggarap gambar Docker kasebut lan mbangun kanthi 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"
}
}
Petunjuk agent
nggunakake properti docker
ngendi sampeyan bisa nemtokake:
- jeneng wadhah perakitan miturut kabijakan jeneng sampeyan;
- argumen sing dibutuhake kanggo mbukak wadhah mbangun, ing ngendi ing kasus kita, kita masang direktori saiki minangka direktori ing njero wadhah.
Lan wis ana ing langkah-langkah mbangun, kita nuduhake perintah sing kudu dieksekusi ing agen mbangun Docker. Iki bisa dadi apa wae, mula aku uga miwiti panyebaran aplikasi nggunakake ansible.
Ing ngisor iki aku pengin nuduhake Jenkinsfile umum sing bisa dibangun aplikasi Node.JS sing prasaja.
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()
}
}
}
Ana apa?
Thanks kanggo metode iki, kita ngrampungake masalah ing ngisor iki:
- wektu konfigurasi Déwan lingkungan suda kanggo 10 - 15 menit saben project;
- lingkungan mbangun aplikasi rampung repeatable, wiwit sampeyan bisa mbangun cara iki ing komputer lokal;
- ora ana masalah karo konflik antarane macem-macem versi piranti perakitan;
- tansah papan kerja sing resik sing ora macet.
Solusi kasebut prasaja lan jelas lan ngidini sampeyan entuk sawetara kaluwihan. Ya, ambang entri wis mundhak sithik dibandhingake karo prentah sing gampang kanggo majelis, nanging saiki ana jaminan manawa bakal dibangun lan pangembang dhewe bisa milih kabeh sing dibutuhake kanggo proses mbangun.
Sampeyan uga bisa nggunakake gambar sing diklumpukake
Nalika nulis artikel iki, ana diskusi babagan nggunakake agen ing server remot supaya ora mbukak simpul master nggunakake plugin.
Source: www.habr.com