Изучение контекстов и выражений в GitHub

Завершено

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

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

Контексты

При создании рабочих процессов и действий следует всегда учитывать, может ли код выполнять ненадежные входные данные от возможных злоумышленников. Некоторые контексты следует рассматривать как ненадежные входные данные, так как злоумышленник может вставить собственное вредоносное содержимое. Дополнительные сведения см. в статье "Защита безопасности для GitHub Actions".

В следующей таблице содержатся примеры контекстов, доступных в GitHub, это не полный список.

Имя контекста Тип Описание
github object Сведения о запуске рабочего процесса.
env object Содержит переменные, заданные в рабочем процессе, задании или шаге.
vars object Содержит переменные, заданные на уровне репозитория, организации или среды.
job object Сведения о выполняемом в данный момент задании.

Совет

Полный список контекстов см. в разделе "О контекстах".

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

GitHub Actions включают две коллекции переменных, называемых переменными по умолчанию и контекстами. Эти переменные предназначены для использования в разных точках рабочего процесса:

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

В следующем примере инструкция if проверяет контекст github.ref, чтобы определить текущее имя ветви. Выполняется проверка if, а задание отправляется только исполнителю, если результат true. После отправки задания в средство выполнения выполняется шаг и ссылается на переменную $GITHUB_REF из средства выполнения.

name: CI
on: push
jobs:
  prod-check:
    if: ${{ github.ref == 'refs/heads/main' }}
    runs-on: ubuntu-latest
    steps:
      - run: echo "Deploying to production server on branch $GITHUB_REF"

Контексты, доступные в GitHub Actions

В следующей таблице содержатся доступные контексты верхнего уровня, краткое описание и ссылка на дополнительные сведения о свойствах объекта.

Контекст верхнего уровня Описание Свойства и примеры
github Контекст верхнего уровня, доступный во время любого задания или шага рабочего процесса. Свойства контекста github .
env Содержит переменные, заданные в рабочем процессе, задании или шаге. Он не содержит переменные, унаследованные процессом запуска. Свойства контекста env .
vars Содержит настраиваемые переменные конфигурации, заданные на уровнях организации, репозитория и среды. Примеры vars использования.
job Содержит сведения о выполняемом в данный момент задании. Свойства контекста job .
jobs Доступно только в повторно используемых рабочих процессах и может использоваться только для задания выходных данных для повторно используемого рабочего процесса. Свойства контекста jobs .
steps Содержит информацию о выполненных шагах в текущем задании, имеющих указанный идентификатор id. Свойства контекста steps .
runner Содержит сведения об исполнителе, выполняющем текущее задание. Свойства контекста runner .
secrets Содержит имена и значения секретов, доступных для запуска рабочего процесса. Свойства контекста secrets .
strategy Содержит сведения о стратегии выполнения матрицы для текущего задания. Свойства контекста strategy .
matrix Содержит свойства матрицы, определенные в файле рабочего процесса, который применяется к текущему заданию. Свойства контекста matrix .
needs Содержит выходные данные всех заданий, которые определяются как прямая зависимость текущего задания. Свойства контекста matrix .
inputs Содержит входные свойства, которые передаются действию, повторно используемому рабочему процессу или вручную активируемому рабочему процессу. Свойства контекста inputs .

Выражения

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

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

Необходимо использовать конкретный синтаксис, ${{ <expression> }}, чтобы GitHub оценил выражение, а не рассматривал его как строку. Исключением из этого правила является использование выражений в предложении if, где они обычно могут быть опущены ${{ и }}.

В следующем примере кода показана настройка переменной среды.

env:
  MY_ENV_VAR: ${{ <expression> }}

Литералы

В рамках выражения можно использовать boolean, null, numberили string типы данных. В условных выражениях ложные значения (false, 0, -0, "", '', null) преобразуются в false, а истинные (true и другие не ложные значения) преобразуются в true. Ниже приведены примеры реализации литерала.

env:
  myNull: ${{ null }}
  myBoolean: ${{ false }}
  myIntegerNumber: ${{ 711 }}
  myFloatNumber: ${{ -9.2 }}
  myHexNumber: ${{ 0xff }}
  myExponentialNumber: ${{ -2.99e-2 }}
  myString: Mona the Octocat
  myStringInBraces: ${{ 'It''s open source!' }}

Операторы

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

  • Логические операторы:

    • && (и): сочетает два условия, оба из которых должны быть верными, чтобы общее выражение оценивалось как истинное.
    • || (или): объединяет два условия, и выражение оценивается как true, если любое условие имеет значение true.
    • ! (не): отрицает условие, изменяя его логическое значение.
  • Операторы равенства:

    • == (равно): сравнивает два значения для равенства.
    • != (не равно): проверяет, не равны ли два значения.
  • Операторы сравнения:

    • < (меньше)
    • > (больше)
    • <= (меньше или равно)
    • >= (больше или равно)

Эти операторы позволяют создавать динамические рабочие процессы, определяя, когда конкретные шаги должны выполняться в зависимости от условий. Не забудьте использовать правильный синтаксис для выражений, таких как $\{\{ <expression> \}\}$, чтобы обеспечить правильную оценку.

Дополнительные сведения об операторах см. в разделе "Операторы".