Хабреде Дженкинс жөнүндө көптөгөн макалалар бар, бирок Дженкинс жана докер агенттери кандай иштээри жөнүндө мисалдар аз. сыяктуу бардык популярдуу долбоор куруу куралдары
Бүгүнкү күндө маселенин бир чечими бар: Jenkins 2 менен иштөө абдан жакшы
Эмне үчүн мен бул маселени чече баштадым?
Биз компанияда болгондуктан
- иштеп чыгуучулар тазалоону унуткан чоң көлөмдөгү иштөө убактысы;
- бирдей иштөө убакыттарынын ар кандай версияларынын ортосунда карама-каршылыктар бар;
- Ар бир иштеп чыгуучуга ар кандай компоненттердин топтому керек.
Башка көйгөйлөр бар, бирок чечүү жолун айтып берейин.
Дженкинс Докерде
Докер азыр өнүгүү дүйнөсүндө жакшы орнотулгандыктан, Docker аркылуу дээрлик бардык нерсени иштетсе болот. Менин чечимим Дженкинстин Докерде болушу жана башка Docker контейнерлерин иштете алуу. Бул суроо кайра 2013-жылы макалада бериле баштаган.
Кыскача айтканда, сиз Dockerдин өзүн жумушчу контейнерге орнотуп, файлды орнотууңуз керек /var/run/docker.sock
.
Бул жерде Дженкинс үчүн чыккан Докер файлынын мисалы.
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
Ошентип, биз хост машинасында Docker буйруктарын аткара ала турган Docker контейнерине ээ болдук.
Куруу орнотуу
Жакында Дженкинс өзүнүн эрежелерин колдонуу менен сүрөттөөгө мүмкүнчүлүк алды
Ошентип, келгиле, репозиторийдин өзүнө атайын Dockerfile салалы, анда курууга керектүү бардык китепканалар камтылат. Ошентип, иштеп чыгуучу өзү кайталануучу чөйрөнү даярдай алат жана OPS'тен Node.JSтин белгилүү бир версиясын хостко орнотууну талап кылбайт.
FROM node:12.10.0-alpine
RUN npm install yarn -g
Бул куруу сүрөтү Node.JS колдонмолорунун көпчүлүгүнө ылайыктуу. Мисалы, сизге Sonar сканери бар JVM долбоору үчүн сүрөт керек болсочы? Сиз монтаждоо үчүн керектүү компоненттерди тандоодо эркин.
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/
Биз чогулуш чөйрөсүн сүрөттөп бердик, бирок ага Дженкинстин кандай тиешеси бар? Жана Дженкинс агенттери мындай Докер сүрөттөрү менен иштеп, аларды ички түзө алышат.
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"
}
}
Директива agent
мүлктү колдонот docker
кайда белгилей аласыз:
- сиздин ат коюу саясатына ылайык чогултуу контейнеринин аталышы;
- куруу контейнерин иштетүү үчүн зарыл болгон аргументтер, биздин учурда биз учурдагы каталогду контейнердин ичиндеги каталог катары орнотобуз.
Куруу кадамдарында биз Docker куруу агентинин ичинде кайсы буйруктарды аткарууну көрсөтөбүз. Бул бардык нерсе болушу мүмкүн, андыктан мен ansible аркылуу тиркемени жайылтууну ишке киргизем.
Төмөндө мен жөнөкөй Node.JS тиркемеси кура ала турган жалпы Jenkinsfile көрсөткүм келет.
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()
}
}
}
Не болду?
Бул ыкманын аркасында биз төмөнкү көйгөйлөрдү чечтик:
- айлана-чөйрөнү чогултуу конфигурациясынын убактысы бир долбоорго 10 - 15 мүнөткө чейин кыскарган;
- толугу менен кайталануучу тиркеме куруу чөйрөсү, анткени сиз аны жергиликтүү компьютериңизде ушундай жол менен кура аласыз;
- монтаждоо куралдарынын ар кандай версияларынын ортосундагы чыр-чатактар менен эч кандай көйгөйлөр жок;
- ар дайым тыгылып калбаган таза жумушчу мейкиндиги.
Чечимдин өзү жөнөкөй жана айкын жана кээ бир артыкчылыктарды алууга мүмкүндүк берет. Ооба, кирүү босогосу жыйындар үчүн жөнөкөй буйруктарга салыштырмалуу бир аз көтөрүлдү, бирок азыр ал ар дайым курула турганына кепилдик бар жана иштеп чыгуучу өзү куруу процесси үчүн зарыл болгон нерселердин баарын тандап алат.
Мен чогулткан сүрөттү да колдонсоңуз болот
Бул макаланы жазып жатканда, плагин аркылуу башкы түйүндү жүктөбөш үчүн, алыскы серверлерде агенттерди колдонуу жөнүндө талкуу пайда болду
Source: www.habr.com