Gogs+Jenkins+Docker 自動化部署.NetCore的方法步驟
卸載舊的 Docker
sudo apt-get remove docker docker-engine docker.io containerd runc
更新 apt 包索引并安裝包以允許 apt 通過 HTTPS 使用存儲庫
sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
添加 Docker 官方的 GPG 密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
安裝 Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
通過運(yùn)行 hello-world 驗證 Docker 是否已正確安裝。輸出 Hello from Docker! 表示安裝成功
sudo docker run hello-world
不同的系統(tǒng)安裝方式可以查閱 docker 官方安裝說明
Gogs安裝Gogs 是一款用 Go 語言開發(fā)的輕量級極易搭建的自助 Git 服務(wù)。 選擇 Gogs 主要因為它相對于 Gitlab 動則幾個G的內(nèi)用暫用率來說輕太多了。Gogs 會大大減低系統(tǒng)消耗,跑起來也就占用100mb內(nèi)存。我的 Gogs 是跑在群暉上面的,效果都是一樣,都是在 Docker 中托管
拉取 Gogs 鏡像
sudo docker pull gogs/gogs
創(chuàng)建 Gogs 文件掛載路徑
mkdir -p /var/gogs
啟動容器 6022 是 https,6080 是 http,可以通過 docker ps 命令來查看是否啟動成功。
docker run -d --name=my_gogs -p 6022:22 -p 6080:3000 -v /var/gogs:/data gogs/gogs
容器啟動后通過 http://xxxxxxxx:6080 進(jìn)行 Gogs 的初始配置
數(shù)據(jù)庫類型建議選擇 linux 自帶的 SQLite3 ,支撐十幾個人左右的團(tuán)隊使用足夠了。域名填寫 Gogs 所在服務(wù)器的域名或者 ip 地址。http 端口號和容器內(nèi)部端口一致,應(yīng)用 URL 填寫訪問 Gogs 的域名端口或 ip 端口,點(diǎn)擊安裝后注冊一個新用戶登陸即可
Gogs安裝完成后新建一個 Demo 倉庫稍后使用
Gogs 官方文檔
Docker中托管.NetCore服務(wù)新建一個 WebApi 項目
項目中增加一個 DockerFile 文件并且簡單配置
# 指定依賴版本FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim WORKDIR /appCOPY . /publishWORKDIR /publish# 設(shè)置Docker容器對外暴露端口EXPOSE 80# 設(shè)置時區(qū)RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo ’Asia/Shanghai’ >/etc/timezone # 程序入口ENTRYPOINT ['dotnet', 'DemoWebApi.dll']
發(fā)布Api服務(wù),如果發(fā)布文件中沒有 DockerFile 文件需要手動修改項目文件,發(fā)布成功后將發(fā)布文件 copy 到服務(wù)器指定的文件夾中
<ItemGroup><None Update='Dockerfile'> <CopyToOutputDirectory>Always</CopyToOutputDirectory></None> </ItemGroup>
進(jìn)入服務(wù)器剛 copy 的發(fā)布文件根路徑下,執(zhí)行 docker build -t {REPOSITORY}:{TAG} . 命令 通過 DockerFile 來生成 Docker 鏡像文件,REPOSITORY 是鏡像的名字,TAG 是標(biāo)簽。譬如 docker build -t demo:v1 .
通過 docker images 命令來查看生成的所有鏡像
鏡像生成成功后就可以通過鏡像創(chuàng)建并運(yùn)行容器了。執(zhí)行 docker run --name demoapi -dp 5009:80/tcp demo:v1 命令創(chuàng)建并運(yùn)行容器-d:后臺運(yùn)行容器,并返回容器ID;-p:指定端口映射,格式為:主機(jī)(宿主)端口:容器端口,容器的端口就是你程序啟動的端口,建議直接在項目中寫死。-- name:容器名字
執(zhí)行后可以通過 docker ps 查看所有運(yùn)行起來的容器狀態(tài),需要查看所有容器可以使用 docker ps -a 命令
用 postman 測試一下是否部署成功了
列舉一些docker常用命令
docker restart {容器id} #重啟容器 docker start {容器id} #啟動容器 docker attach {容器id} # 這樣進(jìn)入容器退出會導(dǎo)致容器也退出,attach 可以用戶看容器的標(biāo)準(zhǔn)輸出 docker attach {容器id} --sig-proxy=false # 加上參數(shù)不會導(dǎo)致同期退出 docker exec -it {容器id} /bin/bash # 進(jìn)入容器需要在容器中執(zhí)行命令需要使用 exec 命令 docker logs {容器id} -f # 跟蹤日志輸出 -f 跟蹤日志輸出 docker rm -f {容器id}# 刪除已經(jīng)停止的容器 docker rmi {REPOSITORY:TAG} # 刪除指定鏡像 docker image prune # 刪除懸空鏡像,也就是沒有被容器引用的鏡像到這里服務(wù)已經(jīng)在 Docker 完成了托管,但是每次發(fā)布都需要 build 新的鏡像,然后停止老的容器,在創(chuàng)建一個新的容器,無形中增加了工作量。Jenkins 可以替我們完成這些工作
Jenkins安裝Jenkins 是依賴 java 的,所以需要安裝 java 的 sdk,這里選擇 java8
sudo apt-get install openjdk-8-jdk
安裝 LTS 版本的 Jenkins
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -sudo sh -c ’echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list’sudo apt-get updatesudo apt-get install jenkins
查看運(yùn)行狀態(tài) systemctl status jenkins 正常會輸出如下內(nèi)容
Jenkins 默認(rèn)端口是 8080,安裝成功后通過 http://xxxx:8080 即可訪問,第一步需要先解鎖,管理員密碼會在安裝成功后輸出,也可以通過命令 cat /var/lib/jenkins/secrets/initialAdminPassword
輸入密碼后進(jìn)入初始化頁面,選擇安裝推薦插件
插件安裝進(jìn)度,需要一些些時間
結(jié)束后創(chuàng)建管理賬號登錄即可,進(jìn)入系統(tǒng)管理,選擇插件管理,搜索gogs插件后安裝。
安裝后需要重啟一下 Jenkins,訪問鏈接 http://xxxx:8080/restart 后點(diǎn)擊重啟,或者通過執(zhí)行 service jenkins restart 重啟
為了方便執(zhí)行腳本,需要讓 Jenkins 以 root 用戶來運(yùn)行,編輯文件 vim /etc/sysconfig/jenkins 或 vim /etc/default/jenkins 取消 JENKINS_USER 注釋,并把值設(shè)置成 JENKINS_USER='root' 后修改文件夾權(quán)限
chown -R root:root /var/lib/jenkinschown -R root:root /var/cache/jenkinschown -R root:root /var/log/jenkins
jenkins 常用操作
啟動 service jenkins start 重啟 service jenkins restart 或訪問 http://xxxx:8080/restart 停止 service jenkins stop 或訪問 http://xxxx:8080/exit 重新加載配置文件 http://xxxx:8080/reload使用Jenkins自動化因為需要在服務(wù)器上 build 項目,所以需要安裝 .NetCore 環(huán)境,可以查閱 微軟官方文檔 自行安裝
把新建的項目推送到 Gogs 倉庫中后點(diǎn)擊倉庫高級設(shè)置
選擇 Web 鉤子,添加新 Gogs 的 Web 鉤子
配置 Web 鉤子,推送地址前面是 Jenkins 的訪問鏈接,后面 job 名字可以自己定義,選擇只有在 push 的時候觸發(fā)鉤子,也可以自己選定事件
添加后重新點(diǎn)擊管理 Web 鉤子,選擇剛才新建的鉤子,點(diǎn)擊測試推送來驗證是否正常,拋出的異常如果是 job 未定義說明鉤子是正常的,如果是其他的異常可以查看推送地址是否正確,以及 Jenkins 上的 Gogs 插件是否正確安裝
回到 Jenkins 頁面,新建一個任務(wù),任務(wù)名就是之前 Gogs 里面的 job 名字,選擇構(gòu)建自由風(fēng)格的軟件項目
添加倉庫配置,Repository URL 是你的倉庫地址,點(diǎn)擊添加你的倉庫憑據(jù)信息,最后指定操作的分支
構(gòu)建選擇執(zhí)行shell腳本,腳本也可以放在服務(wù)器上這里調(diào)用就行,為了方便就直接寫在這里
# 判斷是否存在demo鏡像是否存在docker images | grep demo &> /dev/nullif [ $? -ne 0 ]then # 不存在不做處理echo 'not existed demo'else # 如果鏡像存在默認(rèn)認(rèn)為容器也是在運(yùn)行狀態(tài)echo 'existed demo' # 停止刪除容器和鏡像 docker stop demoapi docker rm -f demoapi docker rmi demo:v1fi# 重新build后生成鏡像并運(yùn)行容器cd DemoWebApi/# 發(fā)布到到指定路徑dotnet publish -c Release -o /publish# 進(jìn)入路徑生成鏡像后啟動容器cd /publishdocker build -t demo:v1 .docker run --name demoapi -dp 5009:80/tcp demo:v1
保存后點(diǎn)擊立即構(gòu)建驗證一下,如果構(gòu)建失敗可以在控制臺輸出中查看詳細(xì)構(gòu)建過程和錯誤信息
回到 Gogs 的管理 Web 鉤子頁面重新推送,成功后 Jenkins 會自動構(gòu)建發(fā)布,之后只要 Push 到 Master 分支就會自動發(fā)布
簡單記錄了自己折騰的全過程,Jenkins 和 Docker 還有很多功能,要在使用過程中慢慢了解。
到此這篇關(guān)于Gogs+Jenkins+Docker 自動化部署.NetCore的方法步驟的文章就介紹到這了,更多相關(guān)Docker 自動化部署.NetCore內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. Java之JSP教程九大內(nèi)置對象詳解(中篇)2. 基于python計算滾動方差(標(biāo)準(zhǔn)差)talib和pd.rolling函數(shù)差異詳解3. 使用css實現(xiàn)全兼容tooltip提示框4. 使用ProcessBuilder調(diào)用外部命令,并返回大量結(jié)果5. 詳解CSS不定寬溢出文本適配滾動6. IDEA項目的依賴(pom.xml文件)導(dǎo)入問題及解決7. CSS自定義滾動條樣式案例詳解8. JS繪圖Flot如何實現(xiàn)動態(tài)可刷新曲線圖9. 詳解Python中openpyxl模塊基本用法10. springboot基于Redis發(fā)布訂閱集群下WebSocket的解決方案
