gpt4 book ai didi

docker - 使 `pipenv run` 运行多个命令

转载 作者:行者123 更新时间:2023-12-04 17:22:16 27 4
gpt4 key购买 nike

我正在使用 Docker 容器进行本地 Web 开发。我有一个 bash 脚本,用于运行 Django 的 manage.py testflake8coverage html,所有这些都在 Docker 的 pipenv 环境中容器。

一个简单的版本是:

#!/bin/bash
set -e

docker exec hines_web /bin/sh -c "pipenv run coverage run --source=. manage.py test ; pipenv run flake8 ; pipenv run coverage html"

这行得通。但是,因为每个命令都必须单独使用 pipenv run,所以速度比需要的要慢。

有没有办法在一次 pipenv 运行 后将多个命令链接在一起,或者将多个命令发送到 pipenv shell 以运行它们?

(任何关于改进一般方法的想法表示赞赏!)

最佳答案

这是我的解决方法,它非常费力,让我觉得我完全错误地处理了这个问题,但它确实有效。三步:

1. 将运行我们的命令的 shell 脚本。这被设计为在 pipenv 环境中运行。这是 scripts/pipenv-run-tests.sh :

#!/bin/sh
set -e

# Runs the Django test suite, flake8, and generates HTML coverage reports.

# This script is called by using the shortcut defined in Pipfile:
# pipenv run tests

# You can optionally pass in a test, or test module or class, as an argument, e.g.
# ./pipenv-run-tests.sh tests.appname.test_models.TestClass.test_a_thing
TESTS_TO_RUN=${1:-tests}

coverage run --source=. ./manage.py test $TESTS_TO_RUN
flake8
coverage html

2. 我们定义一个Custom Script Shortcut在我们的 Pipfile :

[scripts]
tests = "./scripts/pipenv-run-tests.sh"

这意味着如果我们登录到 Docker 容器上的 shell,我们可以这样做:pipenv run tests和我们的 scripts/pipenv-run-tests.sh将在 pipenv 环境中运行。 pipenv run tests 之后包含的任何参数传递给脚本。

3. 最后,我们有一个设计为从主机运行的脚本,它在 Docker 中运行我们的自定义脚本快捷方式。这是 scripts/run-tests.sh :

#!/bin/bash
set -e

# Call this from the host machine.
# It will call the `tests` shortcut defined in Pipfile, which will run
# a script within the pipenv environment.

# You can optionally pass in a test, or test module or class, as an argument, e.g.
# ./run-tests.sh tests.appname.test_models.TestClass.test_a_thing
TESTS_TO_RUN=${1:-tests}

docker exec hines_web /bin/sh -c "pipenv run tests $TESTS_TO_RUN"

所以现在,在主机上,我们可以做:./scripts/run-tests.sh这将在 Docker 容器内调用 pipenv 快捷方式,该快捷方式将运行 scripts/pipenv-run-tests.sh脚本。提供的任何参数都会传递给最终脚本。

(注意上面的 hines_web 是我在 docker-compose.yml 中定义的 Docker 容器的名称。)

关于docker - 使 `pipenv run` 运行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65512012/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com