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

时间:2019-08-19 00:56:13

标签: docker github-actions

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

我认为GitHub Actions在Docker中运行。如何选择我的Docker映像?

2 个答案:

答案 0 :(得分:8)

作业(作为工作流程的一部分)在虚拟机中运行。您选择一种环境provided by them(例如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: <COMMAND>使用操作系统的外壳程序执行命令
  • uses: actions/checkout@v1从存储库actionshttps://github.com/actions/checkout)(主要版本1)中的用户/组织checkout运行操作。
  • uses: ./.github/actions/my-action在此路径下运行您自己的存储库中定义的操作
  • uses: docker://continuumio/anaconda3:2019.07从Docker Hub(https://hub.docker.com/r/continuumio/anaconda3)运行来自用户/组织anaconda3,版本continuumio的{​​{1}}镜像

请记住,need to select a linux distribution是您要使用Docker的环境。

有关更多详细信息,请查看usesrun的文档。

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

答案 1 :(得分:4)

GitHub动作提供了一个虚拟机(如您所述,Ubuntu,Windows或macOS),并在其中运行您的工作流。您可以然后使用该虚拟机在容器内运行工作流程。

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

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