Jenkins+Docker+Git實現自動化CI/CD

你是否還在手動構建、測試、部署過程中頻繁等待?或者擔心“我本地沒問題,部署卻報錯”?在敏捷開發和 DevOps 時代,**持續集成與持續交付(CI/CD)**變得至關重要。將 Jenkins、Docker、Git 三者結合,能夠幫助你實現“提交即驗證,構建即發布”的極速自動化體驗。

在如今的互聯網時代,隨著軟件開發復雜度的不斷提高,軟件開發和發布管理也越來越重要。目前已經形成一套標準的流程,最重要的組成部分就是持續集成(Continuous Integration,CI)及持續部署、交付(CD)。在此,我們來以一個案例初步了解 CI 流程。那么什么是 CI 呢?簡單來講,CI 就是將傳統的代碼合并、構建、部署、測試都集成在一起,不斷地執行這個過程,并對結果進行反饋。

持續集成和持續部署(CI/CD)是現代軟件開發的核心實踐,能夠顯著提高開發效率和代碼質量。通過結合 Jenkins(自動化服務器)、Docker(容器化平臺)和 Git(版本控制系統),可以構建一個高效的 CI/CD 管道,自動完成代碼的構建、測試和部署。本指南詳細介紹了如何使用這些工具實現自動化 CI/CD,基于多個可靠來源整理,適合從初學者到高級用戶。

那么,怎么利用 Jenkins、Docker 和 Git 搭建一條高效、穩定的 CI/CD 流水線?涉及哪些核心步驟?哪些坑需要提前避開?本文將帶你零基礎上手,一步步實現自動化部署。

背景

CI/CD 旨在通過自動化流程減少手動操作,確保代碼更改能夠快速、可靠地集成和部署到生產環境。Jenkins 提供了一個靈活的平臺來協調這些流程,Docker 確保環境一致性,而 Git 則用于管理代碼版本。本指南以一個簡單的 Node.js 應用程序為例,展示如何搭建一個完整的 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

創建庫:

[git@docker-git-harbor ~]$?mkdir?tomcat-java-demo.git[git@docker-git-harbor ~]$ cd tomcat-java-demo.git/[git@docker-git-harbor tomcat-java-demo.git]$ git --bare initInitialized?empty?Git?repository?in?/home/git/tomcat-java-demo.git/[git@docker-git-harbor 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/,按提示輸入密碼,登錄即可。

圖片

部署私有鏡像倉庫

構建Tomcat基礎鏡像,并推送到harbor鏡像庫:

[root@docker-git-harbor ~]# cd tomcat[root@docker-git-harbor tomcat]# cat Dockerfile-tomcatFROM centos:7MAINTAINER?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?8080CMD?["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},其他模塊內容自行編寫。

node?{?// 拉取代碼 ??stage('Git Checkout') {?checkout([$class:?'GitSCM',?branches: [[name: '${branch}']],?doGenerateSubmoduleConfigurations: false,?extensions: [],?submoduleCfg: [],?userRemoteConfigs: [[credentialsId: 'c42214eb-db1e-49fb-83c9-f78d1f4310a2',?url: 'git@10.0.0.99:/home/git/tomcat-java-demo.git']]])} ??// 代碼編譯 ??stage('Maven Build') {sh?'''? ? ? ??export?JAVA_HOME=/usr/local/jdk/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true ? ? ? ?'''? ?} ??// 項目打包到鏡像并推送到鏡像倉庫 ??/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true ? ? ? ?'''? ?} ??// 項目打包到鏡像并推送到鏡像倉庫 ??stage('Build and Push Image') {sh?'''REPOSITORY=reg.dingkai.com/library/tomcat-java-demo:${branch}cat?>?Dockerfile << EOFFROM reg.dingkai.com/library/tomcat:v1?MAINTAINER?kaiRUN?rm?-rf /usr/local/tomcat/webapps/*ADD?target/*.war /usr/local/tomcat/webapps/ROOT.war
EOFEOFdocker?build -t $REPOSITORY .docker?login reg.dingkai.com -u admin -p 123456docker?push $REPOSITORY'''}// 部署到Docker主機'''}// 部署到Docker主機stage('Deploy to Docker') {sh?'''REPOSITORY=reg.dingkai.com/library/tomcat-java-demo:${branch}docker?rm?-f?tomcat-java-demo |truedocker?pull $REPOSITORYdocker?container?run?-d?--name?tomcat-java-demo -p 88:8080 $REPOSITORY'''}
}

圖片

在Pipeline腳本里面我們指定了一個branch參數,所以我們需要傳遞一個參數變量,這里我們選擇參數化構建,默認值為master分支。

圖片

然后保存配置。

開始構建任務

回到主界面,我們開始構建任務

圖片

可以通過Console Output輸出查看jenkins構建流程

圖片

成功構建會提示:?SUCCESS

圖片

我們也可以查看構建成功后的圖形構建過程

圖片

方法比較

方法

