Хабреде Дженкинс туралы көптеген мақалалар бар, бірақ Дженкинс пен докер агенттерінің қалай жұмыс істейтіні туралы мысалдар аз. Барлық танымал жоба құру құралдары сияқты
Бүгінде мәселенің шешімі бар: Дженкинс 2 онымен жұмыс істеуде тамаша
Неліктен мен бұл мәселені шеше бастадым?
Біз серіктестікте болғандықтан
- әзірлеушілер тазалауды ұмытып кететін жұмыс уақытының үлкен көлемі;
- бірдей орындалу уақыттарының әртүрлі нұсқалары арасында қайшылықтар бар;
- Әрбір әзірлеушіге әртүрлі компоненттер жиынтығы қажет.
Басқа мәселелер бар, бірақ шешімін айтайын.
Докердегі Дженкинс
Docker қазір даму әлемінде жақсы орнатылғандықтан, Docker көмегімен кез келген дерлік іске қосуға болады. Менің шешімім - Дженкинстің Docker-де болуы және басқа Docker контейнерлерін іске қосу. Бұл сұрақ 2013 жылы «Мақалада қойыла бастады.
Қысқасы, сізге Docker-тің өзін жұмыс істейтін контейнерге орнатып, файлды орнату қажет /var/run/docker.sock
.
Міне, Дженкинс үшін пайда болған Dockerfile мысалы.
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/
Біз құрастыру ортасын сипаттадық, бірақ Дженкинстің оған қандай қатысы бар? Дженкинс агенттері мұндай Docker кескіндерімен жұмыс істей алады және оларды ішкі түрде құрастыра алады.
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 минутқа дейін қысқарады;
- толығымен қайталанатын қолданбаларды құрастыру ортасы, өйткені оны жергілікті компьютерде осылай құрастыруға болады;
- құрастыру құралдарының әртүрлі нұсқалары арасындағы қайшылықтармен проблемалар жоқ;
- әрқашан бітеліп қалмайтын таза жұмыс кеңістігі.
Шешімнің өзі қарапайым және айқын және кейбір артықшылықтарды алуға мүмкіндік береді. Иә, жиындарға арналған қарапайым пәрмендермен салыстырғанда кіру шегі сәл көтерілді, бірақ қазір оның әрқашан құрастырылатынына және әзірлеуші өзінің құрастыру процесі үшін қажеттінің бәрін таңдай алатынына кепілдік бар.
Мен жинаған суретті де пайдалануға болады
Осы мақаланы жазу кезінде плагин арқылы негізгі түйінді жүктемеу үшін қашықтағы серверлерде агенттерді пайдалану туралы пікірталас туындады.
Ақпарат көзі: www.habr.com