我正在使用minio创建类似于s3的对象存储服务器,并且
我要在ci cd进程中针对此服务器测试一些代码。
使用Github动作,我试图在工作流文件中添加minio作为服务,但是由于minio需要命令和一些参数,因此我无法使用此机制实际运行它。
这是我的ci.yml相关配置的一部分:
minio-container:
runs-on: ubuntu-latest
container: python:3.8.2
services:
minio:
image: minio/minio:latest
ports:
- 9000:9000
env:
MINIO_ACCESS_KEY: XXXX
MINIO_SECRET_KEY: XXXXX
我阅读了一下,发现github在后台运行docker crate service [OPTIONS] IMAGE_NAME
,但我还需要能够运行docker create service [OPTIONS] IMAGE_NAME COMMAND [ARGS]
如果尚未实现,我还可以尝试其他哪些选择?
谢谢,
或者
答案 0 :(得分:0)
通过快速查看Github Actions文档,尚不支持此功能。您可以使用Bitnami中的Minio图像轻松解决此问题。
我相信类似的方法应该起作用:
services:
minio:
image: bitnami/minio:latest
env:
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio123
ports:
- 9000:9000
options: --name minio-server
答案 1 :(得分:0)
仔细检查,有一种方法。但是在开始之前,我尝试了一些想法。
首先我以为我可以将带有源代码的目录挂载到容器中
并通过指定--entrypoint
选项运行一个项目文件(脚本),
但是服务在git clone
之前启动。
然后我想也许可以将命令传递给容器,但是不行,那是不可能的。
我考虑的第三个选项是通过环境传递命令
映像随附的某些可执行文件(可能是外壳)的变量。
但是shell可以使用脚本路径,而不是命令路径(ENV
变量)。
然后我想到了“让服务终止”,克隆存储库后,我只需要restart the container。
但是与...相比,这并没有带来什么好处。
“只需手动创建容器即可。”我是怎么做的:
.github/workflows/django.yml
:
...
jobs:
build:
runs-on: ubuntu-latest
container: python:3.5-alpine3.12
steps:
- uses: actions/checkout@v2
- run: apk add expect && unbuffer ./create-cypress-container.sh
...
create-cypress-container.sh
:
#!/bin/sh -eux
apk add docker jq
network=$(docker inspect --format '{{json .NetworkSettings.Networks}}' `hostname` \
| jq -r 'keys[0]')
docker pull -q cypress/base:12
docker run \
-v /home/runner/work:/__w \
-w "$GITHUB_WORKSPACE" \
--name cypress \
--network "$network" \
-d \
cypress/base:12 sh -xc 'ls && whoami && pwd'
sleep 10
docker ps
docker logs cypress
使用以下选项启动作业容器(请参见Initialize containers > Starting job containeir
)
...
--workdir /__w/PROJECT_NAME/PROJECT_NAME
-v "/home/runner/work":"/__w"
...
和环境变量:
...
GITHUB_WORKSPACE='/__w/PROJECT_NAME/PROJECT_NAME'
...
/__w/PROJECT_NAME/PROJECT_NAME
是克隆存储库的位置。
P.S。话虽如此,我将在单独的作业中运行前端和后端测试, 这样可以简化事务,并可以消除手动启动容器的需要。