将映像从 jenkins 服务器推送到 gke 作为部署

时间:2021-02-02 01:33:29

标签: docker jenkins kubernetes google-kubernetes-engine

我在 Ubuntu VM 中使用 Jenkins 从 Dockerfile 创建了一个 LAMP 映像。现在我想将 LAMP 映像推送到 gcr.io,还想使用该 LAMP 映像将 Nginx pod 部署到项目上的 GKE 集群。

enter image description here

图:1

我使用 Google Kubernetes 引擎插件连接集群,如上图:1。我不明白我需要如何为上图定义 Kubernetes 清单。构建配置时出现以下错误:

tagged gcr.io/xxx-xxx-xxx/lamp-stack:v0
FATAL: /var/lib/jenkins/workspace/LAMP/test.yaml
java.nio.file.NoSuchFileException: /var/lib/jenkins/workspace/LAMP/test.yaml
    at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
    at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219)
    at java.base/java.nio.file.Files.newByteChannel(Files.java:370)
    at java.base/java.nio.file.Files.newByteChannel(Files.java:421)
    at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:420)
    at java.base/java.nio.file.Files.newInputStream(Files.java:155)
    at hudson.FilePath.newInputStreamDenyingSymlinkAsNeeded(FilePath.java:2109)
    at hudson.FilePath.read(FilePath.java:2094)
    at hudson.FilePath.read(FilePath.java:2086)
    at com.google.jenkins.plugins.k8sengine.Manifests.loadFile(Manifests.java:192)
    at com.google.jenkins.plugins.k8sengine.Manifests.<init>(Manifests.java:155)
    at com.google.jenkins.plugins.k8sengine.Manifests.<init>(Manifests.java:149)
    at com.google.jenkins.plugins.k8sengine.Manifests.fromFile(Manifests.java:173)
    at com.google.jenkins.plugins.k8sengine.KubernetesEngineBuilder.addMetricsLabel(KubernetesEngineBuilder.java:300)
    at com.google.jenkins.plugins.k8sengine.KubernetesEngineBuilder.perform(KubernetesEngineBuilder.java:266)
    at jenkins.tasks.SimpleBuildStep.perform(SimpleBuildStep.java:123)
    at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:80)
    at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:804)
    at hudson.model.Build$BuildExecution.build(Build.java:197)
    at hudson.model.Build$BuildExecution.doRun(Build.java:163)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:514)
    at hudson.model.Run.execute(Run.java:1907)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE

1 个答案:

答案 0 :(得分:1)

您收到异常 java.nio.file.NoSuchFileException,因为 Jenkins 是一个独立的基于 Java 的程序。

当尝试访问不存在的文件时会抛出此错误,在本例中为 /var/lib/jenkins/workspace/LAMP/test.yaml。您必须确保该文件确实存在于该路径中。

您可以查看此 link 以获取有关如何在 Kubernetes Engine 上使用 Jenkins 的更多信息。

要将映像添加到 Container Registry,您必须将映像 docker tagdocker push 加入 gcr.io 主机名。您可以在 documentation 中找到操作方法。