“每次發版都要手動打包上傳,部署宕機了才發現出錯?”
你還在重復“開發提測-打包部署-驗證回歸”的流水線操作?明明可以一鍵搞定的流程,為何還在親力親為?是時候了解并掌握 自動化 CI/CD 的真正威力了!
手動部署就像騎自行車在高速公路上賽跑——費力又低效!每次代碼更新,您是否還在手動構建、測試、部署,擔心出錯導致系統崩潰?用戶體驗下降、業務受損的后果讓人不寒而栗!持續集成與持續部署(CI/CD)的自動化技術徹底改變了這一局面,而 Jenkins、Docker 和 Git 的黃金組合更是讓部署如行云流水。今天,我們為您獻上一份 Jenkins + Docker + Git 自動化 CI/CD 指南,從環境搭建到管道運行,帶您一步步實現高效部署!無論您是開發新手還是 DevOps 老兵,這篇指南都將點燃您的自動化熱情,助您邁向高效開發新時代!
在如今的互聯網時代,隨著軟件開發復雜度的不斷提高,軟件開發和發布管理也越來越重要。目前已經形成一套標準的流程,最重要的組成部分就是持續集成(Continuous Integration,CI)及持續部署、交付(CD)。在此,我們來以一個案例初步了解 CI 流程。那么什么是 CI 呢?簡單來講,CI 就是將傳統的代碼合并、構建、部署、測試都集成在一起,不斷地執行這個過程,并對結果進行反饋。
什么是 CI/CD?Jenkins、Docker 和 Git 如何協同打造自動化管道?自動化部署能帶來哪些實際好處?如何通過這三者實現快速迭代?在 2025 年的微服務和云原生趨勢中,自動化 CI/CD 為何如此重要?通過本文,我們將深入解答這些問題,帶您從理論到實踐,全面掌握自動化 CI/CD 的精髓!
CI 流程設計圖:
工作流程:
-
開發人員提交代碼到Git版本倉庫;
-
Jenkins人工/定時觸發項目構建;
-
Jenkins拉取代碼、代碼編碼、打包鏡像、推送到鏡像倉庫;
-
Jenkins在Docker主機創建容器并發布
主機環境規劃:
-
docker-jenkins: ? ?10.0.0.98
-
docker-git-harbor:10.0.0.99
部署Git代碼版本倉庫
安裝:
?yum install git -y
配置git用戶:
useradd gitpasswd git
創建庫:
mkdir?tomcat-java-demo.gitcd tomcat-java-demo.git/git --bare initInitialized?empty?Git?repository?in?/home/git/tomcat-java-demo.git/lsbranches ?config ?description ?HEAD ?hooks ?info ?objects ?refs[git@docker-git-harbor tomcat-java-demo.git]$
另一臺docker-jenkins訪問該倉庫:
[root@docker-jenkins ~]# git clone git@10.0.0.99:/home/git/tomcat-java-demo.gitCloning into 'solo'...The?authenticity?of?host?'10.0.0.99 (10.0.0.99)'?can't?beestablished.ECDSA?key?fingerprintis?SHA256:XNWQhGsAsqd84k/6OYV3xl1+mPGjtASsxeV1YVLZVas.ECDSA?keyfingerprint?is?MD5:b4:bd:16:2b:de:e7:7c:fd:c5:dd:91:75:20:ff:3e:0a.Are?you?sure?you?want?to?continue?connecting (yes/no)? yesWarning:?Permanently added?'10.0.0.99' (ECDSA)?to the list of known hosts.git@10.0.0.99'spassword:warning:?You appear to have cloned an empty repository.[root@docker-jenkins ~]# lsanaconda-ks.cfg ?tomcat-java-demo.git[root@docker-jenkins ~]# ls tomcat-java-demo.git[root@docker-jenkins ~]#
?
模擬生產項目,拉取github上的一個demo,并上傳至本地git庫
[root@docker-jenkins ~]# mv tomcat-java-demo tomcat-java-demo.bak[root@docker-jenkins ~]# git clone https://github.com/dingkai163/tomcat-java-demo.git[root@docker-jenkins tomcat-java-demo]# cat .git/config[core]repositoryformatversion?=?0filemode?=?truebare?=?falselogallrefupdates?=?true[remote "origin"]url?=?git@10.0.0.99:/home/git/tomcat-java-demo.git ?# 修改為本地的git庫地址fetch?=?+refs/heads/*:refs/remotes/origin/*[branch "master"]remote?=?originmerge?=?refs/heads/master[root@docker-jenkins tomcat-java-demo]# git add .[root@docker-jenkins tomcat-java-demo]# git status# On branch masternothing?to?commit,?working?directory?clean[root@docker-jenkins tomcat-java-demo]# git commit -m "all"# On branch masternothingto?commit,?working?directory?clean[root@docker-jenkins tomcat-java-demo]# git push origin mastergit@10.0.0.99'spassword:Counting objects:?229, done.Compressing objects:?100% (185/185), done.Writing objects:?100% (229/229), 4.52 MiB | 0 bytes/s, done.Total?229 (delta 25), reused 229 (delta 25)To git@10.0.0.99:/home/git/tomcat-java-demo.git* [new branch] ?? ??master -> master[root@docker-jenkins tomcat-java-demo]#
jenkins環境部署
部署jdk環境及maven
[root@docker-jenkins ~]# mkdir tools[root@docker-jenkins ~]# cd tools[root@docker-jenkins tools]# rz -y[root@docker-jenkins tools]# tar zxvf jdk-8u45-linux-x64.tar.gz[root@docker-jenkins tools]# mv jdk1.8.0_45 /usr/local/jdk[root@docker-jenkins tools]# vim /etc/profileJAVA_HOME=/usr/local/jdk?PATH=$PATH:$JAVA_HOME/bin??CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar?export?JAVA_HOME?PATH?CLASSPATH[root@docker-jenkins tools]# source /etc/profile[root@docker-jenkins tools]# java -versionjava version?"1.8.0_45"Java(TM)SE?Runtime?Environment?(build 1.8.0_45-b14)Java?HotSpot(TM)64-Bit?Server?VM?(build 25.45-b02, mixed mode)[root@docker-jenkins tools]# tar zxf apache-maven-3.5.0-bin.tar.gz[root@docker-jenkins tools]# mv apache-maven-3.5.0 /usr/local/maven
在10.0.0.98主機安裝Jenkins,下載Tomcat二進制包將war包到webapps下即可:
[root@docker-jenkins tools]# wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war[root@docker-jenkins tools]# wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz[root@docker-jenkins tools]# tar zxf apache-tomcat-8.5.38.tar.gz[root@docker-jenkins tools]# lsapache-tomcat-8.5.38??apache-tomcat-8.5.38.tar.gz ?jdk-8u45-linux-x64.tar.gz ?jenkins.war[root@docker-jenkins tools]# mv apache-tomcat-8.5.38 /usr/local/tomcat-jenkins[root@docker-jenkins tools]# ls /usr/local/tomcat-jenkins/webapps/docs ?examples ?host-manager??manager ?ROOT[root@docker-jenkins tools]# rm -rf /usr/local/tomcat-jenkins/webapps/*[root@docker-jenkins tools]# mv jenkins.war /usr/local/tomcat-jenkins/webapps/ROOT.war[root@docker-jenkins tools]# ll /usr/local/tomcat-jenkins/webapps/total 75520-rw-r--r--. 1 root root 77330344 Mar 15 00:55 ROOT.war[root@docker-jenkins tools]# cd /usr/local/tomcat-jenkins/bin/[root@docker-jenkins bin]# ./startup.shUsing?CATALINA_BASE: ??/usr/local/tomcat-jenkinsUsingCATALINA_HOME: ??/usr/local/tomcat-jenkinsUsing?CATALINA_TMPDIR:?/usr/local/tomcat-jenkins/tempUsing?JRE_HOME: ? ? ???/usr/local/jdk1.8Using?CLASSPATH: ? ? ??/usr/local/tomcat-jenkins/bin/bootstrap.jar:/usr/local/tomcat-jenkins/bin/tomcat-juli.jarTomcat started.[root@docker-jenkins bin]#
啟動后,瀏覽器訪問http://10.0.0.98:8080/,按提示輸入密碼,登錄即可。
觀點與案例結合
觀點:CI/CD 通過自動化流程提升代碼質量和部署效率,Jenkins 負責管道編排,Docker 確保環境一致性,Git 管理代碼版本。三者結合,構建了高效、可靠的自動化部署體系,適合現代微服務和云原生架構。
CI/CD 流程與核心步驟
步驟 | 描述 | 工具/操作 | 案例 |
---|---|---|---|
安裝環境 | 在服務器上安裝 Git、Jenkins 和 Docker,配置環境變量。 | Ubuntu: sudo apt install git openjdk-11-jdk docker.io | 小李在 Ubuntu 服務器上 10 分鐘完成環境搭建,開始 CI/CD 配置。 |
配置 Jenkins | 安裝 Git 和 Docker 插件,設置 Git Webhook。 | Jenkins 插件管理:安裝 “Git” 和 “Docker Pipeline” | 小張配置 Webhook,代碼提交后自動觸發管道。 |
編寫 Jenkinsfile | 定義管道,包括拉取代碼、構建鏡像、測試和部署。 | groovy<br>pipeline {<br> agent any<br> stages {<br> stage('Checkout') {<br> steps {<br> git 'https://github.com/user/repo.git'<br> }<br> }<br> stage('Build') {<br> steps {<br> sh 'docker build -t myapp .'<br> }<br> }<br> stage('Test') {<br> steps {<br> sh 'docker run myapp pytest'<br> }<br> }<br> stage('Deploy') {<br> steps {<br> sh 'docker push myapp'<br> sh 'docker run -d -p 80:80 myapp'<br> }<br> }<br> }<br>}<br> | 某團隊用 Jenkinsfile 實現自動化部署,效率提升 50%。 |
運行與監控 | 運行管道,監控構建、測試和部署結果。 | jenkins > Build History > Console Output | 小王通過 Jenkins 儀表板監控,優化部署時間 30%。 |
技術要點詳解
-
Git 版本控制
-
功能:管理代碼變更,觸發 Jenkins 管道。
-
操作:配置 Webhook,URL 如 http://jenkins-server:8080/github-webhook/。
-
案例:某公司通過 Git Webhook 實現代碼提交后自動構建,減少手動操作。
-
-
Jenkins 管道
-
功能:編排 CI/CD 流程,支持多階段任務。
-
配置:使用 Jenkinsfile 定義 Checkout、Build、Test 和 Deploy 階段。
-
案例:某電商平臺通過 Jenkins 管道,部署周期從每周一次縮短到每天多次。
-
-
Docker 容器化
-
功能:構建一致性環境,運行測試和部署。
-
操作:編寫 Dockerfile,構建鏡像:docker build -t myapp .。
-
案例:某團隊用 Docker 容器運行測試,解決環境不一致問題,測試成功率提升 40%。
-
-
監控與優化
-
功能:通過 Jenkins 報告和日志分析瓶頸。
-
工具:Jenkins Dashboard、Docker 監控命令(如 docker stats)。
-
案例:某開發者通過日志發現測試階段內存不足,優化后性能提升 20%。
-
綜合案例
某互聯網公司開發電商平臺,采用 Jenkins + Docker + Git 實現 CI/CD。開發者提交代碼到 Git 倉庫,觸發 Jenkins 管道,自動拉取代碼、構建 Docker 鏡像、運行測試并部署到生產環境。部署周期從每周一次縮短到每天多次,bug 修復速度提升 50%,用戶滿意度顯著提高。
部署私有鏡像倉庫
企業級harbor鏡像倉庫部署:
https://www.cnblogs.com/kaye/p/10524391.html
構建Tomcat基礎鏡像,并推送到harbor鏡像庫:
[root@docker-git-harbor ~]# cd tomcat
[root@docker-git-harbor tomcat]# cat Dockerfile-tomcat
FROM centos:7
MAINTAINER?www.cnblogs.com/kaye/ENV?VERSION=8.5.38RUN?yum?install?java-1.8.0-openjdkwget?curl?unzip?iproute net-tools -y && \yum?clean all && \rm?-rf /var/cache/yum/*RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apachetomcat-${VERSION}.tar.gz && \tar?zxf apache-tomcat-${VERSION}.tar.gz && \mv?apache-tomcat-${VERSION} /usr/local/tomcat && \rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \mkdir?/usr/local/tomcat/webapps/test && \echo?"ok" >?/usr/local/tomcat/webapps/test/status.html && \sed?-i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"'?/usr/local/tomcat/bin/catalina.sh && \ln?-sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeENV?PATH?$PATH:/usr/local/tomcat/binEXPOSE?8080
CMD?["catalina.sh", "run"][root@docker-git-harbor tomcat]# docker build -t tomcat:v1 -f Dockerfile-tomcat .[root@docker-git-harbor tomcat]# docker tag tomcat:v1 reg.dingkai.com/library/tomcat:v1[root@docker-git-harbor tomcat]# docker login reg.dingkai.com[root@docker-git-harbor tomcat]# docker push reg.dingkai.com/library/tomcat:v1
Jenkins安裝必要插件
由于jenkins是離線安裝,所有在此需要配置一下插件下載地址:系統管理-->插件管理-->Advanced
修改下方地址,將https修改為http 再點Submit
Submit后點擊Available,Check now此時我們可以看到很多可獲得插件
首先搜索并安裝Pipeline插件
pipeline 是一套運行于jenkins上的工作流框架,將原本獨立運行于單個或者多個節點的任務連接起來,實現單個任務難以完成的復雜流程編排與可視化。
再安裝SCM to job 插件,同上步驟(搜索,安裝)。
項目創建
創建jobs
?
選擇流水線類型
到這里我們就開始配置Pipeline script,點擊Pipeline語法,來自動生成我們需要的配置。
?
如下圖,我們Git方式,配置Git倉庫地址,再添加認證相關。
?
這里我們使用的是秘鑰認證方式,需要將jenkins上生成的公鑰發送到git服務器上,然后將jenkins上的生成的私鑰內容粘貼到下圖Key中,這樣jenkins就可以免交互的拉取git倉庫中的代碼了。
[root@docker-jenkins bin]# ssh-keygenGenerating public/private rsa key pair.
Enter?file?in?which?tosavethe?key?(/root/.ssh/id_rsa):
Enterpassphrase?(empty for no passphrase):
Enter?same?passphrase?again:
Your?identification?hasbeen?saved?in?/root/.ssh/id_rsa.
Your?public?keyhas?been?saved?in?/root/.ssh/id_rsa.pub.
The?keyfingerprint?is:
SHA256:1vD8XM3lDYFmrxgAbwPTLwb0fl+oEx8cFgtykpg4ODI root@
docker-jenkinsThe?key's?randomart?image?is:
+---[RSA 2048]----+| ? . o==o.o ... ?||E o o +=++ .+o . || o . . .*o o+.. .|| ? ? ? oo*oo o.=o|| ? ? ? .S.*o+.o =|| ? ? ? . ..B.+ ? || ? ? ? ? ?o = ? ?|| ? ? ? ? ? . ? ? || ? ? ? ? ? ? ? ? |+----[SHA256]-----+[root@docker-jenkins bin]# cd
[root@docker-jenkins ~]#
[root@docker-jenkins ~]#
[root@docker-jenkins ~]# ls .ssh/id_rsa ?id_rsa.pub ?known_hosts[root@docker-jenkins ~]# ssh-copy-id git@10.0.0.99/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysgit@10.0.0.99'spassword:Number?of?key(s)added: 1Now?trylogging?into?the?machine,?with: ? "ssh 'git@10.0.0.99'"
andcheck?to?make?sure?that?onlythe?key(s)you?wanted?were?added.[root@docker-jenkins ~]#
?
配置完成后,我們就可以生成Pipeline腳本了。點擊下方Generate Pipeline Script,然后復制方框內的內容。
編寫我們所需要的Pipeline腳本如下,將其粘貼到script的拉取代碼模塊中,并修改分支master為${branch},其他模塊內容自行編寫。
?
在Pipeline腳本里面我們指定了一個branch參數,所以我們需要傳遞一個參數變量,這里我們選擇參數化構建,默認值為master分支。
然后保存配置。
開始構建任務
回到主界面,我們開始構建任務
可以通過Console Output輸出查看jenkins構建流程
?
成功構建會提示:?SUCCESS
?
我們也可以查看構建成功后的圖形構建過程
社會現象分析
在許多中小企業中,CI/CD 落地依然被認為“太復雜”“運維成本高”。
但事實上,工具鏈已經趨于成熟,從 Git 提交,到構建打包、鏡像部署,甚至通知回調,全程可自動化。這不僅節省人力成本,還大幅提高上線效率與穩定性,是 DevOps 流程中的“基建神器”。
自動化 CI/CD 已成為軟件開發的核心趨勢。根據 Gartner 2024 報告,90% 的高績效 IT 組織采用 CI/CD 實踐,顯著提升交付速度和質量。Jenkins 作為開源 CI/CD 工具的領軍者,擁有超過 10 萬 GitHub Stars;Docker 的容器化技術解決了環境不一致問題;Git 則以其版本控制能力成為行業標準。隨著微服務和云原生架構的普及,自動化 CI/CD 管道需求激增,尤其在電商、金融和游戲行業。然而,Jenkins 的配置復雜性可能讓初學者望而卻步,需通過社區支持和實踐降低學習曲線。相比 GitLab CI,Jenkins 的靈活性和插件生態更適合復雜項目。
總結與升華
Jenkins、Docker 和 Git 的組合為自動化 CI/CD 提供了強大支持。從代碼提交到生產部署,每一步都通過自動化流程實現高效、穩定運行。在 2025 年的微服務和云原生時代,掌握這一組合不僅能提升開發效率,還能為業務創新注入動力。無論是縮短部署周期還是提高系統穩定性,自動化 CI/CD 都將成為您的得力助手。讓我們從現在開始,擁抱自動化,邁向高效開發的新高度!
部署不應是開發的阻力,而應成為加速的引擎。
通過 Jenkins、Docker 與 Git 三者協作,開發者可以真正專注業務邏輯,而不是陷于重復的發布流程之中。構建一次、部署無憂,讓 CI/CD 成為你的默認工作方式!
手動部署是體力活,自動化部署才是生產力!
別再讓上線像打仗,用 Jenkins + Docker + Git,把“部署”變成一場優雅的演出吧!“Jenkins + Docker + Git,自動化 CI/CD,點燃您的開發未來!”
?