本地,Dockerfile
:
FROM node:lts-alpine as node_builder
WORKDIR /app
# Copy the assets folder if exists
COPY assets assets
在我的机器上,我可以测试如果资产被复制并且它工作(它在那里):
$ touch assets/foo.js
$ docker build . -t node_builder:latest --target node_builder
$ docker run --rm node_builder:latest sh -c "stat assets/foo.js"
当我尝试用我的在线存储库和test.yml
工作流做同样的事情时,资产foo.js
不被复制。我的步骤描述为:
node_builder:
runs-on: ubuntu-latest
steps:
# Clone this repository
- name: Checkout
uses: actions/checkout@v3
# Just touch a new assets in the cloned repository
- name: Create a simple asset
run: touch assets/foo.js
# Asset assets/foo.js is present OK!
- name: Debug
run: ls -la assets
# Build the target image
- name: Build target
uses: docker/build-push-action@v4
with:
target: node_builder
tags: node_builder:latest
# Run the comand inside the image
- name: Test assets copy
run: docker run --rm node_builder:latest sh -c "stat assets/foo.js"
我试图找出为什么使用调试/回声的东西,但我找不到我做错了什么(肯定我错过了一些东西)。
要小心,因为在构建步骤之前的步骤中的任何文件变化都将被忽略,包括.dockerignore文件的处理,因为上下文是基于Git引用的。但是,您可以使用Path上下文,在操作/checkout操作旁边使用上下文输入来删除此限制。
证明docker/build-push-action@v4
构建GitHub存储库URL。所以解决方案是:
# Build the target image
- name: Build target
uses: docker/build-push-action@v4
with:
target: node_builder
context: .
tags: node_builder:latest