将 workspace maven 构建输出放入容器构建任务的正确上下文是什么?
What is correct context for getting workspace maven build output into container build task?
这与 类似,但我似乎无法弄清楚有什么区别。
我正在尝试构建一个简单的 Java 程序并使用 Google Cloud Build 将其打包到容器中。我主要关注 https://cloud.google.com/build/docs/building/build-java but using my own repo which is a fork of https://github.com/jchraibi/cloud-native-workshop
steps:
- name: 'maven:3-openjdk-11'
args:
- test
- '-f=code/inventory-quarkus/pom.xml'
entrypoint: mvn
- name: 'maven:3-openjdk-11'
args:
- package
- '-f=code/inventory-quarkus/pom.xml'
- '-Dmaven.test.skip=true'
entrypoint: mvn
- name: 'gcr.io/cloud-builders/docker'
args:
- 'build'
- '-t'
- 'gcr.io/$PROJECT_ID/inventory-quarkus'
- '--build-arg=JAR_FILE=workspace/code/inventory-quarkus/target/$_BUILD_ARTIFACT'
- '-f'
- 'code/inventory-quarkus/gcp/Dockerfile'
- '/workspace'
以上是构建步骤。 maven 打包完成后,输出如下:
Step #1: [INFO] [io.quarkus.deployment.pkg.steps.JarResultBuildStep] Building thin jar: /workspace/code/inventory-quarkus/target/inventory-quarkus-1.0.0-SNAPSHOT-runner.jar
但是,无论我尝试将复制内容和上下文组合成何种组合,我似乎都无法在 Docker 构建的文件系统中的任何地方找到 inventory-quarkus-1.0.0-SNAPSHOT-runner.jar
。请注意,Docker文件所在的位置与构建目标似乎结束的位置不同。
FROM openjdk:11
ARG JAR_FILE=JAR_FILE_MUST_BE_SPECIFIED_AS_BUILD_ARG
RUN find .
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Djava.security.edg=file:/dev/./urandom","-jar","/app.jar"]
有趣的是,在日志中,find
命令的输出根本没有工作区文件夹。我确定这与 Dockerfile
不在回购协议的根目录中有关,但我找不到正确的调用。
这个 post 开头的 link 到另一个线程结束时使用了额外的步骤 git
图像来做某种复制,但我没有不明白为什么需要这样做,因为所有 Google 示例都不必经历那样的任何麻烦。
build containers 文档有以下声明:
If your Dockerfile and source code are in different directories, add -f and the path to the Dockerfile to the list of arguments in the args field:
这绝对是我在构建步骤中所做的。它显然正在寻找 Docker 文件,因为它正在处理查找和复制。我似乎无法找到 where/how 将 Maven 包步骤的工作区文件夹放入构建器,或者从中复制文件的源路径是什么。
感谢您的提问!我克隆了您的存储库并在根目录中添加了一个 cloudbuild.yaml
,并在 inventory-quarkus/src/main/docker
目录中添加了一个 Dockerfile
。我确定这不完全是您正在使用的回购结构,但这个概念应该延续下去。
本质上,您想使用 dir
field 在步骤之间设置您的工作目录,以便更轻松地传递数据。这个 cloudbuild.yaml 对我有用:
steps:
# Test
- name: 'maven:3-openjdk-11'
entrypoint: mvn
args:
- test
- '-f=labs/inventory-quarkus/pom.xml'
# Package
- name: 'maven:3-openjdk-11'
entrypoint: mvn
dir: 'labs/inventory-quarkus'
args:
- package
- -f=pom.xml
- -Dmaven.test.skip=true
# Docker Build
- name: 'gcr.io/cloud-builders/docker'
dir: 'labs/inventory-quarkus'
args:
- 'build'
- '-t'
- 'gcr.io/$PROJECT_ID/inventory-quarkus'
- '--build-arg=JAR_FILE=target/inventory-quarkus-1.0.0-SNAPSHOT-runner.jar'
- '-f'
- 'src/main/docker/Dockerfile'
- '.'
我还想提请您注意我们现在 Artifact Registry,如果您想将 JAR 存储在那里并从云中提取它。您也可以用它来存储您的 Docker 图片。
这与
我正在尝试构建一个简单的 Java 程序并使用 Google Cloud Build 将其打包到容器中。我主要关注 https://cloud.google.com/build/docs/building/build-java but using my own repo which is a fork of https://github.com/jchraibi/cloud-native-workshop
steps:
- name: 'maven:3-openjdk-11'
args:
- test
- '-f=code/inventory-quarkus/pom.xml'
entrypoint: mvn
- name: 'maven:3-openjdk-11'
args:
- package
- '-f=code/inventory-quarkus/pom.xml'
- '-Dmaven.test.skip=true'
entrypoint: mvn
- name: 'gcr.io/cloud-builders/docker'
args:
- 'build'
- '-t'
- 'gcr.io/$PROJECT_ID/inventory-quarkus'
- '--build-arg=JAR_FILE=workspace/code/inventory-quarkus/target/$_BUILD_ARTIFACT'
- '-f'
- 'code/inventory-quarkus/gcp/Dockerfile'
- '/workspace'
以上是构建步骤。 maven 打包完成后,输出如下:
Step #1: [INFO] [io.quarkus.deployment.pkg.steps.JarResultBuildStep] Building thin jar: /workspace/code/inventory-quarkus/target/inventory-quarkus-1.0.0-SNAPSHOT-runner.jar
但是,无论我尝试将复制内容和上下文组合成何种组合,我似乎都无法在 Docker 构建的文件系统中的任何地方找到 inventory-quarkus-1.0.0-SNAPSHOT-runner.jar
。请注意,Docker文件所在的位置与构建目标似乎结束的位置不同。
FROM openjdk:11
ARG JAR_FILE=JAR_FILE_MUST_BE_SPECIFIED_AS_BUILD_ARG
RUN find .
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Djava.security.edg=file:/dev/./urandom","-jar","/app.jar"]
有趣的是,在日志中,find
命令的输出根本没有工作区文件夹。我确定这与 Dockerfile
不在回购协议的根目录中有关,但我找不到正确的调用。
这个 post 开头的 link 到另一个线程结束时使用了额外的步骤 git
图像来做某种复制,但我没有不明白为什么需要这样做,因为所有 Google 示例都不必经历那样的任何麻烦。
build containers 文档有以下声明:
If your Dockerfile and source code are in different directories, add -f and the path to the Dockerfile to the list of arguments in the args field:
这绝对是我在构建步骤中所做的。它显然正在寻找 Docker 文件,因为它正在处理查找和复制。我似乎无法找到 where/how 将 Maven 包步骤的工作区文件夹放入构建器,或者从中复制文件的源路径是什么。
感谢您的提问!我克隆了您的存储库并在根目录中添加了一个 cloudbuild.yaml
,并在 inventory-quarkus/src/main/docker
目录中添加了一个 Dockerfile
。我确定这不完全是您正在使用的回购结构,但这个概念应该延续下去。
本质上,您想使用 dir
field 在步骤之间设置您的工作目录,以便更轻松地传递数据。这个 cloudbuild.yaml 对我有用:
steps:
# Test
- name: 'maven:3-openjdk-11'
entrypoint: mvn
args:
- test
- '-f=labs/inventory-quarkus/pom.xml'
# Package
- name: 'maven:3-openjdk-11'
entrypoint: mvn
dir: 'labs/inventory-quarkus'
args:
- package
- -f=pom.xml
- -Dmaven.test.skip=true
# Docker Build
- name: 'gcr.io/cloud-builders/docker'
dir: 'labs/inventory-quarkus'
args:
- 'build'
- '-t'
- 'gcr.io/$PROJECT_ID/inventory-quarkus'
- '--build-arg=JAR_FILE=target/inventory-quarkus-1.0.0-SNAPSHOT-runner.jar'
- '-f'
- 'src/main/docker/Dockerfile'
- '.'
我还想提请您注意我们现在 Artifact Registry,如果您想将 JAR 存储在那里并从云中提取它。您也可以用它来存储您的 Docker 图片。