日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

背景

  最近入職了一家新公司,公司各個方面都讓我非常的滿意,我也懷著緊張與興奮的心情入職后,在第一天接到了領導給我的第一個任務——把整個項目的依賴引用重新整理并實施項目的CI/CD

  本篇的重點主要分享這次在windows平臺使用Jenkins做.NET Framework的自動化,真是所謂一波N折。

  有關注過我的博客的朋友們,應該知道我之前都是在linux上實施.Net Core,好不容易把Linux技能點起來,現在玩回Windows+.Net Framework感覺有一種回到鉆木取火的年代。

  在實施過程中讓我感悟最多的是,dotnet core命令的便捷性,Linux運維的便捷性,下文我有很多構建腳本都是shell腳本來的,當時想著學習一次就不需要學習bat腳本了,最終還是躲不過。

  在遠程傳送并遠程執行命令我折騰得最久,開始想著用FTP與Telnet,誰知道Telnet命令沒有附帶賬號密碼參數,腳本不好寫,后改成PsExec.exe,使用過程中很多奇怪的問題,后來不得不去折騰OpenSSH,說實話還是SSH好用,直接代替了FTP與PsExec。中間還遇到Jenkins使用本機賬號執行的權限問題。所有“坑”的我在下面步驟盡可能給大家規避了。

引用整理

.Net在Windows上使用Jenkins做CI/CD

 

  項目(包含所以依賴的項目)依賴引用丟失,主要體現以下幾點:

  1. 官方依賴包沒有使用NuGet
  2. 內部項目引用通過本地引用,項目沒有拉取則編譯失敗
  3. NuGet包多個版本的引用
  4. 同屬一個解決方案,但是項目分散到各個倉庫

  依賴沒有規范化對軟件工程主要帶來以下幾點影響:

  1. 缺少代碼或者代碼路徑不一致則無法正常編譯通過
  2. 對于新人同事不友好
  3. 實現CI/CD會有很大的阻力

  解決方案與順序:

  1. 整理組件庫到統一解決方案,日后有需要拆分再按需拆分,優先保證需要依賴的在一個方案。
  2. 實現組件庫的自動發布到私有Nuget
  3. 整理API項目的依賴,拋棄以前本地依賴的方式,統一使用Nuget
  4. 實現API項目的自動發布到IIS

工具準備

工具名稱下載地址描述jdk-8u261-windows-i586.exehttps://www.oracle.com/JAVA/technologies/javase/javase-jdk8-downloads.htmlJenkins依賴nuget.exe CLI https://dist.nuget.org/win-x86-commandline/latest/nuget.exe發布、還原.Net依賴包MsBuildhttps://visualstudio.microsoft.com/zh-hans/vs/community/msbuild在vs安裝程序里Jenkins
https://www.jenkins.io/zh/download/ githttps://git-scm.com/download/win OpenSSH服務端https://github.com/PowerShell/Win32-OpenSSH/releases 遠程傳輸與遠程執行命令

 物理部署圖

.Net在Windows上使用Jenkins做CI/CD

 

  文章會分享跨網絡環境的場景,我們使用了Gitee的企業倉儲,Jenkins與Nuget.Server會放在阿里云服務器,機房會開放一臺服務器與阿里云服務器進行SSH的通信。

  以上是基本的信息概要,下面會進入具體的實施步驟。

NuGet.Server的部署

  新建一個ASP.Net Web應用程序(.NetFramework),并選擇空模板,搜索NuGet.Server選擇3.4.1版本安裝后,打開Web.config文件設置apiKey,然后就可以部署到47.115.111.58的IIS了。

  官方部署文檔可以查看 https://docs.microsoft.com/zh-cn/nuget/hosting-packages/nuget-server

.Net在Windows上使用Jenkins做CI/CD

 


.Net在Windows上使用Jenkins做CI/CD

 

 

 安裝MsBuild

  在服務器47.115.111.58打開通過上面表格的鏈接下載VS的安裝包,點開單個組件選項卡,勾選Msbuild,等待一會即可完成。

.Net在Windows上使用Jenkins做CI/CD

 

配置nuget.exe CLI

  在服務器47.115.111.58根據上面表格nuget.exe CLI,下載后放到一個合適的文件目錄,并在【環境變量配置】配置好路徑,打開cmd并輸入指令nuget help出現以下畫面證明成功。

.Net在Windows上使用Jenkins做CI/CD

 

添加NuGet還原源配置項

  在部署Jenkins服務器47.115.111.58,打開C:Windowssystem32configsystemprofileAppDataRoamingNuGetNuGet.Config,沒有的化可以自己建一個,輸入以下腳本。

  如果沒有配置好,接下來的應用項目可能會編譯時還原包失敗導致無法編譯通過。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="私有NuGet服務" value="http://47.115.11.58:8008/nuget" />
    <add key="Microsoft Visual Studio Offline Packages" value="C:Program Files (x86)Microsoft SDKsNuGetPackages" />
  </packageSources>
</configuration>

安裝OpenSSH服務端

  根據上面表格的地址下載解壓后,在服務器47.115.151.108以管理員啟動CMD

 

cd C:toolsOpenSSH-Win64
 #安裝服務端powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 #啟動服務net start ssh-agentsc config ssh-agent start= auto
