Nano Hash - криптовалюты, майнинг, программирование

Конвейеры сборки Azure: ссылка на предопределенную переменную из выражения

Я хотел бы использовать значение предопределенная переменная из выражения в конвейере сборки Azure.

Он соответствует определению YML:

trigger:
- none

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo ${{ format('{0}-vars', variables['Build.Repository.Name']) }} # outcome: -vars
- script: echo ${{ format('{0}-vars', 'a_string') }} # outcome: a_string-vars

Я все еще не разбираюсь в этой среде, но мне совершенно ясно, что variables['Build.Repository.Name'] не решена. Вне выражения использование $(Build.Repository.Name) отлично работает.

Как правильно ссылаться на предопределенную переменную внутри выражения? (Я не смог найти его в документации).

Любая помощь очень ценится!


Ответы:


1

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

  • Синтаксис индекса: переменные ['MyVar']
  • Синтаксис разыменования свойства: variables.MyVar
29.02.2020
  • Спасибо за ответ, я знаю этот документ. Я уже пробовал с variables.Build.Repository.Name, но это все еще не решено. Проблема здесь в том, что я хочу получить доступ к предопределенной переменной в выражении. Может, это невозможно .... 01.03.2020
  • В статье, которой я поделился выше, у вас есть примеры использования переменных в ваших выражениях, но важная деталь, указанная в документации, такова: в зависимости от контекста выполнения доступны разные переменные. Если вы создаете конвейеры с помощью YAML, тогда доступны переменные конвейера. Если вы создаете конвейеры сборки с помощью классического редактора, тогда доступны переменные сборки. Если вы создаете конвейеры выпуска с помощью классического редактора, тогда доступны переменные выпуска. 01.03.2020
  • Итак, поскольку вы создаете конвейеры с использованием YAML, тогда у вас есть доступные переменные конвейера - следует списку доступных переменных. - docs.microsoft.com / ru-ru / azure / DevOps / pipelines / build / 01.03.2020
  • Итак, согласно документации, если вы хотите, чтобы переменные сборки были доступны, вам нужно использовать классический редактор для создания конвейера сборки. По крайней мере, это мое предположение. 01.03.2020
  • Но самое главное, это был ваш вопрос. Как правильно ссылаться на предопределенную переменную внутри выражения? (Не нашел в документации) .. И я дал вам ответ на ваш вопрос. Теперь мы переходим к другому вопросу: какие предопределенные переменные доступны в моем конвейере сборки и в моем контексте ?. 01.03.2020
  • Я не уверен, что комментарии здесь правильные. В части документации «В зависимости от контекста выполнения ...» ссылки на переменные конвейера и переменные сборки ведут на одну и ту же страницу (ту, на которую ссылается Хьюго выше). Однако на этой странице в разделе «Переменные конвейера» есть только одна переменная - Pipeline.Workspace. Трудно поверить, что, когда вы не используете классический редактор, вы получаете доступ только к одной переменной. Кроме того, я использую переменные сборки в своем YAML нормально, хотя есть эта ошибка: github.com/microsoft/azure-pipelines-yaml/issues/436 25.05.2020
  • @AdamGoodwin, вы можете использовать все переменные, упомянутые в ссылке, которой я поделился, включая переменные сборки, поскольку все они являются предопределенными переменными. Кроме того, далее следует список переменных выпуска на случай, если вы хотите использовать их во время выпуска - docs.microsoft.com/en-us/azure/devops/pipelines/release/ 26.05.2020

  • 2

    Правильный способ сделать согласно документация будет использовать

     repository: $(Build.Repository.Name)
    

    Однако всякий раз, когда у вас есть проверка условий, вы можете использовать,

    condition: and(succeeded(), eq(variables['Build.Repository.Name'], 'Sample'))
    
    29.02.2020
  • Спасибо за ответ, но мне это нужно в выражениях. Я хочу добавить строку при установке имени группы переменных. 01.03.2020

  • 3

    Я мог бы объединить два разных значения слова «шаблон», используемого в Azure DevOps, но я думаю, что проблема заключается в синтаксисе, который вы используете для своего выражения. Когда вы сделаете следующее:

    ${{ format('{0}-vars', variables['Build.Repository.Name']) }}
    

    Вы используете синтаксис выражения шаблона (т.е. синтаксис ${{variable}}).

    Это нормально, но я думаю, что "Доступно в шаблонах?" столбец в эта таблица - ваша проблема. Для переменной Build.Repository.Name указано «Нет».

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

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

    то есть это:

    $[format('{0}-vars', variables['Build.Repository.Name'])]
    

    Это работает для меня в конвейере, над которым я работаю.

    Однако будьте осторожны, похоже, что существует ошибка, если вы используйте синтаксис разыменования свойств (т.е. variables.Build.Repository.Name) вы получите те же симптомы, что и ваша текущая проблема. Это происходило и со мной.

    25.05.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..