首先需要獲得Azure上App-service 的porfile. 登錄portal 選到app,點擊Get publish pofile 將得到一個 ****.PublishSettings,註意這個文件還不是最後真正用於發佈的配置,還需要做如下操作,得到一個真正的發佈配置, 在VS 中打開項目, ...
首先需要獲得Azure上App-service 的porfile. 登錄portal 選到app,點擊Get publish pofile
將得到一個 ****.PublishSettings,註意這個文件還不是最後真正用於發佈的配置,還需要做如下操作,得到一個真正的發佈配置,
在VS 中打開項目,點擊發佈,導入配置
在導入配置後,在這個目錄下(項目web的路徑\Properties\PublishProfiles),能獲得真正的 pubxml 結尾的,配置文件
打開PublishSettings文件(註意不是pubxml )在裡面找到userPWD,複製密碼
測試這個文件是否能用,直接在CMD 裡面,Password 裡面填 剛纔複製的那個密碼
dotnet publish XX/XX.csproj /p:PublishProfile="XX.pubxml" /p:Password=XXX
正常情況就能發佈到azure 了,
簡單Jenkins 任務就使用一下代碼就行了
dotnet restore dotnet build --configuration "Release" dotnet publish XXX/xxxx.csproj /p:PublishProfile="xxxxxx- Web Deploy.pubxml" /p:Password=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
有幾個問題需要註意下:
1.使用 Jenkins 拉取代碼以後,需要把pubxml 複製到項目web的路徑\Properties\PublishProfiles 這路徑下麵,.net core 發佈不能指定配置文件位置,我也不清楚為什麼這麼死板,所以需要提前把配置文件 放到伺服器某個位置,讓Jenkins 可以複製
bat("copy /y \"${filePath}\" \"${destination}\"");
2.根據微軟Best practice,機密信息應該放到 KeyVault 裡面,而KeyVault 的名稱應該配置到app-servcie 的環境變數裡面,不應該通過appsetting.json來管理這個配置,萬一使用這個蠢做法,可以用下麵這個來改不同環境的配置
def void UpdateKeyVaultName(String prefix) { String appsettingJsonPath = "${env.WORKSPACE}\\XXXXXX\\appsettings.json"; echo appsettingJsonPath; String keyVaultName = "${prefix}-XXXX"; echo keyVaultName; withEnv(["VAR_KeyVault=$keyVaultName","VAR_JsonPath=$appsettingJsonPath"]) { powershell ''' $jsonPath = $env:VAR_JsonPath $appsettings = Get-Content $jsonPath | ConvertFrom-Json $appsettings.KeyVault = $env:VAR_KeyVault $appsettings | ConvertTo-Json | set-content $jsonPath ''' } }