首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >能运行python脚本并像在终端本地运行那样显示输出吗?

能运行python脚本并像在终端本地运行那样显示输出吗?
EN

Stack Overflow用户
提问于 2020-06-09 23:05:39
回答 1查看 2.1K关注 0票数 1

我正在尝试构建一个非常基本的CI管道,当它被推到Cloud存储库时,它会在代码上运行基本测试。目前,我只是想让Cloud运行一个简单的python脚本并显示输出。我的Dockerfile设置了环境并调用python脚本,我期望它只显示云构建日志中的输出,但它没有。调用脚本的步骤显示:

代码语言:javascript
复制
Step 6/6 : CMD ["python","-u","script.py"]
 ---> Running in 1fdf352d6515

也许我有点搞不懂云构建到底做了什么,也许它实际上并不运行程序,只是在容器中运行它,然后将映像存储在容器注册表中?我对此非常陌生,所以我会非常感谢你的一些建议。

是否有一种方法可以让Cloud像在终端本地运行时那样显示该程序的输出?如果不是,那么我想我需要使用另一个GCP服务,比如云函数或云运行来实际测试我的程序。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-06-10 16:20:13

您的意图( CI管道)是一个很好的云构建应用程序。

云构建在概念上是简单的,但确实需要一些时间才能使您的头脑清醒。从概念上讲,云构建是一个管道工具。您给它一些输入和一系列容器映像(步骤),它将每个映像(依次)应用到前一步的输出,并生成输出工件(通常是图像)。

注意到虽然Cloud中的步骤是由(易于分发的)容器映像定义的,但并不要求生成的也是容器映像。

它有2种模式,而且,您似乎正在使用提交Dockerfile和Cloud的模式,从而有效地在您的Dockerfile上为您执行一个docker build ... (生成一个图像)。Per @skolsuper,您的Dockerfile构建一个映像,当docker run ...运行python -u script.py时。这可能不是你想要的。

下面是一个类似的例子:

代码语言:javascript
复制
FROM busybox

RUN echo "[RUN] Hello Freddie!"

ENTRYPOINT ["/bin/ash","-c","echo \"[ENTRYPOINT] Hello Freddie!\""]

然后:

代码语言:javascript
复制
PROJECT=[[YOUR-PROJECT]]
QUESTION="62293281"
gcloud builds submit \
--tag=gcr.io/${PROJECT}/${QUESTION} \
--project=${PROJECT}

这一产出如下:

代码语言:javascript
复制
...
starting build "4414e398-54b9-463e-8281-dc2a35196ca8"

FETCHSOURCE
...
Operation completed over 1 objects/250.0 B.                                      
BUILD
Step 1/3 : FROM busybox
...
 ---> 1c35c4412082
Step 2/3 : RUN echo "[RUN] Hello Freddie!"
 ---> Running in 97eff39fa957
[RUN] Hello Freddie!
Removing intermediate container 97eff39fa957
 ---> c2fd37a6430a
Step 3/3 : ENTRYPOINT ["/bin/ash","-c","echo \"[ENTRYPOINT] Hello Freddie!\""]
 ---> Running in d55f7deb85e6
Removing intermediate container d55f7deb85e6
 ---> 5f0ba5789757
Successfully built 5f0ba5789757
...
PUSH
latest: digest: sha256:2261cd00817477bd1d2017033f9fab38f92de6f0dc6b8658836bad20c4439b42 size: 527
DONE

注意:参见生成输出中出现的[RUN] Hello Freddie!

然后,我们可以运行图像:

代码语言:javascript
复制
docker run --interactive --tty gcr.io/${PROJECT}/${QUESTION}@sha256:2261cd00817477bd1d2017033f9fab38f92de6f0dc6b8658836bad20c4439b42
...
[ENTRYPOINT] Hello Freddie!

注意:,请参阅运行图像时出现的[ENTRYPOINT] Hello Freddie!

因此,您可以使用Dockerfile中的命令来使用(例如RUN echo ...RUN ls -l )输出状态,并且Cloud捕获(标准的)输出(Dockerfile)。

您可以检查(所有)项目的构建作业,描述它们,并使用以下方法查看构建日志:

代码语言:javascript
复制
for BUILD in $(gcloud builds list --project=${PROJECT} --format="value(id)")
do
  echo ${BUILD}
  gcloud builds describe ${BUILD} --project=${PROJECT}
  gcloud builds log ${BUILD} --project=${PROJECT}
done

注意,,您也可以通过云控制台访问相同的功能:仪表板建房;单击构建将带您访问构建的日志。 注意: gcloud builds log ...显示了与上面显示的相同的信息,在我的例子中,它将包括与[RUN] Hello Freddie!一起的一行。

使用gcloud build submit ...配置文件的另一种形式的cloudbuild.yaml。此机制为您提供了运行多个步骤的能力。多个docker build ...等效命令。有可能这种方法更适合您的CI需要。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62293281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档