1. 程式人生 > >[C#]使用 Jenkins + TFS 為 .Net Core 實現持續整合/部署

[C#]使用 Jenkins + TFS 為 .Net Core 實現持續整合/部署

在前後端分離開發的專案當中為了避免重複構建釋出,我們需要部署一個持續釋出環境,而目前的開發環境伺服器都是基於 CentOS 的,因此每次在本地釋出之後還需要打包,上傳,部署,十分繁瑣。故這裡採用了比較成熟的Jenkins 作為持續部署環境。

為了方便安裝,我們這裡使用了 Docker 來進行安裝,至於 Docker 安裝的步驟這裡不在贅述,詳情可以參考這一篇博文

上面安裝的是一個較老的版本,這裡推薦參考來進行安裝。

安裝好 Docker 之後,拉取 Jenkins 的官方映象。執行如下命令:

docker pull jenkins/jenkins

拉取完畢之後我們基於這個映象封裝一個新的映象出來,可能會問為什麼不能直接使用呢?因為這兒的 jenkins映象並不包含 docker 環境,所以我們需要封裝一個新的映象讓其能夠訪問宿主機的 Docker 程式。
構建 Dockerfile 內容如下:

FROM jenkins/jenkins:latest
USER root
#清除了基礎映象設定的源,切換成阿里雲的源
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
  && echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
  && echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
  && echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list
#更新源並安裝缺少的包
RUN apt-get update && apt-get install -y libltdl7
ARG dockerGid=999

RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group \
USER jenkins

完成之後執行如下命令構建新的 Docker 映象:

docker build -t docker/jenkins .

下面我們就開始執行我們的 Jenkins 容器了:

docker run -d -p 8080:8080 -p 50000:50000 \
    --name=jenkins -v /root/docker/jenkins:/var/jenkins_home \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v $(which docker):/usr/bin/docker \
    docker/jenkins

這裡我們將 Jenkins 映象裡面的 /var/jenkins_home 對映到了宿主機的 /root/docker/jenkins 資料夾,在這個資料夾裡面都存放的是 Jenkins 的一些配置項等。
注意,這裡可能會出現如下錯誤:

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

這是因為在 docker 內部的 jenkins user 使用者沒有許可權,因為對映的 /root/docker/jenkins/ 資料夾屬於root 使用者的,而 jenkins user 的 uid 為 1000,執行如下命令:

sudo chown -R 1000:1000 /home/docker/jenkins

之後再次執行 Jenkins 的容器,訪問 http://伺服器IP:8080/ 站點,會提示你輸入金鑰:

我們來到宿主機執行以下 shell 命令:

docker container logs jenkins

就可以看到金鑰其實已經輸出在終端了,複製過來,貼上進去就可以了。之後就是選擇你需要安裝的外掛,選擇第一個預設即可,可能這裡因為網路原因會安裝失敗,可以多重試幾次,或者直接忽略掉,後面我們會將如何解決。

安裝完成之後輸入使用者名稱密碼,就可以開始使用了,可能你剛才會因為網路等原因造成外掛安裝失敗,這裡我們來到

Jenkins>>系統管理>>管理外掛>>高階

這裡我們專案使用的是 TFS 進行原始碼管理,所以我們需要安裝 TFS 外掛,在 Manage Jenkins 的 Manage Plugin 裡面我們找到 Team Foundation Server Plug-in 外掛,勾選,點選 Download now and install after restart 按鈕,勾選 Restart Jenkins when installation is complete and no jobs are running 。

安裝完成之後 Jenkins 會重啟,等待重啟完畢之後,來到 Jenkins>>Manage Jenkins>>Configure System 檢視 TFS/Team Services 然後新增你的 TFS Collection。

儲存之後我們就可以新建專案了。

首先,我們來到首頁,選擇 New Item:

然後選擇自由風格專案,填上名稱.

在 Source Code Management 上選擇 TFS,並且填入你的 TFS 伺服器地址,專案路徑,與你的賬號密碼:

然後你就可以嘗試構建一下,構建成功之後就會在 Workspace 看到你的專案檔案被拉下來了。

那麼我們的程式碼如何構建並且部署呢?因為我們之前在 Jenkins 的 Docker 映象啟動的時候掛載了宿主機的 Docker 程式,我們現在就可以直接基於微軟的 dotnetcore 映象來構建我們的專案。所以,我們先拉取微軟的 dotnetcore 映象,執行如下命令:

docker pull microsoft/dotnet:latest

拉取映象之後,我們來編寫一個 Dockerfile 檔案來讓 Jenkins 來執行 Shell 構建。
如果你還不知道如何編寫 Dockerfile 檔案,可以參考 這篇文章

FROM microsoft/dotnet:latest
WORKDIR /app
COPY ./ .
ENV ASPNETCORE_URLS http://+:5000
EXPOSE 5000

RUN cd ./HKERP.IdentityServer.Host \
    && dotnet restore \
    && dotnet build

WORKDIR /app/HKERP.IdentityServer.Host
ENTRYPOINT ["dotnet","run"]

然後將這個 Dockerfile 放在你的專案裡面,類似於這樣:

然後我們再回到剛才 Jenkins 裡面,配置剛才專案,新建一個 Shell Step,就像這樣:

程式碼如下:

#!/bin/sh
cd /var/jenkins_home/workspace/API_IdentityServer
docker container prune << EOF
y
EOF
docker container ls -a | grep "api_identityserver"
if [ $? -eq 0 ];then
    docker container stop api_identityserver
    docker container rm api_identityserver
fi
docker image prune << EOF
y
EOF
docker build -t api_identityserver .
docker run -d -p 8083:5000 --name=api_identityserver api_identityserver

步驟就是首先清理掉 docker 處於終止狀態的容器,然後判斷有沒有叫 api_identityserver 的容器在執行,如果有就直接停掉,然後清除所有的虛懸映象,使用當前目錄的 dockerfile 構建一個新的 api_identityserver 映象,使用 api_identityserver 映象執行一個新的容器。

這兒我安裝了 Jenkins 的一個 Blue Ocean 外掛,來看一下:

執行一下:

相關推薦

[C#]使用 Jenkins + TFS .Net Core 實現持續整合/部署

在前後端分離開發的專案當中為了避免重複構建釋出,我們需要部署一個持續釋出環境,而目前的開發環境伺服器都是基於 CentOS 的,因此每次在本地釋出之後還需要打包,上傳,部署,十分繁瑣。故這裡採用了比較成熟的Jenkins 作為持續部署環境。 為了方便安裝,我們這裡使用了 Docker 來進行安裝,至於 Doc

Jenkins 通過Gradle對Android實現持續整合

Gradle 編譯打包越來越受歡迎,特別是在安卓端,如何實現GitLab、Jenkins 、Gradle、fir工具完成版本、編譯、打包、釋出流程。   Jenkins配置 Git Gradle構建環境配置 Gradle build.gradle配置檔

Asp.net Core 使用Jenkins + Dockor 實現持續整合、自動化部署(二):部署

前面又是廢話 我之前寫過: Asp.Net Core 程式部署到Linux(centos)生產環境(一):普通部署 Asp.Net Core 程式部署到Linux(centos)生產環境(二):docker部署 大家可能會有疑問,分散式環境當中的部署還是跟我們在windows一樣,一臺機一臺機的去

Asp.net Core 使用Jenkins + Dockor 實現持續整合、自動化部署(一):Jenkins安裝

寫在前面 其實園子裡很多大佬都寫過,我也是一個搬運工很多東西不是原創的,不過還是想把自己安裝的過程,記錄下來如果能幫到大家的忙,也是一件功德無量的事; 執行環境 centos:7.2 cpu:1核 2G記憶體 1M頻寬 其實用的騰訊雲 安裝jenkins 這裡的jenkins就不從docker

ASP.NET Core + Docker +Jenkins 實現持續整合

本文為 docker-compose 方式,但自從 Visual Studio 2017 15.8 版本更新以後,通過VS新增的 Docker 支援預設就只有 Dockerfile 了,所以請參見這篇文章:https://www.cnblogs.com/stulzq/p/9201830.html 準備 我

Jenkins 結合 Docker .NET Core 專案實現低配版的 CI&CD

隨著專案的不斷增多,最開始單體專案手動執行 docker build 命令,手動釋出專案就不再適用了。一兩個專案可能還吃得消,10 多個專案每天讓你構建一次還是夠嗆。即便你的專案少,每次花費在釋出上面的時間累計起來都夠你改幾個 BUG 了。 所以我們需要自動化這個流程,讓專案的釋出和測試不再這麼繁瑣。在這裡我

.NET Core部署到linux(CentOS)最全解決方案,入魔篇(使用Docker+Jenkins實現持續整合、自動化部署)

通過前面三篇: [.NET Core部署到linux(CentOS)最全解決方案,常規篇](http://blog.rdiframework.net/article/244) [.NET Core部署到linux(CentOS)最全解決方案,進階篇(Supervisor+Nginx)](http://bl

C# (.NET Core) 實現抽象工廠設計模式

show 技術 例如 mtom src box gif 一起 off 本文的概念性內容來自深入淺出設計模式一書. 上一篇文章講了簡單工廠和工廠方法設計模式 http://www.cnblogs.com/cgzl/p/8760250.html, 使用的是披薩店的例子. 文

Dora.Interception,.NET Core度身打造的AOP框架 [5]:輕鬆地實現與其他AOP框架的整合

  Dora.Interception,為.NET Core度身打造的AOP框架 [5]:輕鬆地實現與其他AOP框架的整合 這裡所謂的與第三方AOP框架的整合不是說改變Dora.Interception現有的程式設計,而是恰好相反,即在不改變現有程式設計模式下采用第三方AOP框架或

.Net Core in Docker - 使用阿里雲Codepipeline及阿里雲容器映象服務實現持續整合(CI)

前面已經介紹過了 .Net Core 程式釋出到 Docker 容器的內容。但是每次通過 SSH 連結到伺服器敲命令,執行指令碼也是挺麻煩的一件事。程式設計師是最懶的,能讓電腦解決的問題絕不手動解決,如果當我們push一次程式碼後自動build程式碼,自動跑單元測試,如果測試通過,自動釋出程式,如果失敗就發郵

.Net Core in Docker - 使用阿里雲Codepipeline及阿里雲容器映象服務實現持續交付/部署(CD)

上一次演示瞭如何使用阿里雲Codepipeline,阿里雲容器映象服務實現CI,講到這裡我們push一下程式碼後就自動編譯、自動跑單元測試、自動構建映象、自動推送映象到私倉。那麼離我們最初設定的目標只差那麼一小步了,那就是自動部署到測試/生產環境,這一步就是持續交付/部署(CD)。 CD其實是兩個意思 (1)

Azure DevOps+Docker+Asp.NET Core 實現CI/CD(二.建立CI持續整合管道)

前言 本文主要是講解如何使用Azure DevOps+Docker 來實現持續整合Asp.NET Core專案(當然 也可以是任意專案). 上一篇: Azure DevOps+Docker+Asp.NET Core 實現CI/CD(一 .簡介與建立自己的代理池) 覺得有幫助的朋友~可以左上角點個關注,右下角點

Github倉庫新增Github Actions實現持續整合: Android apk自動編譯釋出以及github pages同步推送coding.net

> 內容轉載自[我的部落格](https://blog.whuzfb.cn/blog/2020/08/09/github_actions/) [TOC] ## 說明 對於普通的github倉庫,只需要在根目錄建立`.github/workflows/`資料夾即可自動使用Actions功能,具體執行的操

ASP.NET Core實現強類型Configuration讀取配置數據

控制器 項目 最好 前言實現讀取JSON文件幾種方式,在項目中采取老辦法簡單粗暴,結果老大過來一看,恩,這樣不太可取,行吧那我就用.NET Core中最新的方式諾,切記,適合的才是最好的,切勿懶。.NET Core讀取JSON文件通過讀取文件方式 當我將VS2015項目用VS2017打開後

ASP.NET Core實現類庫項目讀取配置文件

services 應用程序 配置文件 builder public .NET Core類庫項目讀取JSON配置文件在應用程序目錄下添加JSON文件是進行如下配置: var builder = new ConfigurationBuilder()

Dora.Interception,.NET Core度身打造的AOP框架:全新的版本

分享 ide 1.0 nuget hub tex 普通 inb .class Dora.Interception 1.0(Github地址:可以訪問GitHub地址:https://github.com/jiangjinnan/Dora)推出有一段時間了,最近花了點時間將它

.net core實現redisClient

array chan closed setevent highlight 方式 master 不同的 hub 引言   最近工作上有需要使用redis,於是便心血來潮打算自己寫一個C#客戶端。經過幾天的努力,目前該客戶端已經基本成型,下面簡單介紹一下。 通信協議   要想自

Centos7 & Docker & Jenkins & ASP.NET Core 2.0 自動化發布和部署

必須 ans http 集成 ase blank ps 命令 local rom 寫在前面 Docker一直很火熱,一直想把原本的Jenkins自動部署工具搬到Docker上面,無奈今年一直忙於各種事情,遲遲未實施這個事情,正好迎來了dotnet core 2.0 的

使用靜態基類方案讓 ASP.NET Core 實現遵循 HATEOAS Restful Web API

以及 acc repo pri == single partially context 繼承 Hypermedia As The Engine Of Application State (HATEOAS) HATEOAS(Hypermedia as the engi

SkyWalking .NET Core

使用 HR 同學 sca 個人博客 應用監控 topology 為我 api SkyWalking 為.NET Core https://www.cnblogs.com/liuhaoyang/p/skywalking-dotnet-v02-release.html Apac