欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Jenkins将ASP.NETCore部署到Azure

程序员文章站 2022-05-03 10:46:38
首先需要获得Azure上App-service 的porfile. 登录portal 选到app,点击Get publish pofile 将得到一个 ****.PublishSettings,注意这个文件还不是最后真正用于发布的配置,还需要做如下操作,得到一个真正的发布配置, 在VS 中打开项目, ......

首先需要获得azure上app-service 的porfile. 登录portal 选到app,点击get publish pofile

Jenkins将ASP.NETCore部署到Azure

 

将得到一个 ****.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
		'''
	}	
}