Когда я запускаю команды terraform со своего локального компьютера, stdout и stderr процесса передаются в мой терминал во время его работы.
Когда я запускаю те же самые команды для одного и того же шаблона terraform в действии Github, стандартный вывод и стандартный вывод не будут отображаться до самого конца команды, где они внезапно все выгрузятся.
Это очень расстраивает, так как иногда выполнение может занять очень много времени, и у нас есть особая проблема, когда кажется, что один из шагов действительно может зависнуть, но я не могу сказать, какой именно, поскольку выходные данные не передаются в потоковом режиме, и если вы отмените действие github, github съест весь последующий вывод, поэтому невозможно увидеть, что зависает.
Как я могу заставить terraform передавать весь свой вывод в потоковом режиме, как это происходит локально, во время работы внутри действия github?
Попробуйте stdbuf -o0 -e0 terraform apply ... и посмотрите, сработает ли это. Используемая оболочка — Bash. Вы используете раннер Ubuntu? Ваш местный тоже такой же?
Оказывается, прямо сейчас в настройке действия терраформирования есть ошибка, вы можете установить wrapper_enabled: false, чтобы ее исправить. Подробности о проблеме github.com/hashicorp/setup-terraform/issues/395





Вот тест, который я только что завершил:
name: 'Terraform'
on:
push:
branches:
- master
pull_request:
jobs:
terraform:
name: 'Terraform'
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
- name: Terraform Version
run: terraform version -json
- name: Terraform Init
run: |
cd TerraForm/time_sleep/
terraform init
- name: Terraform Apply
run: |
cd TerraForm/time_sleep/
terraform apply -auto-approve
что касается терраформирования, я в основном занимаюсь time_sleep:
resource "time_sleep" "wait" {
count = 15
create_duration = "${count.index + 1}s"
}
Полный код здесь:
https://github.com/heldersepu/hs-scripts/tree/master/TerraForm/time_sleep
Мы не видим проблем:
безумие... можешь ли ты удалить стандартную оболочку bash? Интересно, есть ли в этом разница между sh и bash? Если нет, то я скажу, что мы не используем последний образ Ubuntu, у нас есть локальный раннер, который очень похож, но немного отличается. Возможно ли, что что-то может отличаться от самого бегуна?
Я изменил свое действие, чтобы оно было основано на nodejs20, и оно унаследовало стандартный вывод / stderr, и оно все еще делает то же самое. Существуют ли какие-либо известные переменные окружения для управления этим поведением?
@justin.m.chase Я не эксперт в этой теме ... но теперь у вас есть рабочий образец, поработайте над ним и посмотрите, где ваши вещи ломаются
Мне интересно, имеет ли базовый бегун Ubuntu TF_LOG env var, установленный по умолчанию, а у меня нет? Можете ли вы экспортировать переменную среды TF_LOG? Я попытаюсь установить это явно и посмотреть, не будет ли по умолчанию ничего не использоваться в Linux. На моей локальной машине он не установлен, но потоковая передача данных работает должным образом.
Оказывается, разница заключалась в том, что вы используете @v1 setup-terraform, а я использую v3. Существует «обертка», в которой в настоящее время есть ошибки, которую вы можете отключить, и потоковая передача снова будет работать, как и ожидалось. Подробности об ошибке можно найти здесь: github.com/hashicorp/setup-terraform/issues/395
Пожалуйста, поделитесь кодом