了解最新公司動態及行業資訊
目錄 源代碼倉庫 環境配置好的云服務器 安裝mysql 選擇合適的CI/CD平臺 在本地代碼倉庫配置 使用自動打包搭建演示效果 體驗為什么需要
從概念提出至今已近十年服務器運維技術,各種實用的解決方案相繼在各個開發團隊得到應用。通過版本控制工具(Git、SVN)+源碼倉庫(Gitee、)+CI/CD平臺(、、CI...)解決方案,大大提升開發者的開發體驗,降低開發運維成本,提升產品質量...
由于個人經驗不足,無法繼續細說優點和功能,推薦一篇博客
基本思路
如何練習
廢話這么多,不如實踐一下,看看好壞。圍繞 , , CI 等 CI/CD 平臺,可以很好的實現持續集成和持續部署。在碼云源碼倉庫中,我們可以看到如下流行的程序
并集成在
那么我們真正需要用到哪些技術和工具來構建這樣一個流水線平臺呢?
我總結如下:
掌握流行版本控制工具(Git、SVN)的基本使用 依賴一個源代碼倉庫(、Gitee) 基本的linux運維技術(SSH遠程、)一個CI/CD平臺(、、CI...)
僅此而已,無需任何編程技能!
精通以上每一項技術都不是一件容易的事,但我們只需要選擇其中的一項來掌握基本方法,就可以將它們串聯起來。
我根據自己的技術棧設計了這樣一個方案
為此我們需要一步步做一些準備工作
版本控制工具(Git)學習使用
學習使用,這里推薦廖雪峰的Git學習網站,阮一峰-Git命令列表,阮一峰-Git原理
配置環境
安裝軟件git官網
檢查安裝
git --version
配置本地用戶信息
git config --global user.name "Name"
git config --global user.email "**.com"
git config --list
源代碼庫
這里就不細說了,太簡單了,用搜索引擎查一下就可以了,如圖服務器運維技術,我在上面建了一個這樣的倉庫(空倉庫也可以,后面可以補上代碼)
注意本教程依賴這樣的平臺,必須使用,所以網絡問題需要自己解決
我們準備了一個基于Asp.NET Core 6的圖書館管理系統項目,目錄結構如下圖所示。然后如上圖所示將源碼推送到遠程代碼倉庫。(推送說明就不詳細說了,掌握了git的基本使用就明白了)
環境配置良好的云服務器
為此,我準備了一臺4G運行內存,8M帶寬的騰訊云服務器。操作系統是
SSH遠程登錄
可以使用云服務器控制臺提供的遠程工具,也可以使用遠程控制工具如. 為了讓后面的操作盡可能的順利,你需要使用一些基本的linux指令,你可以看看這個linux快速入門視頻。
有免費版,下載安裝后,新建一個如下
然后按照提示輸入賬戶名和密碼
服務器上安裝的技術準備
在這里隨便找了一個狂生的視頻-詳細教程,隨便看看,加深理解
為什么博客應該使用
我們知道一個項目需要一個運行環境才能運行。為了運行一個java項目,我們為服務器安裝相應版本的Jdk或Jre。.Net 應用程序需要相應版本的.Net 或.Net Core SDK 才能運行。,比如我們日常使用的可執行程序qq等,都是需要運行環境的,但是已經提前安裝了各種版本的.Net,這樣我們安裝完應用程序就可以直接使用了。再比如在服務器上安裝相應的數據庫(mysql、)。管理這些開發環境是一件很煩人的事情,但是當我們使用這樣一個容器化的技術庫時,代碼就是環境,可以安裝在任何服務器上。無需配置任何環境即可運行。
安裝
菜鳥教程-安裝
使用安裝mysql
有了我們安裝mysql就變得簡單了
docker pull mysql
看看我們拉下來的圖片
docker images
跑
docker run -d --name mysql3306 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=******* mysql
查看正在運行的服務
這樣,我們就在服務器上創建了一個數據庫。這樣的數據庫不僅可以在生產環境中使用,也可以用來學習。畢竟在筆記本上安裝數據庫會比較占用內存。
所以我可以配置數據庫連接字符串在我的項目中使用這個數據庫
無論項目在哪個主機上啟動,都可以成功運行。畢竟數據庫的IP和密碼是固定的。
選擇合適的 CI/CD 平臺
上面說了,我用的是我最開始是從Asp.NET Core官網文檔上了解到這個技術的。自從被微軟收購后,一直是微軟推薦的CI/CD技術。
官網文檔
如果你想真正了解這項技術,最好閱讀英文版的文檔。看完《》、《》兩欄目介紹,基本就可以上手了
推薦一篇博客,看完之后可以對它有一個簡單的了解 阮一峰-入門
在本地代碼倉庫配置
在我的項目中實現如下
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["BMS.csproj", "./"]
RUN dotnet restore "BMS.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "BMS.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "BMS.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "BMS.dll"]
嘗試在本地使用包構建進行部署
我們可以使用這個文件按照我們想要的方式打包構建項目源碼
這里我們簡單演示一下,測試需要安裝在本地電腦上。
切換到某個項目目錄下使用
docker build .
這個沒有標簽的圖像是我們剛剛構建的
docker run -d --name bmstest -p 8080:80 7ab686d20640
打開瀏覽器檢查是否成功
有效!
但是,它不夠方便。雖然我們每次修改代碼都會運行幾個命令,別人也可以用我們的鏡像運行程序,但是執行的命令是固定的。修改代碼后是否可以修改代碼?事實證明,可以自動讓它被打包、構建和部署,人類也可以在懶惰中進步。
使用自動打包構建
我們在項目目錄下自己搭建
name: .NET
env:
IMAGE_NAME: test
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET

uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.x
- name: Restore dependencies
run: dotnet restore
- name: Test
run: dotnet test --no-build --verbosity normal
- name: Docker Login
uses: docker/login-action@v1.10.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and Push
uses: docker/build-push-action@v2
with:
tags: horaoen/app:latest
push: true
context: ./BMS
- name: deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.HOST_USERNAME }}
key: ${{ secrets.HOST_SSHKEY }}
script: |
docker stop bms-container
docker rm bms-container
docker rmi horaoen/app:latest
docker pull horaoen/app:latest

docker run -d --name bms-container -p 8080:80 horaoen/app
可以看到這里的yml文件引用了幾個變量。這些都是關系到用戶安全的東西,不能直接寫在配置文件里,需要在倉庫里設置
添加您需要的密鑰
詳細解釋
關于上面.yml配置文件怎么寫,需要先了解基本原理
然后掌握幾個用途
其實這些用戶的項目的基本格式是users/,都是別人寫的腳本。通過復用別人寫的腳本,我們可以方便的做很多事情。
/@v2
用于將遠程倉庫中的源代碼拉取到自動化構建腳本運行的服務器上。這里我們提供ubutu(這個寫在配置文件里)
/設置-@v1
這是搭建項目的基礎環境
/登錄-@v1.10.0
docke官方給的,用于登錄,方便我們后面上傳圖片到自己的圖片倉庫
/build-push-@v2
搭建鏡像,推送到自己的鏡像倉庫。這個參數很難理解。其實就是相對于遠程代碼倉庫根路徑的路徑
官網文檔中介紹默認文件路徑在/下,所以這個配置很重要,不能錯配。
/ssh-@
當我們成功將鏡像推送到鏡像倉庫后,我們需要ssh連接到我們要部署項目的服務器,然后在上面運行一系列的部署項目。
其他參數一目了然,就是這個有點麻煩。它是我們要連接的服務器的 ssh 私鑰。這個官方網站上給出了教程
官網文檔
您可以按照教程進行操作。其實你已經看到了這一點,說明你有能力解決這個問題。詳細步驟可以查看博客中如何配置ssh keys。需要注意的是,文案盡量有說明的抄,哪怕是單個字符錯了
私鑰還要復制上下分界線,一個巨大的坑!!!
示范效果
查看項目
我們發現有亂碼,這里只是模擬實際項目中的bug,現在修改代碼修復bug
其實就是改一下,然后重新提交代碼
有效!!
經驗
顯然從結果來看,這樣很方便,但是學習技術的過程卻很痛苦。將學習過程置于比較條件下是不公平的。學習一次,終生受益,但如果不去改變,就永遠是后患。