如何将Docker与GitHub Actions一起使用?

soe*_*ace 3 docker github-actions

当我创建GitHub Actions工作流文件时,示例YAML文件包含runs-on: ubuntu-latest根据文档,我只有Ubuntu,Windows Server和macOS X的几个版本之间可以选择。

我以为GitHub Actions在Docker内部运行。如何选择Docker映像?

Edw*_*son 73

GitHub 操作提供了一个虚拟机——正如你所指出的,无论是 Ubuntu、Windows 还是 macOS——并在其中运行你的工作流程。然后,您可以使用该虚拟机在容器内运行工作流。

使用说明container在容器内运行一个步骤。确保runs-on为您的容器指定合适的主机环境(ubuntu-latest对于 Linux 容器,windows-latest对于 Windows 容器)。例如:

jobs:
  vm:
    runs-on: ubuntu-latest
    steps:
      - run: |
          echo This job does not specify a container.
          echo It runs directly on the virtual machine.
        name: Run on VM
  container:
    runs-on: ubuntu-latest
    container: node:10.16-jessie
    steps:
      - run: |
          echo This job does specify a container.
          echo It runs in the container instead of the VM.
        name: Run in container
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法缓存容器映像,这样每次触发作业时就不会从 docker hub 下载该映像? (6认同)

soe*_*ace 6

作业(作为一部分工作流)的虚拟机内运行。您可以选择它们提供的环境之一(例如ubuntu-latestwindows-2019)。

一项工作由一个或多个步骤组成。步骤可能是使用run的简单shell命令。但这也可能是一个动作,使用了用途

name: CI

on: [push]

jobs:
  myjob:
    runs-on: ubuntu-18.04 # linux required if you want to use docker
    steps:
    # Those steps are executed directly on the VM
    - run: ls /
    - run: echo $HOME
    - name: Add a file
      run: touch $HOME/stuff.txt
    # Those steps are actions, which may run inside a container
    - uses: actions/checkout@v1
    - uses: ./.github/actions/my-action
    - uses: docker://continuumio/anaconda3:2019.07
Run Code Online (Sandbox Code Playgroud)
  • run: <COMMAND> 使用OS的外壳执行命令
  • uses: actions/checkout@v1从主要版本1 actions的存储库checkouthttps://github.com/actions/checkout)中的用户/组织运行操作。
  • uses: ./.github/actions/my-action 在此路径下运行您自己的存储库中定义的操作
  • uses: docker://continuumio/anaconda3:2019.07从Docker Hub(https://hub.docker.com/r/continuumio/anaconda3anaconda3从用户/组织continuumio版本运行映像2019.07

请记住,如果要使用Docker ,则需要选择Linux发行版作为环境。

查看使用说明文件并运行以获取更多详细信息。

还应该注意,有一个container选项,允许您运行通常在要在容器内运行的主机上运行的任何步骤:https : //help.github.com/en/articles/workflow-syntax-for -github-actions#jobsjob_idcontainer

  • @Arne 不,不是马上。也许只是他们这边的一个错误。但这有点超出了这个问题的范围,我认为你应该打开一个新问题并发布你的workflow.yml (2认同)