Docker 在 GH 操作中构建失败

Docker build fails in GH Actions

我想 运行 一些 NPM 脚本,创建一个 docker 图像并将其发布在 dockerhub 上。 我在尝试生成图像时遇到此错误。看来第二份工作没有看到构建目录。

COPY failed: file not found in build context or excluded by .dockerignore: stat build/: file does not exist

Docker 文件

FROM httpd:2.4-alpine
COPY    ./build/ /usr/local/apache2/htdocs/myapp/
EXPOSE 80

这是我的工作流程

name: CD

on:
  push:
    branches: [ main ]

jobs:
  build:
    name: App build
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v2
      - name: Npm install
        run: npm install
      - name: Npm build
        run: npm run build
  deploy:
    name: Docker image in DockerHub repository
    runs-on: ubuntu-18.04
    needs: build
    steps:
      - uses: actions/checkout@v2
      - name: LS
        run: ls -R
      - name: Login to dockerhub
        run: docker login -u ${{ secrets.DOCKER_HUB_USER }} -p ${{ secrets.DOCKER_HUB_PASSWORD }}
      - name: Build Docker image
        run: docker build -f ./Dockerfile -t myaccount/myapp .
      - name: Push Docker image to DockerHub
        run: docker push myaccount/myapp:latest

项目结构

|   Dockerfile
|   package.json
|   README.md
|   webpack.config.js
+---.github
|   \---workflows
|           deploy.yml           
+---build  
+---src

更新: 我将工作流程更改为 ls 整个 GITHUB_WORKSPACE。

build 目录实际上丢失了(其他文件在那里)。然而,构建过程(第一份工作)结束时没有错误,如果我在第一份工作中尝试 ls -Rbuild 目录就在那里。它在第二份工作中丢失了。 第一个作业结束时的工作区状态似乎对第二个作业不可用。

看来你需要 actions/upload-artifactactions/download-artifact

name: CD

on:
  push:
    branches: [ main ]

jobs:
  build:
    name: App build
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v2
      - name: Npm install
        run: npm install
      - name: Npm build
        run: npm run build
      - name: LS
        run: ls -R
      - name: Temporarily save webpack artifact
        uses: actions/upload-artifact@v2
        with:
          name: webpack-artifact
          path: build
          retention-days: 1

  deploy:
    name: Docker image in DockerHub repository
    runs-on: ubuntu-18.04
    needs: build
    steps:
      ## Build and deploy Docker images to DockerHub
      - uses: actions/checkout@v2
      - name: Retrieve built package
        uses: actions/download-artifact@v2
        with:
          name: webpack-artifact
          path: build
      - name: LS
        run: ls -R
      - name: Login to dockerhub
        run: docker login -u ${{ secrets.DOCKER_HUB_USER }} -p ${{ secrets.DOCKER_HUB_PASSWORD }}
      - name: Build Docker image
        run: docker build -f ./Dockerfile -t myaccount/myapp ./
      - name: Push Docker image to DockerHub
        run: docker push myaccount/myapp:latest

Github 操作中的 2 个作业 运行 在 2 台不同的机器上,因此第二个作业看不到第一个。解决办法是把他们放到一份工作中。

name: CD

on:
  push:
    branches: [ main ]

jobs: 
  deploy:
    name: Docker image in DockerHub repository
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v2
      - name: Npm install
        run: npm install
      - name: Npm build
        run: npm run build
      - name: LS
        run: ls -R
      - name: Login to dockerhub
        run: docker login -u ${{ secrets.DOCKER_HUB_USER }} -p ${{ secrets.DOCKER_HUB_PASSWORD }}
      - name: Build Docker image
        run: docker build -f ./Dockerfile -t myaccount/myapp .
      - name: Push Docker image to DockerHub
        run: docker push myaccount/myapp:latest