#docker #docker-compose #github-actions
Вопрос:
Вчера я перенес свой проект с TravisCI на действия Github, при этом весь остальной код остался нетронутым, но так и не был передан. Причина в том, что, docker-compose exec -T container command
неожиданно повторив код выхода команды для ее stderr, я испортил свой код, обнаружив stderr.
Здесь я сделал простое репо только с двумя файлами, чтобы продемонстрировать проблему:
# docker-compose.yaml
version: '3.3'
services:
test:
container_name: test
image: ubuntu:18.04
command: sleep 100
# .github/workflows/test.yml
name: test
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: up
run: docker-compose up -d
- run: docker-compose exec -T test false
continue-on-error: true
- run: docker-compose exec -T test bash -c "exit 3"
continue-on-error: true
- run: echo "stderr $(docker-compose exec -T test false 2>amp;1 >/dev/null)"
continue-on-error: true
- run: echo "stderr $(docker-compose exec -T test false 2>amp;1 >/dev/null)"
continue-on-error: true
shell: bash {0}
Выполнение этих команд на моей собственной машине дает такой результат:
$ docker-compose exec -T test false
$
$ docker-compose exec -T test bash -c "exit 3"
$
$ echo "stderr $(docker-compose exec -T test false 2>amp;1 >/dev/null)"
stderr
Но вот журнал действий Github:
> Run docker-compose exec -T test false
1
Error: Process completed with exit code 1.
> Run docker-compose exec -T test bash -c "exit 3"
3
Error: Process completed with exit code 3.
> Run echo "stderr $(docker-compose exec -T test false 2>amp;1 >/dev/null)"
stderr 1
// the one using bash {0}
> Run echo "stderr $(docker-compose exec -T test false 2>amp;1 >/dev/null)"
stderr 1
Так почему же эти коды выхода находятся в моем stderr при выполнении действий на Github?
Ответ №1:
Обнаружил, что его функция добавлена в 1.28.0-rc3, и была указана как проблема, которую необходимо исправить в 1.28.6.