• K8s 集成 Jenkins 部署Go Web项目


    风离不摆烂学习日志 Day9 K8s 集成 Jenkins 部署Go Web项目

    Dockerfile

    FROM golang:alpine as builder
    # 需要go环境
    MAINTAINER fl1906
    
    WORKDIR /work
    # 源
    RUN go env -w GOPROXY=https://goproxy.cn && go env -w CGO_ENABLED=0 && go env -w GO111MODULE=on
    COPY go.mod go.sum ./
    RUN go mod download
    
    COPY . .
    RUN go build -o main main.go
    
    
    FROM alpine:latest
    # 设置时区
    RUN apk add --no-cache tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" >  /etc/timezone
    
    WORKDIR /
    # 复制到工作区
    COPY --from=builder /work/ ./
    # COPY --from=builder /work/config ./config
    # 对外端口
    EXPOSE 8080
    # 执行
    CMD ["./main"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    踩坑 build的时候走到下载mod包会报错:“dial tcp: lookup goproxy.cn on 223.6.6.6:53: read udp 172.17.0.2:41803->223.6.6.6:53: i/o timeout”。

    go语言 Dockerfile builddial tcp: lookup 报错解决方案

    build的时候走到下载mod包会报错:“dial tcp: lookup goproxy.cn on 223.6.6.6:53: read udp 172.17.0.2:41803->223.6.6.6:53: i/o timeout”。

    开始以为是DNS问题,然后怀疑是代理不对?最终排除了这两个部分,于是大胆的考虑容器里是不是不通外网?

    还真是如此。

    因为之前的build指令没有特殊指定网络,所以修正指令后如下:

    docker build --network host ...
    
    • 1

    即可正常build镜像。

    Jenkinsfile

    pipeline {
      agent {
        node {
          label 'go16'
        }
    
      }
      stages {
        stage('从仓库拉取代码') {
          agent none
          steps {
            container('base') {
              git(credentialsId: 'gitee-id', url: 'https://gitee.com/fl1906249647/learning-gin.git', branch: 'master', changelog: true, poll: false)
            }
    
          }
        }
    
        stage('构建推送镜像到阿里云仓库 ') {
          agent none
          steps {
            container('go') {
              sh 'docker build --network host -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/go-admin:SNAPSHOT-$BUILD_NUMBER .'
              withCredentials([usernamePassword(credentialsId : 'aliyun-docker-registry' ,passwordVariable : 'DOCKER_PWD_VAR' ,usernameVariable : 'DOCKER_USER_VAR' ,)]) {
                sh 'docker login  -u "$DOCKER_USER_VAR" -p "$DOCKER_PWD_VAR" $REGISTRY'
                sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/go-admin:SNAPSHOT-$BUILD_NUMBER '
              }
    
            }
    
          }
        }
    
             stage('部署到线上') {
                         steps {
                             container ('go') {
                                  withCredentials([
                                      kubeconfigFile(
                                      credentialsId: env.KUBECONFIG_CREDENTIAL_ID,
                                      variable: 'KUBECONFIG')
                                      ]) {
                                      sh 'envsubst < deploy/go-admin.yaml | kubectl apply -f -'
                                  }
                             }
                         }
            }
    
      }
      environment {
        KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
        REGISTRY = 'registry.cn-hangzhou.aliyuncs.com'
        DOCKERHUB_NAMESPACE = 'choose-course-system'
        APP_NAME = 'learning-gin'
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    go-admin.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: go-admin
      name: go-admin
      namespace: go-admin   #一定要写名称空间
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      selector:
        matchLabels:
          app: go-admin
      strategy:
        rollingUpdate:
          maxSurge: 50%
          maxUnavailable: 50%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: go-admin
        spec:
          imagePullSecrets:
            - name: aliyun-docker-registry  #提前在项目下配置访问阿里云的账号密码
          containers:
            - image: $REGISTRY/$DOCKERHUB_NAMESPACE/go-admin:SNAPSHOT-$BUILD_NUMBER
              imagePullPolicy: Always
              name: app
              ports:
                - name: http-admin
                  containerPort: 8080
                  protocol: TCP
              resources:
                limits:
                  cpu: '3'
                  memory: 3000Mi
                requests:
                  cpu: 60m
                  memory: 50Mi
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          terminationGracePeriodSeconds: 30
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: go-admin
      name: go-admin
      namespace: go-admin
    spec:
      ports:
        - name: http
          port: 8080
          protocol: TCP
          targetPort: 8080
      selector:
        app: go-admin
      sessionAffinity: None
      type: ClusterIP
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    代码推送至仓库 自动触发流水线

    在Gitee仓库配置 WebHook 提交代码

    image-20221127214922156

    项目代码结构

    image-20221127214951440

    成功

    image-20221127215223843

  • 相关阅读:
    Oracle Linux 7.9内核降级
    【Django】Django自定义后台表单——对一个关联外键对象同时添加多个内容
    关于小程序TabBar跳转页面跟TabBar标签栏的icon不对应的分析(debug)
    Linux环境下Docker安装mysql数据的导入和导出备份操作
    介孔二氧化硅包裹超顺磁性Fe3O4纳米颗粒表面氨基修饰|齐岳生物
    【Mybatis】常见面试题:处理表与表之间的关系:多对一,一对多
    从底层结构开始学习FPGA----Xilinx ROM IP的定制与测试
    vue源码分析-动态组件
    代码随想录一一一哈希表一一一有效的字母异位词
    云原生 | 服务网格宝藏工具大推荐!
  • 原文地址:https://blog.csdn.net/qq_49186423/article/details/128070751