Linux下自動化部署ASP.NET CORE 3.1(Docker+Jenkins+Nginx)

一、先配置好Docker阿里雲加速,可使用阿里雲容器服務 (可本身在阿里雲申請,要否則安裝東西直接很慢)
注意:https://XXXX.mirror.aliyuncs.com爲阿里雲加速服務分配地址java

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://XXXX.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

  

二、安裝Docker
使用腳本自動安裝linux

$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun

  

三、安裝JenKins
建立jenkins工做目錄nginx

mkdir /usr/local/jenkins

  

拉取jenkins鏡像git

docker pull jenkins/jenkins:lts

  

修改jenkins目錄和docker目錄權限,這裏1000是容器中Jenkins 的用戶 uidweb

chown -R 1000:1000 /usr/local/jenkins
sudo chown -R 1000:1000 /var/run/docker.sock

docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -v /usr/local/jenkins:/var/jenkins_home -v /usr/bin/docker:/bin/docker -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts 

  

參數解釋:
-p 8080:8080 -p 50000:50000 --映射jenkins端口
--name jenkins --容器名稱本身命名
privileged=true --授予容器管理員權限
-v /usr/local/jenkins:/var/jenkins_home --映射jenkins目錄
-v /usr/bin/docker:/bin/docker --映射docke目錄 到時候須要在容器裏執行docker命令
-v /var/run/docker.sock:/var/run/docker.sock --映射docker執行命令 到時候須要容器裏執行docker命令。docker

配置JenKins
查看容器啓動成功後,咱們能夠經過地址+端口訪問剛剛運行的Jenkins
例如http://IP地址:8080
安裝成功訪問後會以下圖所示。shell

 

 

 

提示首次訪問須要密碼,咱們經過剛剛映射的Jenkins目錄裏查看這個默認密碼。
默認密碼路徑:/usr/local/jenkins/secrets/ (注意前面usr/local/jenkins路徑就是剛剛本身映射的目錄)json

 

 

 

 

 

 安裝完成後建立一個用戶名和密碼,便可完成安裝進入首頁。vim

 

 

 

3. 建立項目bash

一、源代碼編譯發佈工程

源代碼發佈工程即將源代碼提交到git服務器,jenkins經過git拉取最新的源代碼,並經過Dockerfile裏的配置進行編譯發佈過程。而後經過Docker構建此鏡像並運行到容器。

建立一個.Net Core Web項目。

 

建立項目的時候能夠選擇啓用Docker支持。

 

 默認的Dockerfile是有幫咱們進行代碼編譯併發布動做的。因此默認的Dockerfile文件是適合和代碼一塊兒提交到服務器而後使用Docker進行構建鏡像。

 項目建立完成後隨代碼一塊兒提交到git服務器。(svn等也均可以)

git項目目錄,注意將Dockerfile複製到根目錄。因爲到時候構建鏡像的時候就是從根目錄執行的。

二、已編譯的Release工程

已編譯的Release工程,此種方式適合git或svn在局域網的;又不但願源代碼不暴露到外網的須要。此種方式是將項目工程進行進行發佈打包操做。例如java常見的打包成一個war包文件。.Net 就是生成對應的DLL 文件。

項目在發佈以前咱們對項目的Dockerfile文件屬性作個更改,以便在發佈時將此文件複製到發佈時的目錄。

將發佈文件發佈到本身的git(或svn)目錄,以下圖所示的,必定要包含Dockerfile文件。發佈後的文件,能夠根據本身須要將沒有更新DLL或者appsetting.json等文件剔除掉。只保留本次要更新的文件便可。

修改Dockerfile文件,由於默認的Dockerfile文件是包含編譯發佈的命令,因此這裏要將這些相關命令操做刪除掉;保留以下命令配置便可。

 

 保存而後提交到全部文件到git服務器。

提交後的git目錄。

建議:不管是代碼編譯發佈工程仍是已編譯的Release工程,第一次使用Docker部署時最好先本身手動將這些文件拷貝到服務器,並手動構建對象並運行容器看是否成功;可否訪問網站。也就是先不用Jenkins將這些流程本身手動走一遍,確保一些目錄包括Dockerfile等都是配置正確的。

如只想將發佈文件提交到git,能夠下載git桌面版本,在本地新建項目,同步到git線上便可;

 

4.  建立JenKins任務

項目工程建立完成並提交到git服務器後,開始在Jenkins裏面建立任務。

 

 

 輸入項目描述,源代碼管理選擇本身對應的便可。

 

 

 我這裏選擇的git。第一次添加項目時須要添加一種受權方式點擊右邊添加按鈕便可。

 

 

 選擇添加受權方式 經常使用的就是用戶名加密碼或者SSH方式。

 

 

 下一步設置構建環境

 

 

 設置觸發器,這裏主要是設置自動觸發條件,有定時構建、遠程觸發構建、輪詢SCM。

這裏只設置輪詢SCM形式的,很簡單的方式。意思是在指定間隔時間內會去輪詢git或svn中版本是否有變化。若是有就當即構建該項目。其實就是作到只要代碼提交了 則馬上就能自動構建項目進行發佈;不在須要其餘任何操做了。

 

 

 選擇構建—>執行shell;固然咱們這裏是linux服務器全部多數選擇執行shell。

 

 

 添加shell 命令

#!/bin/bash
# 獲取短版本號
GITHASH=`git rev-parse --short HEAD`
docker stop webtest
docker rm webtest
echo ---------------Building Docker Image...------------------
docker build -t webtest:$GITHASH .
docker tag webtest:$GITHASH webtest:latest
echo ---------------Launching Container...------------------
docker run --name webtest -d -p 8005:80 webtest:latest 

應用--保存

在構建開始前,請確認已安裝ASP.NET Core Runtime與.NET Core SDK

docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1

docker pull mcr.microsoft.com/dotnet/core/sdk:3.1

請先提早安裝,不然構建時可能會因沒法安裝而超時

自動開始構建了 注意jenkins這裏時間是默認是utc時間。utc時間轉換咱們北京時間是要+8小時的。

藍色圖標表明構建成功,若是失敗會是紅色

查看控制檯輸出信息,尤爲構建失敗時可以從裏面獲取到失敗緣由等。

 

 

構建失敗狀況

一、ASPNETCORE項目發佈中Dockfile文件中配置項沒有修改

 

 

二、Docker命令不存在,目錄權限沒有設置

 

 三、構建時超時,aspnetcore運行時沒有安裝

 

 nginx安裝

docker pull nginx:latest

docker run --name nginx-test -p 8080:80 -d nginx

  

參數說明:

--name nginx-test:容器名稱。

-p 8080:80: 端口進行映射,將本地 8080 端口映射到容器內部的 80 端口。

-d nginx: 設置容器在在後臺一直運行。

 

nginx 代理設置

docker ps -a  獲取nginx容器ID

docker exec -it 容器ID /bin/bash 進入容器

由於容器沒有安裝VIM,先安裝VIM

apt-get update && apt-get install vim -y

進入/etc/nginx/conf.d

新建文件

vim xxxx.conf

server {
    listen        80;
    server_name   example.com *.example.com;
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

可參考

https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-3.1

nginx -t  配置文件檢測

nginx -s reload 更新配置文件

最後成果:

相關文章
相關標籤/搜索