net start sshdsc config sshd start= auto
 #防火墻打開22端口
#大于等于 Windows Server 2012
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
 #小于 Windows Server 2012
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22

  這樣就可以通過administrator賬號或者管理員賬號在客戶端用ssh登錄了。  

  以上是各個服務器基本依賴安裝。

安裝Jenkins

  在服務器47.115.111.58,先把jdk與git安裝好后,點開Jenkins安裝,選擇默認路徑下一步,遇到設置服務登錄賬戶的時候,必須選擇以administrator安裝,不然后續會有很多執行的權限問題。

.Net在Windows上使用Jenkins做CI/CD

 

如果點擊Test Credentials無法通過,可以在運行輸入mmc打開策略編輯器,并在計算機配置-[windows設置]-[安全設置]-[本地策略]-[用戶權限分配]-[作為服務登錄],填寫administrator或者您的管理員賬號。

.Net在Windows上使用Jenkins做CI/CD

 

  接著點擊下一步等待完成后,會彈出一個localhost:8080的頁面,根據他的指示初始化界面就可以了。輸入完管理員賬號后這個時候可以去修改workspace的地址,當時我沒有修改地址的時候,因為路徑有特殊字符導致無論如何都無法用msbuild編譯通過。

  打開C:WindowsSystem32configsystemprofileAppDataLocalJenkins.jenkinsconfig.xml,修改workspaceDir屬性的值為C:/jenkins_workspace/${ITEM_FULL_NAME},盡可能給一個簡單純英文的路徑。

配置Jenkins

  在主界面點擊【Manage Jenkins】-【Configure System】界面,定位到Shell,輸入您剛安裝的git路徑的sh.exe,C:Program FilesGitbinsh.exe

.Net在Windows上使用Jenkins做CI/CD

 

  同樣界面定位到SSH Servers點擊Add Server把剛剛安裝OpenSSL的服務器47.115.151.108填寫進去,賬號密碼是47.115.151.108服務器管理員的賬號密碼。

.Net在Windows上使用Jenkins做CI/CD

 

  在主界面點擊【Manage Jenkins】-【Global Tool Configuration】界面,定位到Git,輸入您剛安裝的git路徑的git.exe,C:Program FilesGitbingit.exe

.Net在Windows上使用Jenkins做CI/CD

 

  到這里Jenkins的配置基本上完成了。

自動發布組件包到NuGet

  新建Freestyle project,并在【源碼管理】、【構建】填入您的構建信息,構建腳本我是保存在服務器上,因為保存在服務器上更加可靠

 

.Net在Windows上使用Jenkins做CI/CD

 


.Net在Windows上使用Jenkins做CI/CD

 

構建腳本shell示例

#!/bin/bash 
#腳本開始執行echo '腳本開始執行'
base_path=C:/jenkins_workspace/Librariynuget_url=http://47.115.111.58:8008/nuget
nuget_api_key=B82D6DDB-C6F958E8C945nuget restore $base_pathfor project_name in $base_path/*
doproject_path=$project_namepackage_path=$project_path/packagesrm -rf $package_pathnuget pack $project_path -Build -IncludeReferencedProjects -Properties Configuration=Release -OutputDirectory $package_path &&nuget push -ApiKey $nuget_api_key -Source $nuget_url $package_path/*.nupkgif [ $? -eq 0 ]; then
    echo '發布成功:'$project_name''
else
    echo '發布失敗:'$project_name''
fidoneecho '腳本執行結束'

  以上發布組件包到私有NuGet的步驟就實施完畢了。

自動發布Web應用到IIS

新建Freestyle project,并在【源碼管理】、【構建】填入您的構建信息。[Publish Over SSH]插件跟OpenSSL能把編譯好的文件發送到相應的服務器,并執行對應的集群分發腳本。

 

.Net在Windows上使用Jenkins做CI/CD

 


.Net在Windows上使用Jenkins做CI/CD

 

示例構建shell腳本

#!/bin/bash 
echo '腳本開始執行'
base_path=C:/jenkins_workspace/API
project_path=$base_path/API.csproj
publish_path=$base_path/publish
rm -rf $publish_path
nuget restore $base_path  && 
MSBuild.exe $project_path  -t:"rebuild;publish;ResolveReferences;_CopyWebApplication" -p:"Configuration=Release;OutputPath=$publish_path"
if [ $? -eq 0 ]; then
    echo '發布成功:'$project_name''
else
    echo '發布失敗:'$project_name''
fi
echo '腳本執行結束'

示例分發bat腳本

記得在局域網把相應服務器的共享文件夾啟動

net use \192.168.1.2app "password" /user:"administrator"
xcopy/a/s/h/y  C:appftpSFNovelAPI \192.168.1.2appAPI
net use \192.168.1.3app "password" /user:"administrator"
xcopy/a/s/h/y  C:appftpSFNovelAPI \192.168.1.3appAPI
xcopy/a/s/h/y C:appftpSFNovelAPI C:appSFNovelAPI

結束

  以上記錄并分享了我在Windows實施自動化的過程與步驟,如果大家有更好的建議與提議,可以在下方評論反饋給我。


轉自 https://www.cnblogs.com/skychen1218/p/13633012.html

分享到:
標簽:Net
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定