gpt4 book ai didi

google-app-engine - 如何使用 Google Cloud Build 将 spring boot 项目部署到 Google App Engine?

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:17 27 4
gpt4 key购买 nike

我正在使用 maven 和 google cloud build 构建我的 spring boot 应用程序,但无论是使用 mvn appengine:run 在本地运行还是使用 Cloud Build 部署,我都会以某种方式获得不同的部署结果。

如果我使用 mvn appengine:run 在本地运行,我可以按预期访问我的 Controller 。使用 Cloud Build 时,我收到了 404 错误。

我的 cloudbuild.yaml 如下:

steps:
- name: 'gcr.io/cloud-builders/mvn'
args: ['package']
- name: 'gcr.io/cloud-builders/gcloud'
args: ['app', 'deploy', 'target/myapp/WEB-INF/appengine-web.xml']

您建议如何配置云构建以便在 Google App Engine 上构建和部署 Spring Boot 应用程序?


经过额外的挖掘,这个问题似乎与返回的某种错误有关:

javax.servlet.ServletContext log: 2 Spring WebApplicationInitializers detected on classpath

当使用 mvn appengine:deploy

从本地机器部署时,我没有在堆栈跟踪中收到此消息

我的问题仍然存在,我如何着手创建一个可以调用 mvn appengine:deploycloudbuild.yaml

最佳答案

为了构建一个 spring boot 项目并使用 Google Cloud Build 将其部署到 google appengine。我最终不得不首先使用下图构建一个“构建器”图像,并在执行我的实际应用程序构建时引用该图像。

Dockerfile

FROM debian:stretch
#
# Google Cloud SDK installation
# https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu
RUN apt-get update -y && \
apt-get install \
apt-utils \
dialog \
gnupg \
lsb-release \
curl -y && \
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && \
apt-get update -y && \
apt-get install google-cloud-sdk -y
# Install all available components
RUN apt-get install google-cloud-sdk \
google-cloud-sdk \
google-cloud-sdk-app-engine-go \
google-cloud-sdk-app-engine-java \
google-cloud-sdk-app-engine-python \
google-cloud-sdk-app-engine-python-extras \
google-cloud-sdk-bigtable-emulator \
google-cloud-sdk-cbt \
google-cloud-sdk-datastore-emulator \
google-cloud-sdk-cloud-build-local \
google-cloud-sdk-datalab \
kubectl \
google-cloud-sdk-pubsub-emulator -y
#
# OpenJDK installation
# https://linuxhint.com/install-openjdk-8-on-debian-9-stretch/
RUN apt-get install openjdk-8-jdk -y

#
# MAVEN installation
# https://github.com/carlossg/docker-maven/blob/f581ea002e5d067deb6213c00a4d217297cad469/jdk-8/Dockerfile
ARG MAVEN_VERSION=3.5.4
ARG USER_HOME_DIR="/root"
ARG SHA=ce50b1c91364cb77efe3776f756a6d92b76d9038b0a0782f7d53acf1e997a14d
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries

RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
&& curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
&& echo "${SHA} /tmp/apache-maven.tar.gz" | sha256sum -c - \
&& tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
&& rm -f /tmp/apache-maven.tar.gz \
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

ENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"

WORKDIR /workspace

cloudbuild.yaml

# In this directory, run the following command to build this builder.
# $ gcloud builds submit . --config=cloudbuild.yaml

steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '--tag=gcr.io/$PROJECT_ID/gcloud-maven', '.']
# Simple sanity check: invoke java to confirm that it was installed correctly.
- name: 'gcr.io/$PROJECT_ID/gcloud-maven'
args: ['java', '-version']
# Simple sanity check: invoke gcloud to confirm that it was installed correctly.
- name: 'gcr.io/$PROJECT_ID/gcloud-maven'
args: ['gcloud', 'projects', 'list']
# Simple sanity check: invoke maven to confirm that it was installed correctly.
- name: 'gcr.io/$PROJECT_ID/gcloud-maven'
args: ['mvn', '--version']

images: ['gcr.io/$PROJECT_ID/gcloud-maven']

timeout: 1200s

我的 spring boot 项目的 cloudbuild.yaml 现在引用这个图像:

steps:
- name: 'gcr.io/$PROJECT_ID/gcloud-maven'
args: ['mvn', 'appengine:deploy']

我会尽量把这个docker image放在dockerhub和github上,供大家查找。我还将感谢更熟悉 docker 和 linux 的人帮助改进此镜像以减小其大小。 (例如,使用 Alpine 而不是 Debian 或 Debian Stretch Slim)。与此同时,我希望这对像我一样的其他人有所帮助。

关于google-app-engine - 如何使用 Google Cloud Build 将 spring boot 项目部署到 Google App Engine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51679202/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com