了解最新公司動態(tài)及行業(yè)資訊
目錄 源代碼倉庫 環(huán)境配置好的云服務(wù)器 安裝mysql 選擇合適的CI/CD平臺 在本地代碼倉庫配置 使用自動打包搭建演示效果 體驗為什么需要
從概念提出至今已近十年服務(wù)器運維技術(shù),各種實用的解決方案相繼在各個開發(fā)團(tuán)隊得到應(yīng)用。通過版本控制工具(Git、SVN)+源碼倉庫(Gitee、)+CI/CD平臺(、、CI...)解決方案,大大提升開發(fā)者的開發(fā)體驗,降低開發(fā)運維成本,提升產(chǎn)品質(zhì)量...
由于個人經(jīng)驗不足,無法繼續(xù)細(xì)說優(yōu)點和功能,推薦一篇博客
基本思路
如何練習(xí)
廢話這么多,不如實踐一下,看看好壞。圍繞 , , CI 等 CI/CD 平臺,可以很好的實現(xiàn)持續(xù)集成和持續(xù)部署。在碼云源碼倉庫中,我們可以看到如下流行的程序
并集成在
那么我們真正需要用到哪些技術(shù)和工具來構(gòu)建這樣一個流水線平臺呢?
我總結(jié)如下:
掌握流行版本控制工具(Git、SVN)的基本使用 依賴一個源代碼倉庫(、Gitee) 基本的linux運維技術(shù)(SSH遠(yuǎn)程、)一個CI/CD平臺(、、CI...)
僅此而已,無需任何編程技能!
精通以上每一項技術(shù)都不是一件容易的事,但我們只需要選擇其中的一項來掌握基本方法,就可以將它們串聯(lián)起來。
我根據(jù)自己的技術(shù)棧設(shè)計了這樣一個方案
為此我們需要一步步做一些準(zhǔn)備工作
版本控制工具(Git)學(xué)習(xí)使用
學(xué)習(xí)使用,這里推薦廖雪峰的Git學(xué)習(xí)網(wǎng)站,阮一峰-Git命令列表,阮一峰-Git原理
配置環(huán)境
安裝軟件git官網(wǎng)
檢查安裝
git --version
配置本地用戶信息
git config --global user.name "Name"
git config --global user.email "**.com"
git config --list
源代碼庫
這里就不細(xì)說了,太簡單了,用搜索引擎查一下就可以了,如圖服務(wù)器運維技術(shù),我在上面建了一個這樣的倉庫(空倉庫也可以,后面可以補(bǔ)上代碼)
注意本教程依賴這樣的平臺,必須使用,所以網(wǎng)絡(luò)問題需要自己解決
我們準(zhǔn)備了一個基于Asp.NET Core 6的圖書館管理系統(tǒng)項目,目錄結(jié)構(gòu)如下圖所示。然后如上圖所示將源碼推送到遠(yuǎn)程代碼倉庫。(推送說明就不詳細(xì)說了,掌握了git的基本使用就明白了)
環(huán)境配置良好的云服務(wù)器
為此,我準(zhǔn)備了一臺4G運行內(nèi)存,8M帶寬的騰訊云服務(wù)器。操作系統(tǒng)是
SSH遠(yuǎn)程登錄
可以使用云服務(wù)器控制臺提供的遠(yuǎn)程工具,也可以使用遠(yuǎn)程控制工具如. 為了讓后面的操作盡可能的順利,你需要使用一些基本的linux指令,你可以看看這個linux快速入門視頻。
有免費版,下載安裝后,新建一個如下
然后按照提示輸入賬戶名和密碼
服務(wù)器上安裝的技術(shù)準(zhǔn)備
在這里隨便找了一個狂生的視頻-詳細(xì)教程,隨便看看,加深理解
為什么博客應(yīng)該使用
我們知道一個項目需要一個運行環(huán)境才能運行。為了運行一個java項目,我們?yōu)榉?wù)器安裝相應(yīng)版本的Jdk或Jre。.Net 應(yīng)用程序需要相應(yīng)版本的.Net 或.Net Core SDK 才能運行。,比如我們?nèi)粘J褂玫目蓤?zhí)行程序qq等,都是需要運行環(huán)境的,但是已經(jīng)提前安裝了各種版本的.Net,這樣我們安裝完應(yīng)用程序就可以直接使用了。再比如在服務(wù)器上安裝相應(yīng)的數(shù)據(jù)庫(mysql、)。管理這些開發(fā)環(huán)境是一件很煩人的事情,但是當(dāng)我們使用這樣一個容器化的技術(shù)庫時,代碼就是環(huán)境,可以安裝在任何服務(wù)器上。無需配置任何環(huán)境即可運行。
安裝
菜鳥教程-安裝
使用安裝mysql
有了我們安裝mysql就變得簡單了
docker pull mysql
看看我們拉下來的圖片
docker images
跑
docker run -d --name mysql3306 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=******* mysql
查看正在運行的服務(wù)
這樣,我們就在服務(wù)器上創(chuàng)建了一個數(shù)據(jù)庫。這樣的數(shù)據(jù)庫不僅可以在生產(chǎn)環(huán)境中使用,也可以用來學(xué)習(xí)。畢竟在筆記本上安裝數(shù)據(jù)庫會比較占用內(nèi)存。
所以我可以配置數(shù)據(jù)庫連接字符串在我的項目中使用這個數(shù)據(jù)庫
無論項目在哪個主機(jī)上啟動,都可以成功運行。畢竟數(shù)據(jù)庫的IP和密碼是固定的。
選擇合適的 CI/CD 平臺
上面說了,我用的是我最開始是從Asp.NET Core官網(wǎng)文檔上了解到這個技術(shù)的。自從被微軟收購后,一直是微軟推薦的CI/CD技術(shù)。
官網(wǎng)文檔
如果你想真正了解這項技術(shù),最好閱讀英文版的文檔??赐辍丁?、《》兩欄目介紹,基本就可以上手了
推薦一篇博客,看完之后可以對它有一個簡單的了解 阮一峰-入門
在本地代碼倉庫配置
在我的項目中實現(xiàn)如下
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"]
嘗試在本地使用包構(gòu)建進(jìn)行部署
我們可以使用這個文件按照我們想要的方式打包構(gòu)建項目源碼
這里我們簡單演示一下,測試需要安裝在本地電腦上。
切換到某個項目目錄下使用
docker build .
這個沒有標(biāo)簽的圖像是我們剛剛構(gòu)建的
docker run -d --name bmstest -p 8080:80 7ab686d20640
打開瀏覽器檢查是否成功
有效!
但是,它不夠方便。雖然我們每次修改代碼都會運行幾個命令,別人也可以用我們的鏡像運行程序,但是執(zhí)行的命令是固定的。修改代碼后是否可以修改代碼?事實證明,可以自動讓它被打包、構(gòu)建和部署,人類也可以在懶惰中進(jìn)步。
使用自動打包構(gòu)建
我們在項目目錄下自己搭建
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/[email protected]
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文件引用了幾個變量。這些都是關(guān)系到用戶安全的東西,不能直接寫在配置文件里,需要在倉庫里設(shè)置
添加您需要的密鑰
詳細(xì)解釋
關(guān)于上面.yml配置文件怎么寫,需要先了解基本原理
然后掌握幾個用途
其實這些用戶的項目的基本格式是users/,都是別人寫的腳本。通過復(fù)用別人寫的腳本,我們可以方便的做很多事情。
/@v2
用于將遠(yuǎn)程倉庫中的源代碼拉取到自動化構(gòu)建腳本運行的服務(wù)器上。這里我們提供ubutu(這個寫在配置文件里)
/設(shè)置-@v1
這是搭建項目的基礎(chǔ)環(huán)境
docke官方給的,用于登錄,方便我們后面上傳圖片到自己的圖片倉庫
/build-push-@v2
搭建鏡像,推送到自己的鏡像倉庫。這個參數(shù)很難理解。其實就是相對于遠(yuǎn)程代碼倉庫根路徑的路徑
官網(wǎng)文檔中介紹默認(rèn)文件路徑在/下,所以這個配置很重要,不能錯配。
/ssh-@
當(dāng)我們成功將鏡像推送到鏡像倉庫后,我們需要ssh連接到我們要部署項目的服務(wù)器,然后在上面運行一系列的部署項目。
其他參數(shù)一目了然,就是這個有點麻煩。它是我們要連接的服務(wù)器的 ssh 私鑰。這個官方網(wǎng)站上給出了教程
官網(wǎng)文檔
您可以按照教程進(jìn)行操作。其實你已經(jīng)看到了這一點,說明你有能力解決這個問題。詳細(xì)步驟可以查看博客中如何配置ssh keys。需要注意的是,文案盡量有說明的抄,哪怕是單個字符錯了
私鑰還要復(fù)制上下分界線,一個巨大的坑?。?!
示范效果
查看項目
我們發(fā)現(xiàn)有亂碼,這里只是模擬實際項目中的bug,現(xiàn)在修改代碼修復(fù)bug
其實就是改一下,然后重新提交代碼
有效!!
經(jīng)驗
顯然從結(jié)果來看,這樣很方便,但是學(xué)習(xí)技術(shù)的過程卻很痛苦。將學(xué)習(xí)過程置于比較條件下是不公平的。學(xué)習(xí)一次,終生受益,但如果不去改變,就永遠(yuǎn)是后患。