Как получить доступ к артефакту из расширения Azure?

В настоящее время я пытаюсь получить доступ к опубликованному артефакту из моего расширения Azure. К сожалению, я не получаю ответа, даже не отображается ошибка. Я думаю, что проблема в клиенте. Я думаю, что разрешения установлены правильно, поскольку мне, например, удалось получить имя и идентификатор проекта.

import * as SDK from "azure-devops-extension-sdk";
import { getClient } from "azure-devops-extension-api";
import { BuildRestClient } from "azure-devops-extension-api/Build";
import { Page } from "azure-devops-ui/Page";
import { ZeroData } from "azure-devops-ui/ZeroData";
import * as React from "react";
import * as ReactDOM from "react-dom";

class Tab extends React.Component<{}, { artifactContext?: string, debugInfo?: string }> {
    constructor(props: {}) {
        super(props);
        this.state = { artifactContext: undefined, debugInfo: undefined };
    }

    public async componentDidMount() {
        await SDK.init();
        const projectName = "Project Name";
        const buildId = xxx;
        const artifactName = "artifact_name";

        try {
            const buildClient = await getClient(BuildRestClient);
            const artifact = await buildClient.getArtifact(projectName, buildId, artifactName);
            if (artifact) {
                this.setState({
                    artifactContext: JSON.stringify(artifact, null, 2),
                    debugInfo: "Artifact was successfully retrieved."
                });
            } else {
                this.setState({
                    artifactContext: "No artifact was returned.",
                    debugInfo: "No artifact found with the specified name."
                });
            }
        } catch (error: any) {
            console.error("Error fetching artifact:", error);
            this.setState({
                artifactContext: `Error fetching artifact: ${error.message}`,
                debugInfo: `API call failed: ${error.message}`
            });
        }
    }

    public render(): JSX.Element {
        const { artifactContext, debugInfo } = this.state;

        return (
            <Page className = "flex-grow">
                <ZeroData
                    primaryText = "Fetching artifact..."
                    secondaryText = {"Please wait while the artifact is being fetched."}
                    imageAltText = "Fetching data"
                />
                {artifactContext && (
                    <div>
                        <h3>Artifact Context:</h3>
                        <pre>{artifactContext}</pre>
                    </div>
                )}
                {debugInfo && (
                    <div>
                        <h3>Debug Information:</h3>
                        <pre>{debugInfo}</pre>
                    </div>
                )}
            </Page>
        );
    }
}

ReactDOM.render(<Tab />, document.getElementById("root"));

Что я мог бы сделать по-другому или попытаться решить мою проблему?

Спасибо

Сталкивались ли вы с этой проблемой при использовании расширения или отладке приведенного выше кода? Можете ли вы поделиться более подробной информацией об отладке или страницей соответствующей проблемы?

Kevin Lu-MSFT 26.06.2024 07:31

Я установил расширение, чтобы попробовать. Я добавил больше операторов печати для отладки, и SDK.init, а также getClient, похоже, работают, но он не передает getArtifact. Может ли разрешение быть проблемой? SDK обрабатывает аутентификацию, поэтому не будет необходимости, например, в PAT, верно?

mr_bean 26.06.2024 09:59

Итак, «Артефакт успешно получен». не отображается

mr_bean 26.06.2024 20:20

Я получаю следующее сообщение об ошибке: «SDK AzureDevOps уже загружен. В данный документ можно загрузить только одну версию этого модуля».

mr_bean 26.06.2024 20:33

Сообщение об ошибке можно найти в этом билете: github.com/microsoft/azure-devops-extension-api/issues/109. Причина проблемы — «azure-devops-extension-sdk» и « azure-devops-extension-api» использует другой способ зависимости.

Kevin Lu-MSFT 27.06.2024 07:01

Большое спасибо! Я понизил версию SDK до той же версии, которую azure-devops-extension-api использует в качестве зависимости, и теперь она работает.

mr_bean 27.06.2024 08:55

Рад узнать, что теперь это может сработать для вас. Вы можете добавить ответ, чтобы поделиться решением. Это будет полезно другим пользователям, у которых возникла такая же проблема.

Kevin Lu-MSFT 27.06.2024 08:57
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
7
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Спасибо, Кевин Лу-MSFT за ваш положительный вклад, который сыграл важную роль в решении проблемы mr_bean. Публикация того же решения для всех, кто столкнулся с подобной проблемой в сообществе переполнения стека.

Проблема: Инициализация SDK и getClient сработала, но getArtifact не продолжилась. Сообщение об ошибке указывало на то, что загружено несколько версий AzureDevOps SDK: «SDK AzureDevOps уже загружен. В данный документ можно загрузить только одну версию этого модуля».

Исправить:

Версии azure-devops-extension-sdk и azure-devops-extension-api должны быть согласованы во избежание конфликтов.

npm list azure-devops-extension-sdk
npm list azure-devops-extension-api

Понизьте или обновите версию azure-devops-extension-sdk в соответствии с вашей средой, чтобы она соответствовала версии, используемой azure-devops-extension-api.

Таким образом, проблема mr_bean возникла из-за несоответствия версий между azure-devops-extension-sdk и azure-devops-extension-api. Проблема была решена путем понижения SDK до той же версии, которую использует azure-devops-extension-api. Кевин Лу-MSFT и mr_bean, не стесняйтесь редактировать ответ, добавляя сюда все, что я пропустил.

Другие вопросы по теме