У меня есть конвейер (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.
Конечно, подождите немного, и спасибо за быстрый ответ.
Кажется, вы не загружаете артефакты, содержащие код терраформирования, поэтому вы видите такие ошибки, как 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 дважды проверьте, куда именно загружаются артефакты (файлы *.tf
) — например, запускается ls -R $(Pipeline.Workspace)
.
Я добавил новый шаг bash и вывод в основную статью. Действительно спасибо за ваши очень быстрые ответы :)
@Kreg, у тебя есть параметр с именем artifactName
, но ты жестко запрограммировал путь в одной из задач DownloadPipelineArtifact@2
. Разве не должно быть $(Pipeline.Workspace)/${{ parameters.artifactName }}'
вместо path: '$(Pipeline.Workspace)/DetectChanges'
?
Вы были правы, теперь он проходит этот шаг. Есть еще одна проблема с получением правильного образа докера (также на этапе плана Terraform). Можем ли мы продолжить этот вопрос или лучше создать новый? Не хотелось бы терять контекст.
@Kreg другая проблема, другой вопрос :-) Если мой ответ помог вам решить проблему с загрузкой артефактов, пожалуйста, рассмотрите принять его и/или проголосовать за него.
Ясно, просто хотел уточнить.
Могут существовать и другие шаблоны .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
.
В свободное время проверю. Спасибо большое, вы почти всегда в моем вопросе активны :) Между тем оказывается, что я допустил ошибку в хардкодинге одной переменной, что и нашел Руи.
Боюсь, у нас недостаточно информации, чтобы понять, в чем проблема. Пожалуйста, покажите нам задания, в которых загружаются и используются артефакты.