如何在github动作服务容器中运行命令?

时间:2020-03-25 13:22:14

标签: docker continuous-integration github-actions minio

我正在使用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]

如果尚未实现,我还可以尝试其他哪些选择?

谢谢,
或者

2 个答案:

答案 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。话虽如此,我将在单独的作业中运行前端和后端测试, 这样可以简化事务,并可以消除手动启动容器的需要。