我正在尝试构建一个非常基本的CI管道,当它被推到Cloud存储库时,它会在代码上运行基本测试。目前,我只是想让Cloud运行一个简单的python脚本并显示输出。我的Dockerfile设置了环境并调用python脚本,我期望它只显示云构建日志中的输出,但它没有。调用脚本的步骤显示:
Step 6/6 : CMD ["python","-u","script.py"]
---> Running in 1fdf352d6515也许我有点搞不懂云构建到底做了什么,也许它实际上并不运行程序,只是在容器中运行它,然后将映像存储在容器注册表中?我对此非常陌生,所以我会非常感谢你的一些建议。
是否有一种方法可以让Cloud像在终端本地运行时那样显示该程序的输出?如果不是,那么我想我需要使用另一个GCP服务,比如云函数或云运行来实际测试我的程序。
谢谢!
发布于 2020-06-10 16:20:13
您的意图( CI管道)是一个很好的云构建应用程序。
云构建在概念上是简单的,但确实需要一些时间才能使您的头脑清醒。从概念上讲,云构建是一个管道工具。您给它一些输入和一系列容器映像(步骤),它将每个映像(依次)应用到前一步的输出,并生成输出工件(通常是图像)。
注意到虽然Cloud中的步骤是由(易于分发的)容器映像定义的,但并不要求生成的也是容器映像。
它有2种模式,而且,您似乎正在使用提交Dockerfile和Cloud的模式,从而有效地在您的Dockerfile上为您执行一个docker build ... (生成一个图像)。Per @skolsuper,您的Dockerfile构建一个映像,当docker run ...运行python -u script.py时。这可能不是你想要的。
下面是一个类似的例子:
FROM busybox
RUN echo "[RUN] Hello Freddie!"
ENTRYPOINT ["/bin/ash","-c","echo \"[ENTRYPOINT] Hello Freddie!\""]然后:
PROJECT=[[YOUR-PROJECT]]
QUESTION="62293281"
gcloud builds submit \
--tag=gcr.io/${PROJECT}/${QUESTION} \
--project=${PROJECT}这一产出如下:
...
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!
然后,我们可以运行图像:
docker run --interactive --tty gcr.io/${PROJECT}/${QUESTION}@sha256:2261cd00817477bd1d2017033f9fab38f92de6f0dc6b8658836bad20c4439b42
...
[ENTRYPOINT] Hello Freddie!注意:,请参阅运行图像时出现的
[ENTRYPOINT] Hello Freddie!。
因此,您可以使用Dockerfile中的命令来使用(例如RUN echo ...或RUN ls -l )输出状态,并且Cloud捕获(标准的)输出(Dockerfile)。
您可以检查(所有)项目的构建作业,描述它们,并使用以下方法查看构建日志:
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需要。
https://stackoverflow.com/questions/62293281
复制相似问题