جينڪنز بابت هيبري تي ڪيترائي مضمون آهن، پر ڪجھ مثال بيان ڪن ٿا ته ڪيئن جينڪنز ۽ ڊاڪر ايجنٽ ڪم ڪن ٿا. تمام مشهور پروجيڪٽ ٺاهڻ وارو اوزار جهڙوڪ
اڄ مسئلو جو هڪ حل آهي: جينڪنز 2 سان گڏ ڪم ڪرڻ ۾ وڏو آهي
مون هن مسئلي کي حل ڪرڻ ڇو شروع ڪيو؟
جيئن ته اسان ڪمپني ۾ آهيون
- رن ٽائم جو هڪ وڏو مقدار جيڪو ڊولپر صاف ڪرڻ وساريندا آهن؛
- ساڳئي وقت جي مختلف نسخن جي وچ ۾ تڪرار آهن؛
- هر ڊولپر کي اجزاء جي مختلف سيٽ جي ضرورت آهي.
ٻيا مسئلا آهن، پر مون کي توهان کي حل بابت ٻڌايو.
جينڪنز ڊاڪر ۾
جيئن ته ڊڪر هاڻي ترقي جي دنيا ۾ چڱي طرح قائم آهي، تقريبا ڪجھ به ڊڪر استعمال ڪندي هلائي سگهجي ٿو. منهنجو حل اهو آهي ته جينڪنز کي ڊاکر ۾ رکڻ ۽ ٻين ڊاکر ڪنٽينرز کي هلائڻ جي قابل ٿي. اهو سوال 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 پاڻ کي مخزن ۾ رکون، جنهن ۾ سڀني لائبريرين جي تعمير لاء ضروري هوندي. هن طريقي سان، ڊولپر پاڻ هڪ ٻيهر قابل ماحول تيار ڪري سگهي ٿو ۽ ميزبان تي Node.JS جي مخصوص ورزن کي نصب ڪرڻ لاء OPS کان پڇڻ جي ضرورت نه هوندي.
FROM node:12.10.0-alpine
RUN npm install yarn -g
هي تعمير ٿيل تصوير اڪثر Node.JS ايپليڪيشنن لاءِ موزون آهي. ڇا جيڪڏهن، مثال طور، توهان کي 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
جتي توھان بيان ڪري سگھو ٿا:
- توهان جي نالي جي پاليسي مطابق اسيمبلي ڪنٽينر جو نالو؛
- بلڊ ڪنٽينر کي هلائڻ لاءِ دليلن جي ضرورت آهي، جتي اسان جي صورت ۾ اسان موجوده ڊاريڪٽري کي ڪنٽينر اندر ڊاريڪٽري طور نصب ڪيو.
۽ اڳ ۾ ئي تعمير جي مرحلن ۾ اسان ظاهر ڪيو ٿا ته ڪهڙن حڪمن تي عمل ڪرڻ لاء ڊاکر تعمير ايجنٽ جي اندر. اهو ڪجهه به ٿي سگهي ٿو، تنهن ڪري آئون پڻ جواب ڏيڻ وارو استعمال ڪندي ايپليڪيشن جي ترتيب شروع ڪريان ٿو.
هيٺ مان هڪ عام 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 منٽ في پروجيڪٽ؛
- هڪ مڪمل طور تي ورجائيندڙ ايپليڪيشن تعمير ماحول، ڇو ته توهان پنهنجي مقامي ڪمپيوٽر تي هن طريقي سان ٺاهي سگهو ٿا؛
- اسيمبلي اوزار جي مختلف نسخن جي وچ ۾ تڪرار سان ڪو به مسئلو ناهي؛
- هميشه هڪ صاف ڪم جي جڳهه جيڪا بند نه ٿيندي آهي.
حل پاڻ سادو ۽ پڌرو آهي ۽ توهان کي ڪجهه فائدا حاصل ڪرڻ جي اجازت ڏئي ٿو. ها، اسيمبلين لاءِ سادي حڪمن جي مقابلي ۾ داخلا جي حد ٿورو وڌي وئي آهي، پر هاڻي اتي هڪ گارنٽي آهي ته اهو هميشه تعمير ڪيو ويندو ۽ ڊولپر پاڻ هر شي کي چونڊي سگهي ٿو جيڪو هن جي تعمير جي عمل لاءِ ضروري آهي.
توھان پڻ استعمال ڪري سگھو ٿا تصوير جيڪا مون گڏ ڪئي آھي
هي مضمون لکڻ دوران، هڪ بحث پيدا ٿيو ايجنٽ استعمال ڪرڻ بابت ريموٽ سرورز تي جيئن ته پلگ ان استعمال ڪندي ماسٽر نوڊ کي لوڊ نه ڪيو وڃي.
جو ذريعو: www.habr.com