優點

缺點

適用場景

Freestyle Project

配置簡單,適合初學者

靈活性較低,難以管理復雜流程

簡單應用,快速上手

Jenkins Pipeline

高度可定制,支持復雜流程

需要學習 Groovy 語法

復雜項目,需多階段管理

Docker 集成

環境一致,易于部署

需要熟悉 Docker 命令

容器化應用

GitHub Webhook

實現自動化觸發

需要正確配置 Webhook 和網絡

任何需要自動化的項目

注意事項

  • 安全性

    • 使用 HTTPS 訪問 Jenkins,避免暴露敏感信息。

    • 限制 Jenkins 和 Docker 的訪問權限。

  • 擴展性

    • 添加測試階段(如單元測試、集成測試)以提高代碼質量。

    • 使用 Docker Hub 或私有倉庫存儲鏡像,便于版本管理和分發。

  • 法律與道德

    • 確保 CI/CD 管道的自動化操作符合目標環境的條款和法律法規。

    • 避免對服務器或服務造成過大負載。

結論

Jenkins + Docker + Git 共同構建的是一條高度自動化、可監控、靈活擴展的 CI/CD 流水線。實踐的關鍵是三個核心原則:

  1. 環境一致(Docker 容器)

  2. 流程自動(Jenkins Pipeline)

  3. 觸發準確(Git Push)

只要掌握以上三點,你的發布流程就能從“手工繁瑣”變成“智能流水線”。

隨著 DevOps 和微服務趨勢深入,CI/CD 已成為團隊標配工具鏈。然而,“自動化”不只是命令式執行,更是一種規范。正確配置 Jenkins + Docker + Git,不僅釋放人力,還強化質量管理。不少企業采用該方案后,發布頻率從“每月一次”提升至“每天甚至每小時一次”。

通過 Jenkins、Docker 和 Git,可以構建一個高效的 CI/CD 管道,自動化完成代碼的構建、測試和部署。Freestyle Project 適合快速上手,而 Jenkins Pipeline 提供更高的靈活性。根據項目需求選擇合適的配置,并結合 Webhook 實現全自動化流程。上述步驟和示例代碼基于實際案例,確保了可操作性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90091.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90091.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90091.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Apache Ignite 的 SQL 功能和分布式查詢機制

這段內容講的是 Apache Ignite 的 SQL 功能和分布式查詢機制。我們可以從幾個關鍵點來理解&#xff1a;一、Ignite 是一個分布式 SQL 數據庫 ? 特點&#xff1a; 符合 ANSI-99 SQL 標準水平擴展&#xff08;可擴展到多個節點&#xff09;容錯&#xff08;fault-tolerant&#…

C++中的deque容器

deque容器基本概念功能&#xff1a;雙端數組&#xff0c;可以對頭端進行插入和刪除操作deque與vector區別&#xff1a;vector對于頭部的插入刪除掉率低&#xff0c;數據量越大&#xff0c;效率越低deque相對而言&#xff0c;對頭部的插入刪除速度會比vector快vetcor訪問元素時的…

閑庭信步使用圖像驗證平臺加速FPGA的開發:第三十課——車牌識別的FPGA實現(2)實現車牌定位

&#xff08;本系列只需要modelsim即可完成數字圖像的處理&#xff0c;每個工程都搭建了全自動化的仿真環境&#xff0c;只需要雙擊top_tb.bat文件就可以完成整個的仿真&#xff0c;大大降低了初學者的門檻&#xff01;&#xff01;&#xff01;&#xff01;如需要該系列的工程…

前端性能優化:從“龜速“到“閃電“的終極加速指南

一、性能指標:你的網站"體檢報告" ?? 1. 核心Web指標(Google排名因素) 指標 全稱 優秀標準 優化方向 LCP 最大內容繪制 ≤2.5s 關鍵資源預加載 FID 首次輸入延遲 ≤100ms 減少長任務 CLS 累計布局偏移 ≤0.1 預留圖片尺寸 測量方法: // 使用web-vitals庫測量…

Linux 重定向和緩沖區

序言&#xff1a; 前面在Linux 基礎文件IO操作-CSDN博客這篇博客里說了很多函數無論是在語言層還是在系統調用的方面。在調用系統調用open的時候會返回一個整型&#xff0c;在write傳參的時候第一個參數是一個叫fd的東西&#xff0c;這個是什么東西&#xff1f;這篇博客會詳細…

