Docker 构建在 GH 操作中失败

时间:2021-04-01 23:40:31

标签: docker continuous-integration github-actions

我想运行一些 NPM 脚本,创建一个 docker 镜像并将其发布到 dockerhub。 尝试生成图像时出现此错误。似乎第二个作业没有看到构建目录。

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

Dockerfile

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 目录就在那里。它在第二份工作中缺失。 似乎第一个作业结束时工作区的状态对第二个作业不可用。

2 个答案:

答案 0 :(得分:1)

看来您需要 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

答案 1 :(得分:0)

Github Actions 中的 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