Дар бораи Ҳабре дар бораи Ҷенкинс мақолаҳои зиёде мавҷуданд, аммо чанде аз онҳо мисолҳои чӣ гуна кор кардани Ҷенкинс ва агентҳои докерро тавсиф мекунанд. Ҳама асбобҳои маъмули сохтани лоиҳа ба монанди
Имрӯз роҳи ҳалли мушкилот вуҷуд дорад: Ҷенкинс 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 мувофиқ аст. Чӣ мешавад, агар, масалан, ба шумо тасвир барои лоиҳаи JVM бо сканери Sonar дар дохили он лозим аст? Шумо метавонед ҷузъҳои барои васлкунӣ лозимиро интихоб кунед.
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 ҷойгиркунии барномаҳоро оғоз мекунам.
Дар зер ман мехоҳам як Jenkinsfile-и умумиеро нишон диҳам, ки барномаи оддии Node.JS метавонад созад.
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 дақиқа кам карда мешавад;
- муҳити комилан такроршавандаи сохтани барнома, зеро шумо метавонед онро бо ин роҳ дар компютери маҳаллии худ созед;
- дар байни версияҳои гуногуни асбобҳои васлкунӣ мушкилот вуҷуд надорад;
- ҳамеша як фазои кории тоза, ки баста намешавад.
Худи ҳалли он оддӣ ва возеҳ аст ва ба шумо имкон медиҳад, ки баъзе бартариҳоро ба даст оред. Бале, ҳадди вуруд дар муқоиса бо фармонҳои оддии маҷлисҳо каме баланд шуд, аммо ҳоло кафолат вуҷуд дорад, ки он ҳамеша сохта мешавад ва худи таҳиякунанда метавонад ҳама чизеро, ки барои раванди сохтани худ зарур аст, интихоб кунад.
Шумо инчунин метавонед тасвиреро, ки ман ҷамъ овардаам, истифода баред
Ҳангоми навиштани ин мақола баҳс дар бораи истифодаи агентҳо дар серверҳои дурдаст ба миён омад, то гиреҳи асосӣ бо истифода аз плагин бор нашавад
Манбаъ: will.com