Извлечение вложения задачи из развертывания выпуска DevOps Azure в расширении TypeScript - PullRequest
0 голосов
/ 03 ноября 2018

Я работаю над расширением Azure DevOps, которое включает в себя пользовательскую задачу, которая добавляет вложение. Может использоваться как в конвейере сборки, так и в выпуске.

Используя пакет npm vss-web-extension-sdk и TypeScript, как я могу получить содержимое этого вложения для определенного Release Pipeline , конкретной среды и конкретной попытки развертывания?

Конечная цель - добавить содержимое вложения (то есть HTML) в iframe внутри вкладки релиза.

Вот где я застрял:

import Controls = require("VSS/Controls");
import TFS_Build_Contracts = require("TFS/Build/Contracts");
import TFS_Build_Extension_Contracts = require("TFS/Build/ExtensionContracts");
import TFS_DistributedTask_Contracts = require("TFS/DistributedTask/Contracts");
import TFS_Release_Extension_Contracts = require("ReleaseManagement/Core/ExtensionContracts");
import TFS_Release_Contracts = require("ReleaseManagement/Core/Contracts");
import DT_Client = require("TFS/DistributedTask/TaskRestClient");
import RM_Client = require("ReleaseManagement/Core/RestClient");

// [...]

private async searchForAttachment(release: TFS_Release_Contracts.Release) {
    let vsoContext: WebContext = VSS.getWebContext();
    let rmClient = <RM_Client.ReleaseHttpClient5>RM_Client.getClient();
    let projectId = vsoContext.project.id;

    // For test purpose, target the last environment and last deployment attempt
    let env = release.environments[release.environments.length - 1];
    let attempt = env.deploySteps[env.deploySteps.length - 1];

    // Where I am supposed to retrieve "timelineId" ?
    let attachments = rmClient.getTaskAttachments(
        projectId, release.id, env.id, attempt.id, timelineId, 'my_attachment_type'
    );

    // The documentation says that the call above is deprecated, and I should use getReleaseTaskAttachments
    // But, where I am supposed to retrieve "planId" ?
    // Also, getReleaseTaskAttachments is undefined in the latest version of the npm package...
    attachments = rmClient.getReleaseTaskAttachments(
        projectId, release.id, env.id, attempt.id, planId, 'my_attachment_type'
    );
}

К вашему сведению, я уже могу получить вложение из конвейера сборки, но это не относится к развертыванию релиза. Это проще, и я нашел достаточно документации в Интернете.

Кроме того, я добавляю вложение в пользовательской задаче с помощью команды task.addattachment:

##vso[task.addattachment type=myattachmenttype;name=myattachmentname;]c:\myattachment.txt

1 Ответ

0 голосов
/ 06 ноября 2018

При настройке определения выпуска каждое задание, которое вы добавляете в рабочий процесс, отображается в плане / planId при срабатывании выпуска. Например. Когда я ставлю выпуск в очередь на определение, где рабочий процесс выглядит так, как показано ниже, объект шага развертывания (env.deploySteps[env.deploySteps.length - 1]) будет содержать две фазы развертывания выпуска.

enter image description here

Идентификатор плана для двух заданий можно получить как -

env.deploySteps[env.deploySteps.length - 1].releaseDeployPhases[0].runPlanId
env.deploySteps[env.deploySteps.length - 1].releaseDeployPhases[1].runPlanId

Каждая задача, которая выполняется внутри задания (в данном случае Bash Script), создает временную шкалу, которая используется для извлечения журналов и вложений. Я сделаю это, чтобы получить идентификатор временной шкалы для BashScript ,

env.deploySteps[env.deploySteps.length - 1].releaseDeployPhases[0].deploymentJobs[0].tasks[0].timelineRecordId

Иерархия немного сложна из-за того, что deployStep может содержать N (> 1) фаз. Каждая фаза может содержать несколько заданий (обычно в случае групп развертывания и множителей, если вы не используете их, просто вернитесь к deployJobs [0]). Внутри каждой работы есть несколько задач, которые вы настроили в рабочем процессе, каждая из которых создает собственную временную шкалу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...