Li ser Habré di derbarê Jenkins de gelek gotar hene, lê hindik mînakan diyar dikin ka Jenkins û ajanên docker çawa dixebitin. Hemî amûrên avakirina projeya populer ên mîna
Îro çareseriyek ji pirsgirêkê re heye: Jenkins 2 di xebatê de pir baş e
Çima min dest bi çareserkirina vê pirsgirêkê kir?
Ji ber ku em di şirketê de ne
- hejmareke mezin ji dema xebitandinê ya ku pêşdebiran ji bîr dikin ku paqij bikin;
- nakokî di navbera guhertoyên cihêreng ên heman demê de hene;
- Her pêşdebir pêdivî bi komek pêkhateyên cûda heye.
Pirsgirêkên din jî hene, lê ez ji we re behsa çareseriyê bikim.
Jenkins li Docker
Ji ber ku Docker naha di cîhana pêşkeftinê de baş hatî damezrandin, hema hema her tişt dikare bi karanîna Docker were meşandin. Çareseriya min ev e ku Jenkins li Docker hebe û bikaribim konteynerên din ên Docker bimeşînin. Vê pirsê di sala 2013-an de di gotara "
Bi kurtasî, hûn tenê hewce ne ku Docker bixwe di konteynirek xebitandinê de saz bikin û pelê siwar bikin /var/run/docker.sock
.
Li vir mînakek Dockerfile ye ku ji bo Jenkins derketiye.
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
Bi vî rengî, me konteynirek Docker wergirt ku dikare fermanên Docker li ser makîneya mêvandar bicîh bîne.
Avakirina sazkirinê
Ne demek berê Jenkins fersendek wergirt ku qaîdeyên xwe bikar bîne
Ji ber vê yekê bila em Dockerfile-ya taybetî di depoyê de bixwe, ku dê hemî pirtûkxaneyên ku ji bo çêkirinê hewce ne vedihewîne. Bi vî rengî, pêşdebir bixwe dikare hawîrdorek dubarekirî amade bike û neçar e ku ji OPS bipirse ku guhertoyek taybetî ya Node.JS li ser mêvandar saz bike.
FROM node:12.10.0-alpine
RUN npm install yarn -g
Ev wêneya çêkirinê ji bo piraniya serîlêdanên Node.JS-ê maqûl e. Ger, mînakî, ji bo projeyek JVM-ya ku di hundurê de skanerek Sonar-ê tê de hebe, hûn hewceyê wêneyek hewce ne? Hûn azad in ku hûn hêmanên ku hûn ji bo kombûnê hewce ne hilbijêrin.
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/
Me hawirdora meclîsê diyar kir, lê çi têkiliya Jenkins bi wê re heye? Û nûnerên Jenkins dikarin bi van wêneyên Docker re bixebitin û wan di hundurê de ava bikin.
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"
}
}
Direktîf agent
milkê bikar tîne docker
ku hûn dikarin diyar bikin:
- navê konteynera meclîsê li gorî polîtîkaya navdêriya we;
- argûmanên ku ji bo xebitandina konteynera çêkirinê hewce ne, li cihê ku di doza me de em pelrêça heyî wekî pelrêçek di hundurê konteynerê de girêdidin.
Û jixwe di gavên avakirinê de em destnîşan dikin ka kîjan fermanan di hundurê nûnerê avakirina Docker de bicîh dikin. Ev dikare her tişt be, ji ber vê yekê ez jî bi karanîna ansible vesazkirina serîlêdanê dest pê dikim.
Li jêr ez dixwazim Jenkinsfile-ya gelemperî nîşan bidim ku serîlêdanek Node.JS-ya hêsan dikare ava bike.
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()
}
}
}
Çi qewimî?
Bi saya vê rêbazê, me pirsgirêkên jêrîn çareser kirin:
- dema veavakirina meclîsa jîngehê ji bo her projeyê 10 - 15 hûrdem kêm dibe;
- jîngehek avakirina serîlêdanê ya bi tevahî dubarekirî, ji ber ku hûn dikarin bi vî rengî li ser komputera xweya herêmî ava bikin;
- ti pirsgirêk bi nakokiyên di navbera guhertoyên cuda yên amûrên civîn hene;
- her gav cîhek xebata paqij a ku xitimî nabe.
Çareserî bi xwe hêsan û eşkere ye û dihêle hûn hin avantajan bistînin. Erê, sînorê têketinê li gorî fermanên hêsan ên ji bo meclîsan piçek zêde bûye, lê naha garantiyek heye ku ew ê her gav were çêkirin û pêşdebir bixwe dikare her tiştê ku ji bo pêvajoya avakirina wî hewce ye hilbijêrin.
Hûn dikarin wêneya ku min berhev kiriye jî bikar bînin
Di dema nivîsandina vê gotarê de, nîqaşek li ser karanîna ajanên li ser pêşkêşkerên dûr derket holê da ku bi karanîna pêvekek girêk master neyê barkirin.
Source: www.habr.com