gpt4 book ai didi

c# - 持续部署和交付

转载 作者:行者123 更新时间:2023-12-02 08:09:44 25 4
gpt4 key购买 nike

我们有一个包含 +10 个项目的解决方案,其中 2 个是网站。现在我需要设置链接到我们的 TFS 服务器的构建定义,该定义构建解决方案并将 2 个站点部署到正确的 Azure 网站。我尝试了几种不同的方法,但每次交付似乎都失败。在TFS服务器上构建项目没有问题,但是当azure需要将正确的asp项目交付到正确的Azure网站时,它失败了......任何人都可以为我指出如何创建这样的构建定义的正确方向,以及在哪里指定交付选项?

编辑:

用我们构建的图像进行说明。

docl builddefinition

所以我们在这个文件夹中有 2 个网站: enter image description here

我想将此文件夹中的这两个网站发布到正确的 azure 位置。有人知道通过两个网站实现成功持续交付的好方法吗?

最佳答案

我们在 TFS 构建期间使用 Azure 服务管理 API 来实现此目的。我们改编了此示例代码 - Windows Azure ServiceManagement Sample - 作为在构建任务中运行的命令行工具。

HostedServiceList hostedServices = new HostedServiceList();
Dictionary<string, IServiceManagement> servicesOperations = new Dictionary<string, IServiceManagement>();

ParseArguments(args);
ProcessCheckServerCertificate();

// upload the package created during the build to Azure BLOB
var packageUrl = UploadFileToBlob(package);
var services = new ListHostedServicesCommand();
services.Run();
hostedServices = services.HostedServices;
.
.
.
foreach (var hostedService in hostedServices)
{
Console.WriteLine("updating: " + hostedService.ServiceName);
// get the deployment unique name - required for upgrade
AzureCommand.HostedServiceName = hostedService.ServiceName;
AzureCommand.DeploymentName = null;
var getDeployment = new GetDeploymentCommand();
getDeployment.Run();
AzureCommand.DeploymentName = getDeployment.Deployment.Name;

// upgrade the existing deployment
var upgradeDeployment = new UpgradeDeploymentCommand();
upgradeDeployment.Run();
servicesOperations.Add(upgradeDeployment.TrackingId, upgradeDeployment.ServiceManagement);
}
.
.
.
// check status of all operations submitted
foreach (var servicesOperation in servicesOperations)
{
// check status of operations
AzureCommand.WaitForAsyncOperation(servicesOperation.Value, servicesOperation.Key);
}

这是 UploadFileToBlob 代码...

private string UploadFileToBlob(string file)
{
// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the blob client
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve reference to a previously created container
CloudBlobContainer container = blobClient.GetContainerReference("mydeployments");

// Retrieve reference to a blob
var date = DateTime.UtcNow.ToString("yyyyMMdd-hhmmss-");
var fileinfo = new FileInfo(file);
if (fileinfo.Exists)
{
var fileToUpload = new FileInfo(file).Name;
var filename = date + fileToUpload;
try
{
CloudBlob blob = container.GetBlobReference(filename);

// Create or overwrite the blob with contents from a local file
using (var fileStream = System.IO.File.OpenRead(file))
{
blob.UploadFromStream(fileStream);
}

return blob.Uri.AbsoluteUri;
}
catch (Exception ex)
{
LogError("Error uploading file to blog: ", ex.Message);
return "";
}
}

LogError("Error - specified file does not exist: ", file);
return "";
}

并在云服务的.proj文件中添加构建任务,指向“YourCommandLineTool.exe”:

  <Import Project="$(CloudExtensionsDir)Microsoft.WindowsAzure.targets" />
<Target Name="AzureDeploy" AfterTargets="CorePublish" DependsOnTargets="CorePublish" Condition="$(DeployToAzure) == 'true'">
<Exec WorkingDirectory="$(MSBuildProjectDirectory)" Command="C:\WindowsAzure\Deploy\YourCommandLineTool.exe /log:$(MSBuildProjectDirectory)\AzureDeploy.log /package:$(MSBuildProjectDirectory)\$(PublishDir)$(AssemblyName).cspkg /config:$(MSBuildProjectDirectory)\$(PublishDir)ServiceConfiguration.$(Configuration).cscfg" />
</Target>

关于c# - 持续部署和交付,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16233298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com