首页 > 解决方案 > 无法使用 Jenkins 将 docker 映像部署到 GKE

问题描述

我在 Mac 上运行 Jenkins jenkinsci/blueocean docker 映像,并尝试使用 Jenkins 管道(GKE 插件 v0.8.3)构建映像并将其部署到 GCP 上的 Kubernetes 集群,但它失败了——映像已构建并且成功添加到容器注册表(DockerHub),但在下面的“部署到 K8s”阶段部署到 GKE 失败。Jenkins 没有显示任何错误消息。我究竟做错了什么?任何帮助深表感谢

我的 deployment.yaml 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mywebtestApp-deployment
  labels:
    app: mywebtestApp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mywebtestApp
  template:
    metadata:
      labels:
        app: mywebtestApp
    spec:
      containers:
      - name: mywebtestApp
        image: <mydockerhub>/<myimagename>:latest
        ports:
        - containerPort: 80 

和我的詹金斯文件

pipeline {
    agent any   
    environment {
............
  stage('Deploy to K8s') { 
                steps{
                   echo 'Deployment started ...'
                 step([$class: 'KubernetesEngineBuilder', projectId: env.PROJECT_ID, clusterName: env.CLUSTER_NAME, location: env.LOCATION, manifestPattern: 'deployment.yaml', credentialsId: env.CREDENTIALS_ID, verifyDeployments: true])
           echo "Deployment Finished ..."
            }
       }
    }
}

标签: jenkins-pipelinegoogle-kubernetes-engine

解决方案


如果你将它应用Deployment到你的集群上,你会得到错误:

The Deployment "mywebtestApp-deployment" is invalid:
 * metadata.name: Invalid value: "mywebtestApp-deployment": a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
 * spec.template.spec.containers[0].name: Invalid value: "mywebtestApp": a DNS-1123 label must consist of lower case alphanumeric characters or '-', and must start and end with an alphanumeric character (e.g. 'my-name',  or '123-abc', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?')

不能使用大写字母。

您必须将标签从更改app: mywebtestApp为 app: mywebtestapp 并将deployment名称从name: mywebtestApp-deployment更改为name: mywebtestApp-deployment

更改后,您将能够创建deployment.

$ kubectl apply -f deployment.yaml
deployment.apps/mywebtestapp-deployment created

推荐阅读