对于我的CI / CD管道,我想在云构建(使用github触发器)上启动python单元测试。要运行测试,我需要一个数据存储区模拟器来在安全的环境中创建实体(以在构建后隔离我的测试构建)。 我的python应用是运行于python 3.7上的经典Flask应用,适用于应用引擎标准环境。
我尝试提交自己的版本(gcloud beta builds submit --config build.yaml .
),但是该版本停留在最后一步,并且什么也不输出(仅一个日志:Step #2: Already have image (with digest): gcr.io/cloud-builders/docker
)。
在本地环境中,我已经在docker容器中运行了模拟器,然后运行了测试容器,并且该容器正在运行。 此外,在使用cloud-build-local运行时,测试正在运行,并且我的构建以DONE状态完成。
这是我的云构建YAML:
steps:
- name: 'gcr.io/cloud-builders/docker'
entrypoint: /bin/sh
args:
- '-c'
- |
docker run -d -p 9225:9225 google/cloud-sdk gcloud beta emulators datastore start --project=test --consistency=1 --host-port 0.0.0.0:9225
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '--rm', '-f', './Dockerfile', '-t', 'gcr.io/$PROJECT_ID/core-test:latest', '.']
- name: 'gcr.io/cloud-builders/docker'
args: ['run', 'gcr.io/$PROJECT_ID/core-test:latest']
这是Dockerfile:
FROM gcr.io/google-appengine/python
RUN apt-get update
RUN virtualenv /venv -p python3.7
ENV VIRTUAL_ENV /venv
ENV PATH /venv/bin:$PATH
# Copy the application's source code
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt -r requirements-dev.txt
RUN mkdir ../data
ENV DATASTORE_PROJECT_ID=test
ENV DATASTORE_EMULATOR_HOST=host.docker.internal:9225
ENV PYTHON_ENV=TestConfig
CMD nosetests
这些测试调用了我在数据存储区模拟器中创建实体的API端点。
我希望看到我的测试正在运行并且构建成功,但是我不明白自己在做什么错。 是否将云构建正确用于CI?云构建能够在构建内部运行docker容器吗? 关于使用云构建进行测试的唯一文档是here,但我找不到更多信息。