首页 > 解决方案 > 在容器中运行步骤时,Github Actions 工作流失败

问题描述

我刚刚开始为其中一个项目设置 Github-actions 工作流。我尝试使用此工作流定义在容器内运行工作流步骤:

  name: TMT-Charts-CI

  on:
    push:
      branches:
        - master
        - actions-ci

  jobs:
    build:
      runs-on: ubuntu-latest
      container:
        image: docker://alpine/helm:2.13.0

      steps:
      - name: Checkout Code
        uses: actions/checkout@v1

      - name: Validate and Upload Chart to Chart Museum
        run: |
          echo "Hello, world!"
          export PAGER=$(git diff-tree --no-commit-id --name-only -r HEAD)
          echo "Changed Components are  => $PAGER"
          export COMPONENT="NOTSET"
          for CHANGE in $PAGER; do ENV_DIR=${CHANGE%%/*}; done
          for CHANGE in $PAGER; do if [[ "$CHANGE" != .* ]] && [[ "$ENV_DIR" == "${CHANGE%%/*}" ]]; then export COMPONENT="$CHANGE"; elif [[ "$CHANGE" == .* ]]; then echo "Not a Valid Dir for Helm Chart" ; else echo "Only one component per PR should be changed" && exit 1; fi; done
          if [ "$COMPONENT" == "NOTSET" ]; then echo "No component is changed!" && exit 1;  fi
          echo "Initializing Component => $COMPONENT"
          echo $COMPONENT | cut -f1 -d"/"
          export COMPONENT_DIR="${COMPONENT%%/*}"
          echo "Changed Dir => $COMPONENT_DIR"
          cd $COMPONENT_DIR
          echo "Install Helm and Upload Chart If Exists"
          curl -L https://git.io/get_helm.sh | bash
          helm init --client-only

但工作流程失败,说明容器立即停止到期。

错误描述

我尝试了许多图像,包括官方文档中描述的“alpine:3.8”图像,但容器停止了。

根据GitHub Actions 的 Workflow 语法,在 Container 部分:“运行作业中尚未指定容器的任何步骤的容器。” 我的假设是容器将被启动并且步骤将在 Docker 容器内运行。

标签: dockergithub-actions

解决方案


我们可以通过制作自定义 docker 镜像来实现这一点,实际上 Github 运行程序在执行 entrypoint 命令后以某种方式停止了正在运行的容器,我使用 entrypoint 制作了 docker 镜像使容器处于活动状态,因此容器在启动后不会死机。

这是自定义 Dockerfile ( https://github.com/rizwan937/Helm-Image ) 您可以将此图像发布到 dockerhub 并在工作流文件中使用它,例如

 container:
   image: docker://rizwan937/helm

您可以将此入口点添加到任何 docker 映像,以便它保持活动状态以执行进一步的步骤。

这是一个临时解决方案,如果有人有更好的解决方案,请告诉我。


推荐阅读