在管道构建中验证 alembic 迁移
Verify alembic migrations in pipeline build
我已经在 Azure 上设置了一个构建管道来执行 pytests 等。另外,我也想看看有没有遗漏迁移。
运行 alembic
命令和 --autogenerate
将生成一个新的迁移文件,以防它还不存在。
单独执行修订命令时
alembic revision --autogenerate
输出看起来像这样 (1)
INFO [alembic.runtime.migration] Will assume transactional DDL.
INFO [alembic.ddl.postgresql] Detected sequence ...
INFO [alembic.ddl.postgresql] Detected sequence ...
INFO [alembic.ddl.postgresql] Detected sequence ...
INFO [alembic.autogenerate.compare] Detected added column ...
Generating /.../alembic/versions/dc3dae7487df_.py ... done
我已经尝试过以下检查
[[ $(alembic revision --autogenerate | grep "^Generating.*done$") ]] && echo "test"
但是,grep 似乎对 alembic 输出不起作用,因为即使生成了新的迁移文件,我也从未收到 echo test
。
运行命令
alembic revision --autogenerate | grep 'Generating.*done' | cat -v
产生如 (1) 中的输出。
更改正则表达式也没有给出预期的结果
[[ $(alembic revision --autogenerate | grep "^[[:blank:]]*Generating.*done\r$") ]] && echo "test"
根据我们的讨论,我们发现 alembic 输出将转到 stderr 而不是 stdout,这将执行我认为您想要的操作:
[[ $(alembic revision --autogenerate 2>&1 | grep '^[[:blank:]]*Generating.*done[[:blank:]]*$') ]] && echo "test"
如果这仍然不是您想要的,请再次编辑您的问题以进一步澄清。
我已经在 Azure 上设置了一个构建管道来执行 pytests 等。另外,我也想看看有没有遗漏迁移。
运行 alembic
命令和 --autogenerate
将生成一个新的迁移文件,以防它还不存在。
单独执行修订命令时
alembic revision --autogenerate
输出看起来像这样 (1)
INFO [alembic.runtime.migration] Will assume transactional DDL.
INFO [alembic.ddl.postgresql] Detected sequence ...
INFO [alembic.ddl.postgresql] Detected sequence ...
INFO [alembic.ddl.postgresql] Detected sequence ...
INFO [alembic.autogenerate.compare] Detected added column ...
Generating /.../alembic/versions/dc3dae7487df_.py ... done
我已经尝试过以下检查
[[ $(alembic revision --autogenerate | grep "^Generating.*done$") ]] && echo "test"
但是,grep 似乎对 alembic 输出不起作用,因为即使生成了新的迁移文件,我也从未收到 echo test
。
运行命令
alembic revision --autogenerate | grep 'Generating.*done' | cat -v
产生如 (1) 中的输出。
更改正则表达式也没有给出预期的结果
[[ $(alembic revision --autogenerate | grep "^[[:blank:]]*Generating.*done\r$") ]] && echo "test"
根据我们的讨论,我们发现 alembic 输出将转到 stderr 而不是 stdout,这将执行我认为您想要的操作:
[[ $(alembic revision --autogenerate 2>&1 | grep '^[[:blank:]]*Generating.*done[[:blank:]]*$') ]] && echo "test"
如果这仍然不是您想要的,请再次编辑您的问题以进一步澄清。