in src/VstsDemoBuilder/Services/ProjectService.cs [2041:2129]
private bool CreateReleaseDefinition(Project model, VstsRestAPI.Configuration _releaseConfiguration, string id, TeamMemberResponse.TeamMembers teamMembers)
{
bool flag = false;
try
{
var teamMember = teamMembers.value.FirstOrDefault();
foreach (ReleaseDef relDef in model.ReleaseDefinitions)
{
if (File.Exists(relDef.FilePath))
{
ReleaseDefinition objRelease = new ReleaseDefinition(_releaseConfiguration);
string jsonReleaseDefinition = model.ReadJsonFile(relDef.FilePath);
jsonReleaseDefinition = jsonReleaseDefinition.Replace("$ProjectName$", model.Environment.ProjectName)
.Replace("$ProjectId$", model.Environment.ProjectId)
.Replace("$OwnerUniqueName$", teamMember.identity.uniqueName)
.Replace("$OwnerId$", teamMember.identity.id)
.Replace("$OwnerDisplayName$", teamMember.identity.displayName);
if (model.Environment.VariableGroups.Count > 0)
{
foreach (var vGroupsId in model.Environment.VariableGroups)
{
string placeHolder = string.Format("${0}$", vGroupsId.Value);
jsonReleaseDefinition = jsonReleaseDefinition.Replace(placeHolder, vGroupsId.Key.ToString());
}
}
//Adding randon UUID to website name
string uuid = Guid.NewGuid().ToString();
uuid = uuid.Substring(0, 8);
jsonReleaseDefinition = jsonReleaseDefinition.Replace("$UUID$", uuid).Replace("$RandomNumber$", uuid).Replace("$AccountName$", model.accountName); ;
//update agent queue ids
foreach (string queue in model.Environment.AgentQueues.Keys)
{
string placeHolder = string.Format("${0}$", queue);
jsonReleaseDefinition = jsonReleaseDefinition.Replace(placeHolder, model.Environment.AgentQueues[queue].ToString());
}
//update endpoint ids
foreach (string endpoint in model.Environment.serviceEndpoints.Keys)
{
string placeHolder = string.Format("${0}$", endpoint);
jsonReleaseDefinition = jsonReleaseDefinition.Replace(placeHolder, model.Environment.serviceEndpoints[endpoint]);
}
foreach (BuildDef objBuildDef in model.BuildDefinitions)
{
//update build ids
string placeHolder = string.Format("${0}-id$", objBuildDef.Name);
jsonReleaseDefinition = jsonReleaseDefinition.Replace(placeHolder, objBuildDef.Id);
}
string[] releaseDef = objRelease.CreateReleaseDefinition(jsonReleaseDefinition, model.ProjectName);
if (!(string.IsNullOrEmpty(objRelease.LastFailureMessage)))
{
if (objRelease.LastFailureMessage.TrimEnd() == "Tasks with versions 'ARM Outputs:3.*' are not valid for deploy job 'Function' in stage Azure-Dev.")
{
jsonReleaseDefinition = jsonReleaseDefinition.Replace("3.*", "4.*");
releaseDef = objRelease.CreateReleaseDefinition(jsonReleaseDefinition, model.ProjectName);
if (releaseDef.Length > 0)
{
relDef.Id = releaseDef[0];
relDef.Name = releaseDef[1];
}
if (!string.IsNullOrEmpty(relDef.Name))
{
objRelease.LastFailureMessage = string.Empty;
}
}
}
relDef.Id = releaseDef[0];
relDef.Name = releaseDef[1];
if (!(string.IsNullOrEmpty(objRelease.LastFailureMessage)))
{
AddMessage(id.ErrorId(), "Error while creating release definition: " + objRelease.LastFailureMessage + Environment.NewLine);
}
}
flag = true;
}
return flag;
}
catch (Exception ex)
{
logger.Info(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") + "\t" + "\t" + ex.Message + "\t" + "\n" + ex.StackTrace + "\n");
AddMessage(id.ErrorId(), "Error while creating release definition: " + ex.Message);
}
flag = false;
return flag;
}