web登錄頁面

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>簡易登錄頁面</title><style>* {mar…

Java中關于線程池的解析

引語在學習了線程與多線程的相關知識后&#xff0c;我們已經能夠實現在程序中使多個任務并行&#xff0c;但是我們在操作時候&#xff0c;往往每執行一個的任務就需要創建一個新的線程。這種方式在需要執行任務很多時不利于我們對線程的管理&#xff0c;且創建過多線程也非常占…

J2EE模式---前端控制器模式

前端控制器模式基礎概念前端控制器模式&#xff08;Front Controller Pattern&#xff09;是一種結構型設計模式&#xff0c;其核心思想是將應用程序的所有請求集中到一個中央處理器&#xff08;前端控制器&#xff09;進行處理&#xff0c;由它負責接收請求、協調處理流程并返…

模塊加載、ES、TS、Babel 淺析

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

day056-Dockerfile案例與Docker Compose

文章目錄0. 老男孩思想-老男孩名言警句1. Dockerfile指令&#xff1a;ENV與ARG的區別&#xff1f;2. 創建WordPress鏡像2.1 CA證書2.1.1 客戶端訪問HTTPS站點&#xff08;阿里云鏡像源&#xff09;過程2.1.2 查看Windows的CA證書2.1.3 ubuntu查看CA證書是否安裝2.2 準備apt下載…

gcc 源碼分析:從IR-RTL 到匯編輸出

在完成了IR-RTL的優化與寄存器分配后就來到匯編代碼的輸出&#xff1a;實現如下&#xff1a;class pass_final : public rtl_opt_pass { public:pass_final (gcc::context *ctxt): rtl_opt_pass (pass_data_final, ctxt){}/* opt_pass methods: */unsigned int execute (functi…

STC89C52系列單片機內部結構詳解

STC89C52 是基于 MCS-51 內核的增強型單片機&#xff0c;其內部結構集成了多種功能模塊&#xff0c;具備強大的數據處理和控制能力&#xff0c;是嵌入式系統中常用的一種微控制器。本文將結合內部結構框圖&#xff0c;詳細介紹 STC89C52 的各個核心組成部分及其功能作用。一、中…

Linux防火墻管理和基礎服務(FTP/SFTP)

防火墻管理# 開放端口firewalld-cmd --add-port880/tcp --permanent# 移除端口或阻止端口firewalld-cmd --remove-port880/tcp --permanent# 重啟服務systemctl restart firewalld# 查看防火墻開放哪些端口&#xff08;查看當前區域的規則&#xff09;firewall-cmd --lis…

Selenium+Java 自動化測試入門到實踐:從環境搭建到元素操作

在自動化測試領域&#xff0c;Selenium 憑借其強大的跨瀏覽器兼容性和靈活的 API&#xff0c;成為 Web 應用測試的首選工具。而 Java 作為一門穩定且廣泛應用的編程語言&#xff0c;與 Selenium 結合能構建出高效、可維護的自動化測試框架。本文將從環境搭建開始&#xff0c;逐…

Hugging Face 模型的緩存和直接下載有什么區別?

Hugging Face 模型的緩存和直接下載&#xff08;下載到本地文件夾&#xff09;是兩種不同的模型管理方式&#xff0c;它們在使用場景、存儲結構和效率上各有優劣。 以下是它們之間的主要區別&#xff1a; Hugging Face 緩存 (Cache) 當您通過 transformers 庫中的 from_pretrai…

JavaScript AJAX 實現,演示如何將 Token 添加到 Authorization

以下是一個完整的原生 JavaScript AJAX 實現&#xff0c;演示如何將 Token 添加到 Authorization 頭部的示例&#xff1a;基礎實現html復制代碼<!DOCTYPE html> <html> <head><title>AJAX Token 示例</title><script>// 獲取當前用戶的 To…

開發語言的優劣勢對比及主要應用領域分析

開發語言是程序員用來編寫軟件指令的工具。每種語言都有自己的設計哲學、語法&#xff08;規則&#xff09;和應用場景&#xff0c;但沒有“放之四海而皆準”的最佳語言。以下是主流和重要開發語言的介紹&#xff0c;按主要應用領域分類&#xff1a; 一、全能型語言 (可在多個領…

Java學習-------事務失效

在 Java 開發中&#xff0c;事務是保證數據一致性和完整性的關鍵機制&#xff0c;尤其在涉及多步數據庫操作的業務場景中不可或缺。然而&#xff0c;在實際開發過程中&#xff0c;事務常常會出現 “失效” 的情況 —— 預期的回滾沒有發生&#xff0c;數據出現不一致。 Java 事…

JavaScript 01 JavaScript 是什么

1.1 JavaScript 是什么JavaScript 是一門世界上最流行的腳本語言&#xff08;基本所有平臺的所有軟件都會用到它&#xff09;。“1994年&#xff0c;網景公司(Netscape)發布了Navigator瀏覽器0.9版。這是歷史上第一個比較成熟的網絡瀏覽器&#xff0c;轟動一時。但是&#xff0…

Bun v1.2.19發布,node_modules隔離,sql比node快6倍

大家好,我是農村程序員,獨立開發者,行業觀察員,前端之虎陳隨易。我會在這里分享關于 獨立開發、編程技術、思考感悟 等內容,歡迎關注。 技術群與交朋友請在個人網站聯系我,網站 1??:https://chensuiyi.me,網站 2??:https://me.yicode.tech。 如果你覺得本文有用…