【问题标题】:How can I run a command in github action service containers?如何在 github 操作服务容器中运行命令?
【发布时间】:2020-07-06 01:15:07
【问题描述】:

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

如果这还没有实现,我可以尝试哪些其他选项?

谢谢,
或者

【问题讨论】:

标签: docker continuous-integration github-actions minio


【解决方案1】:

快速浏览一下 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

【讨论】:

  • 最好使用MinIO官方发布的quay.io/minio/minio或minio/minio镜像——MinIO项目不支持Bitnami镜像。
【解决方案2】:

仔细观察,有办法。但在我开始之前,我尝试了几个想法。 首先我想我可以将带有源代码的目录挂载到容器中 并通过指定 --entrypoint 选项运行项目文件之一(脚本), 但服务在git clone 之前启动。 然后我想也许我可以将命令传递给容器,但是不,这是不可能的。 我考虑的第三个选项是通过环境传递命令 图像附带的一些可执行文件的变量,据说是一个shell。 但是 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 是克隆存储库的位置。

附:话虽如此,我将在不同的工作中运行前端和后端测试, 这应该可以简化事情,并且可能消除手动启动容器的需要。

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 2022-12-29
    • 2022-06-14
    • 2021-06-08
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2021-09-08
    相关资源
    最近更新 更多