Jenkins ගැන Habré හි බොහෝ ලිපි ඇත, නමුත් Jenkins සහ docker නියෝජිතයන් ක්රියා කරන ආකාරය පිළිබඳ උදාහරණ කිහිපයක් විස්තර කරයි. වැනි සියලුම ජනප්රිය ව්යාපෘති ගොඩනැගීමේ මෙවලම්
අද ගැටලුවට විසඳුමක් තිබේ: Jenkins 2 සමඟ වැඩ කිරීමේදී විශිෂ්ටයි
මම මෙම ගැටලුව විසඳීමට පටන් ගත්තේ ඇයි?
අපි සමාගමක නිසා
- සංවර්ධකයින්ට පිරිසිදු කිරීමට අමතක වන විශාල ධාවන කාලය;
- එකම ධාවන කාලවල විවිධ අනුවාද අතර ගැටුම් පවතී;
- සෑම සංවර්ධකයෙකුටම විවිධ සංරචක කට්ටලයක් අවශ්ය වේ.
තවත් ගැටළු ඇත, නමුත් විසඳුම ගැන මම ඔබට කියමි.
ඩොකර් හි ජෙන්කින්ස්
Docker දැන් සංවර්ධන ලෝකයේ හොඳින් ස්ථාපිත වී ඇති බැවින්, Docker භාවිතයෙන් ඕනෑම දෙයක් පාහේ ධාවනය කළ හැක. මගේ විසඳුම වන්නේ ඩොකර් තුළ ජෙන්කින්ස් සිටීම සහ අනෙකුත් ඩොකර් බහාලුම් ධාවනය කිරීමට හැකි වීමයි. මෙම ප්රශ්නය 2013 දී "" ලිපියෙන් නැවත ඇසීමට පටන් ගත්තේය.
කෙටියෙන් කිවහොත්, ඔබට අවශ්ය වන්නේ වැඩ කරන බහාලුමක ඩොකර් ස්ථාපනය කර ගොනුව සවි කිරීම පමණි /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
මේ අනුව, අපට ධාරක යන්ත්රයේ ඩොකර් විධාන ක්රියාත්මක කළ හැකි ඩොකර් කන්ටේනරයක් ලැබුණි.
සැකසුම ගොඩනඟන්න
බොහෝ කලකට පෙර ජෙන්කින්ස්ට එහි නීති රීති විස්තර කිරීමට අවස්ථාව ලැබුණි
එබැවින් අපි ගබඩාව තුළම විශේෂ 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
ඔබට සඳහන් කළ හැකි තැන:
- ඔබගේ නම් කිරීමේ ප්රතිපත්තියට අනුව එකලස් කිරීමේ කන්ටේනරයේ නම;
- බිල්ඩ් කන්ටේනරය ක්රියාත්මක කිරීමට තර්ක අවශ්ය වේ, එහිදී අපගේ නඩුවේදී අපි වත්මන් නාමාවලිය බහාලුම තුළ නාමාවලියක් ලෙස සවි කරමු.
දැනටමත් ගොඩනැගීමේ පියවරේදී අපි ඩොකර් ගොඩනැගීමේ නියෝජිතයා තුළ ක්රියාත්මක කළ යුතු විධානයන් දක්වන්නෙමු. මෙය ඕනෑම දෙයක් විය හැක, එබැවින් මම 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