Не могу найти нужные артефакты

У меня есть конвейер (MainPipeline), который запускает другой (DependantPipeline).

Однако мой DependantPipeline не может его прочитать, полагаю, моя ошибка где-то в одном из определений конвейера.

Подготовка.yml, который может быть здесь полезен. Я немного изменил его, вот как он выглядит сейчас:

parameters:
  - name: pipelineOptions
    type: object
  - name: env
    type: string
  - name: region
    type: string
    default: $(region)
  - name: artifactStagingDirectory
    type: string
  - name: artifactName
    type: string
    default: terraform_src

steps:
  - task: DownloadPipelineArtifact@2
    displayName: "Download Terraform Sources"
    inputs:
      source: 'specific'
      project: $(resources.pipeline.SourcePipeline.projectName)
      pipeline: $(resources.pipeline.SourcePipeline.pipelineName)
      artifact: ${{parameters.artifactName}}
      runVersion: 'specific'
      runId: $(resources.pipeline.SourcePipeline.runID)
      path: '$(Pipeline.Workspace)/DetectChanges'
[...]

Это приводит к ошибке, говорящей, что не удается найти нужный файл.

Кто-нибудь решит мне эту проблему? При необходимости я могу предоставить дополнительные определения yml.

Боюсь, у нас недостаточно информации, чтобы понять, в чем проблема. Пожалуйста, покажите нам задания, в которых загружаются и используются артефакты.

Rui Jarimba 12.08.2024 14:07

Конечно, подождите немного, и спасибо за быстрый ответ.

Kreg 12.08.2024 14:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Кажется, вы не загружаете артефакты, содержащие код терраформирования, поэтому вы видите такие ошибки, как Given variables file xxxx.tfvars does not exist.

Например, следующая задача отключит загрузку артефактов:

  steps:
    - download: none

Также в prepare.yml задача DownloadPipelineArtifact@2 закомментирована.

Наконец, обратите внимание, что установка buildType: 'current' в DownloadPipelineArtifact@2 означает, что задача попытается загрузить артефакты, созданные текущим конвейером.

См. Загрузка артефактов из определенного проекта/конвейера или Загрузка артефакта из определенного запуска сборки.

Я изменил все вышеперечисленные шаги. Теперь происходит сбой на другом этапе, Configure Terraform Global который является частью файлаprepree.yml. Я поместил измененную версию в раздел EDIT 1 основного вопроса.

Kreg 12.08.2024 15:50

@Kreg дважды проверьте, куда именно загружаются артефакты (файлы *.tf) — например, запускается ls -R $(Pipeline.Workspace).

Rui Jarimba 12.08.2024 16:04

Я добавил новый шаг bash и вывод в основную статью. Действительно спасибо за ваши очень быстрые ответы :)

Kreg 12.08.2024 16:33

@Kreg, у тебя есть параметр с именем artifactName, но ты жестко запрограммировал путь в одной из задач DownloadPipelineArtifact@2. Разве не должно быть $(Pipeline.Workspace)/${{ parameters.artifactName }}' вместо path: '$(Pipeline.Workspace)/DetectChanges'?

Rui Jarimba 12.08.2024 16:40

Вы были правы, теперь он проходит этот шаг. Есть еще одна проблема с получением правильного образа докера (также на этапе плана Terraform). Можем ли мы продолжить этот вопрос или лучше создать новый? Не хотелось бы терять контекст.

Kreg 12.08.2024 18:26

@Kreg другая проблема, другой вопрос :-) Если мой ответ помог вам решить проблему с загрузкой артефактов, пожалуйста, рассмотрите принять его и/или проголосовать за него.

Rui Jarimba 12.08.2024 18:46

Ясно, просто хотел уточнить.

Kreg 12.08.2024 20:01

Могут существовать и другие шаблоны .yml, включая шаги download или DownloadPipelineArtifact@2, которыми вы не поделились.

Если ваш зависимый конвейер был запущен конвейером dev-crunch с символическим псевдонимом MainPipeline, вы можете попробовать добавить примеры шагов под узлом steps в определении YAML, чтобы проверить, были ли загружены артефакты, опубликованные MainPipeline во время запуска зависимого конвейера.

resources:
  pipelines:
    - pipeline: MainPipeline
      project: DEV
      source: 'dev-crunch'
      trigger:
        branches:
          include:
            - test/pipeline
- download: MainPipeline
  artifact: terraform_src
  displayName: Download artifdacts terraform_src published by MainPipeline with definition name dev-crunch

- script: |
    echo "================ 1. Checking files in Pipeline.Workspace - $(Pipeline.Workspace) =============== = "
    cd "$(Pipeline.Workspace)"
    tree
    echo "================ 2. Checking files in terraformConfigDirectory - $(terraformConfigDirectory) =============== = "
    cd "$(terraformConfigDirectory)"
    tree
    echo "================ 3. Checking files in Pipeline.Workspace/parameters.artifactName/terraform =============== = "
    cd "$(Pipeline.Workspace)/${{parameters.artifactName}}/terraform"
    tree
  displayName: Check downloaded artifacts files location
  condition: always()

По умолчанию мы можем легко найти этапы загрузки и проверки по их displayName в журналах и увидеть, как файлы артефактов загружаются по пути $(Pipeline.Workspace)/<PipelineRsourceSymbolicName>/<ArtifactsName>, то есть $(Pipeline.Workspace)/MainPipeline/terraform_src в нашем случае. Также убедитесь, что ваши terraform команды выполнялись правильно workingDirectory.

В свободное время проверю. Спасибо большое, вы почти всегда в моем вопросе активны :) Между тем оказывается, что я допустил ошибку в хардкодинге одной переменной, что и нашел Руи.

Kreg 12.08.2024 18:29

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

Похожие вопросы

Уменьшение объема хранилища пакетов Azure Devops
Как создать скрипт в учетной записи автоматизации для получения квот и используемой емкости для каждого общего файлового ресурса
Триггер нескольких репозиториев Azure. Почему он срабатывает несколько раз для одной и той же фиксации?
Невозможно воспроизвести приложение на основе холста после его импорта в другую среду/другой клиент (с использованием инструментов сборки Azure DevOps PP)
Azure Pipeline не удается извлечь подмодуль
Каковы варианты миграции VSS 6.0 в Azure DevOps, если у вас нет VSS 2005?
Как вставить CSV-файл из Azure Repo в базу данных SQL Azure через конвейер выпуска?
«project.assets.json не имеет цели для «net8.0-windows10.0.22621.0»», но есть, и восстановление пакета прошло успешно?
Использование C#: импорт репозитория Azure DevOps
Как устранить ошибку ##[error]Команда Dotnet завершилась с ненулевым кодом выхода в следующих проектах: ошибка [ '' ]?