Jenkins整合Docker實現(xiàn)CICD自動化部署的詳細過程(若依項目)
前期準備
提前準備好jenkins環(huán)境
并且jenkins能使用docker命令,并且已經(jīng)配置好了jdk、node、maven環(huán)境,我之前寫了安裝jenkins的博客,里面講得比較詳細,推薦用我這種方式安裝
docker安裝jenkins,并配置jdk、node和maven_jenkins
需要提前準備好gitlab環(huán)境
github、gitee其實也可以,但是需要和jenkins互相能訪問到,這邊推薦gitlab
需要準備好mysql
如果沒安裝的,docker一句話就可以了
docker run -d \ --name mysql \ -p 0.0.0.0:3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ --restart=always \ mysql:8.0.39
準備好redis環(huán)境
docker run -d \ --name redis \ -p 0.0.0.0:6379:6379 \ --restart=always \ redis:7.4.1
安裝gitlab插件
如果想實現(xiàn)代碼提交自動部署,需要安裝gitlab插件
進入系統(tǒng)管理,插件管理
搜索gitlab插件進行安裝
安裝成功即可,無需重啟
開始部署
拉取項目
拉取若依項目,我們拉取的是若依項目的前后端分離版
根目錄有個ruoyi-ui,這是前端項目,我們把它移動到外層,我們分成2個項目部署
部署后端項目
將這兩個sql文件導(dǎo)入到數(shù)據(jù)庫中
到application-druid.yml中修改數(shù)據(jù)庫的連接信息
修改redis的連接信息
根目錄新建Dockerfile
pipeline { // 任意節(jié)點都可以執(zhí)行Jenkins流水線 agent any tools { // 剛剛配置的java環(huán)境 jdk 'jdk8' } // 環(huán)境變量 environment { // 項目名稱 APP_NAME = 'ruoyi-server' // 端口 APP_PORT = 9800 } // 流水線階段 stages { // 構(gòu)建階段 stage('build') { // 步驟 steps { // 可以寫流水線腳本,groovy語法 script { // 執(zhí)行shell命令 sh 'mvn clean package -DskipTests=true' } } } // 部署階段 stage('deploy') { steps { script { sh """ docker stop $APP_NAME || true docker rm $APP_NAME || true docker rmi $APP_NAME || true docker build -t $APP_NAME . docker run -d --name $APP_NAME \ -p 0.0.0.0:$APP_PORT:$APP_PORT \ --restart=always \ $APP_NAME \ --server.port=$APP_PORT """ } } } } }
根目錄新建Jenkinsfile
pipeline { // 任意節(jié)點都可以執(zhí)行Jenkins流水線 agent any tools { // 剛剛配置的java環(huán)境 jdk 'jdk8' } // 環(huán)境變量 environment { // 項目名稱 APP_NAME = 'ruoyi-server' // 端口 APP_PORT = 9800 } // 流水線階段 stages { // 構(gòu)建階段 stage('build') { // 步驟 steps { // 可以寫流水線腳本,groovy語法 script { // 執(zhí)行shell命令 sh 'mvn clean package -DskipTests=true' } } } // 部署階段 stage('deploy') { steps { script { sh """ docker stop $APP_NAME || true docker rm $APP_NAME || true docker rmi $APP_NAME || true docker build -t $APP_NAME . docker run -d --name $APP_NAME \ -p 0.0.0.0:$APP_PORT:$APP_PORT \ --restart=always \ $APP_NAME \ --server.port=$APP_PORT """ } } } } }
根目錄新建.dockerignore
這個是為了提高docker的構(gòu)建速度,把不必要的文件屏蔽起來
.git ruoyi-admin/src ruoyi-admin/target/classes ruoyi-admin/target/generated-sources ruoyi-admin/target/maven-archiver ruoyi-admin/target/maven-status ruoyi-common ruoyi-framework ruoyi-generator ruoyi-quartz ruoyi-system ruoyi-ui sql
檢查項目中是否已經(jīng)有了這幾個文件
將項目提交到gitlab
Jenkins中新建任務(wù)
名稱隨便填,選擇流水線,確定
找到流水線,選擇scm
然后選擇git
然后把ssh地址復(fù)制進去
不出意外的話,會出現(xiàn)無法連接倉庫,原因是Jenkins無法拉取gitlab的代碼
我們到Jenkins容器中
docker exec -it jenkins bash
生成ssh秘鑰
ssh-keygen # 然后3個回車
查看公鑰
cat ~/.ssh/id_rsa.pub
將公鑰配置到gitlab中
進行一次ssh通信,然后將信息保存下來
這步仍然是在jenkins容器中操作的
# 192.168.200.120是gitlab的地址,8091是gitlab的ssh端口 ssh-keyscan -p 8091 192.168.200.120 >> ~/.ssh/known_hosts
查看一下.ssh目錄下的文件
ls -l ~/.ssh
如果有這3個文件,就說明Jenkins可以拉取gitlab的代碼了
回到Jenkins看下,就會發(fā)現(xiàn)錯誤消失了
下一步,找到這個,把它勾上
展開高級
找到Secret token,點擊Generate生成,就會生成一串token,這串token一會兒到gitlab中會用上
我們到gitlab中Settings中有一個Webhooks
我們來添加一個webhook
填寫相關(guān)信息
如果出現(xiàn)了這個錯誤,說明github沒有開啟webhook
我們到管理員設(shè)置中,找到Network
找到Allow requests to the local network from webhooks and integrations,勾上
這時候再來添加webhooks就能添加了
我們模擬一次push事件,看看Jenkins有什么反應(yīng)
回來看Jenkins,你就會發(fā)現(xiàn)Jenkins在構(gòu)建了
這時候代碼push的時候,Jenkins也會自動構(gòu)建
如果沒有報錯就說明構(gòu)建成功了
部署前端項目
打開前端項目
添加nginx.conf,真實的后端地址根據(jù)實際情況修改
server { # 前端訪問端口 listen 9801; # 前端 location / { # 前端頁面路徑 root /usr/share/nginx/html; # 嘗試著從$uri尋找靜態(tài)資源,找不到就到$uri/找,如果還是找不到就找/index.html try_files $uri $uri/ /index.html; } # 后端 location /prod-api { # 去掉/prot-api開頭 rewrite ^/prod-api/(.*)$ /$1 break; # 真實的后端地址,根據(jù)實際情況修改 proxy_pass http://192.168.200.120:9800; } }
添加Dockerfile
# 使用nginx鏡像來部署 FROM nginx:1.26.2 # 解決文件名亂碼問題 ENV LC_ALL=C.UTF-8 # 將nginx配置文件添加到容器 ADD nginx.conf /etc/nginx/conf.d # 前端打包后,將dist下的文件復(fù)制到容器里 COPY dist/ /usr/share/nginx/html/
添加.dockerignore
node_modulessrc
添加Jenkinsfile
pipeline { agent any environment { // 項目名稱 APP_NAME = 'ruiyi-ui' // 端口 APP_PORT = 9801 } stages { stage('build') { steps { script { // 進行打包 sh """ npm install npm run build:prod """ } } } stage('deploy') { steps { script { sh """ docker stop $APP_NAME || true docker rm $APP_NAME || true docker rmi $APP_NAME || true docker build -t $APP_NAME . docker run -d --name $APP_NAME \ -p 0.0.0.0:$APP_PORT:$APP_PORT \ --restart=always \ $APP_NAME """ } } } } }
檢查一下有沒有這幾個文件
提交代碼
Jenkins再新建一個項目
和剛剛一樣,勾上
生成Secret token
設(shè)置gitlab倉庫地址
gitlab中webhooks配置
添加一個webhook
然后push代碼
等待Jenkins構(gòu)建
構(gòu)建成功
我們到瀏覽器看一下吧
到此這篇關(guān)于Jenkins整合Docker實現(xiàn)CICD自動化部署的文章就介紹到這了,更多相關(guān)Jenkins整合Docker CICD自動化部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker?創(chuàng)建容器時指定容器ip的實現(xiàn)示例
在實際部署中,我們需要指定容器ip,本文主要介紹了docker?創(chuàng)建容器時指定容器ip,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12skywalking容器化部署docker鏡像構(gòu)建k8s從測試到可用
這篇文章主要為大家介紹了skywalking容器化部署docker鏡像構(gòu)建k8s從測試到可用的構(gòu)建部署過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-03-03淺談docker --privileged=true參數(shù)作用
這篇文章主要介紹了淺談docker --privileged=true參數(shù)作用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12docker 數(shù)據(jù)目錄遷移的兩種實現(xiàn)方法
本文主要介紹了docker 數(shù)據(jù)目錄遷移的兩種實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03