jenkins流水线+k8s+阿里云搭建自动部署

准备环境:

1、准备一台服务器A安装docker
2、服务器A上面安装好jenkins
3、准备一个k8s集群

一、jenkins将项目打包镜像上传到阿里云

1、创建阿里云私有仓库

image.png
image.png
image.png

2、Jenkins流水线配置

pipeline {
    agent any
    
    environment {
        DOCKER_REGISTRY = 'registry.cn-hangzhou.aliyuncs.com'
        DOCKER_REPOSITORY = 'doyo_k8s'
        DOCKER_IMAGE = 'doyo_pic'
        DOCKER_TAG = '0.0.1'
        DOCKER_USERNAME = '你的用户名'
        DOCKER_PASSWORD = '你的密码'
        KUBECONFIG = credentials('kubernetes_id')
        KUBE_NAMESPACE = 'doyo'
        DEPLOYMENT_NAME = 'doyo_pic'
    }
    
    tools{
        maven "maven3"
    }

    stages {
        stage('拉取代码') {
            steps {
                git credentialsId: '4a502fac-8c7f-4235-93f9-92e1430d28bb', url: 'https://gitee.com/wang_du_yu_n/doyo_pic.git'
                echo '拉取代码完成'
            }

        }
        stage('开始构建') {
            steps {
                sh "mvn clean package"
                echo '构建完成'
            }

        }
        stage('创建镜像') {
            steps {
                sh "docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} ."
                echo '镜像创建完成'
            }

        }
        stage('推送镜像仓库') {
            steps {
                sh "docker login ${DOCKER_REGISTRY} -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD}"
                sh "docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_REGISTRY}/${DOCKER_REPOSITORY}/${DOCKER_IMAGE}:${DOCKER_TAG}"
                sh "docker push ${DOCKER_REGISTRY}/${DOCKER_REPOSITORY}/${DOCKER_IMAGE}:${DOCKER_TAG}"
                echo '镜像推送完成'
            }

        }
    }
    
    post {
        
        always {
            echo "完成"
            
        }
        failure {
            
            echo "失败"
        }
    }
}

3、编写dockerfile

在路径/root/.jenkins/workspace/doyo_pic 下面创建dockerfile

cd /root/.jenkins/workspace/doyo_pic
vi dockerfile
FROM openjdk:11
EXPOSE 9003

# 设置工作目录
WORKDIR /root/.jenkins/workspace/doyo_pic

# 此处的.jar文件路径是相对于 dockerfile的路径
ENTRYPOINT ["java","-jar","target/*.jar"]

此时的目录结构:
image.png

4、开始构建

image.png
构建成功,去阿里云私有仓库中刷新,可以看见构建好的镜像
image.png

二、jenkins配置k8s从阿里云拉取镜像并部署

1、jenkins安装k8s插件

Kubernetes plugin
image.png

2、jenkins配置k8s

1、创建k8s凭据文件

检查/etc/kubernetes/admin.conf目录下有没有这个配置文件,有的话,生成kubeconfig.yaml配置文件,保存到本地。没有的话,需要找到自己k8s集群的admin.conf文件在哪里,然后生成配置文件保存下来。

 sudo cat /etc/kubernetes/admin.conf > kubeconfig.yaml

注意修改endpoint为自己的集群ip:192.168.31.247

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1EWXdNakF6TURJd00xb1hEVE16TURVek1EQXpNREl3TTFvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTXFSCitDN2ZBdTd6TWsxekhFZ20vVkRwWlcwQTB4VGlDOHExTVJWaTBuczdpZlE2Z2dhRnRxVzAwLzNVV3hOS3NlNjkKOWFjamR4TENBOVcwSW1iM2NwRjROU2FzMmE2ZzFrRzNUTjZhRHl3NnFQcDBqZmZvK1ZRbGN5N1VUM3l0cG9HbgpiYTlQOG5JalQrM05hZjRpRFVBV2hZdkc3d2JEWHlhcWdUV2JMYjNsazFTd0hWWTNMb2w1c2ZRakM4eTk1eHJOClpScWtsWXhSNjhWOHJOdVhhcUFyK29BMFEyR0k0S1FsRGhhTXN6ZVF1TmRtaHd3Z1BRYkZxWGVrTHlzR251RXYKTkV6WlZtSWxKOG9HcWZ6T2lFWWdxeEdyZG1CUmovK3dSektpTTZ4Q0ZQTU1aWHgxbEFuMnVsYzl1eGNoeENmWQpsVmxkTzMwc1V0T3M4OHFtNjJzQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZOb2wzajNwZlhUaTdtM0JTTlhjYXJQcHBmL21NQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFESVI5V3k3cWplU3ZRLzNZQlV5NTFnenBNVE9paDlvdXJBSGtzcDR2TEJ1cDlSeko5dApPRkFRR21sRWdmQmxBRjgza292Y3JiWWp6eWxMUzRRcGhCcVR1QlFvaHpFbGNWa0M0c2hYWmFLUkVMdFpad2IxCld2eHBSMWI5dWx1RjlJdElleXlRZVdUQjUya01GUHhISEw0VWtkUXFoRFlXc3BzTVdqQWRBeklKSVR1UXRBM1gKcW5GU3lNM3pYRkc5Mm1xTkpuV1d2ZWF1REVpR3BLOEpEM21SdzZzNnJ1S3lmQjN5dW1vRE1yV0t6YlhlbEZNNwovUlVQOHgxdGFsd1ZGYk5QMFZZT0RiMFBUWURIWEpYeUN0azlENzN0OEg4OFROT2VkNHhQSkk5OUtsNmwrcXdQCmpKM0VzMnRHekltSWxTaTdXUktMYVBhZ01ueDgzNlhnOXlwSAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://192.168.31.247:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFekNDQWZ1Z0F3SUJBZ0lJQ1diL0Z5V0NZNzB3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TXpBMk1ESXdNekF5TUROYUZ3MHlOREEyTURFd016QXlNRFJhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXFia2owM2NYQ3I4TmI5dDMKc2loWEp5aUpOdDUyVWxobk1XTytLSVIxS3Nhc1JMRUpIdkkvUDg1SFNFc05Db093YmN1aWNvYWh3SGVXMmx3Zgo4RGZWYkZicGl4SFl6WWVMTGQvM3Z2L2xiMjcxQTlPVkJCeERoU1JKZTg2dmZ1NXpIUllBQ01kaUF4WGFIdnd4CmpvZlRuMzJlcHRuSVI5aThkb3cwUitadktIdXJLMmVhSHpVckpucXJjSW5KU2o1TENkTG1TekZTOXF3bC9FYkcKNEsrYU00czZML2V3MW1JdndodGJUN0xRVUlERlJDM1hYVDdQU1FBR1FKQ1VOaEp1bDUvU2E3UGRGSlcybGNpZgpRKzEyc3Vnd0UrVEdqRDd4SzdjY0FUdUw5S0U2TldNc3pVYjlLYkg5K2ZmeXNHeGJaTm1Eejd0MnJDWlRvTFNsCkR1SkFvUUlEQVFBQm8wZ3dSakFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0h3WURWUjBqQkJnd0ZvQVUyaVhlUGVsOWRPTHViY0ZJMWR4cXMrbWwvK1l3RFFZSktvWklodmNOQVFFTApCUUFEZ2dFQkFGNzF0QUxDMG1XWkhFZzlxV3RZdnU4S0VkNU90a2ZFTWE5a1FDa3lCbDdvWk1lWDdFZ2JZQnlZCmFWUGZtbDJpNTN5MkZvVU5NcHAzSU5NTytNcTZIZWF6bXhtZEozVkFhOW1EWTlDejl3RitUalF1Z0tWWXlCZjAKUFZFV0JmVUMwYnVyT3lBbFhDVlU2REhiUHVFdm1wMU1jWXN1VTNKUXFXa0hzS2xMR3JYL0VnejFmOS9WMXJVawovZ2R0YTVsQ2JCc3BQRW5pN3REYXpSWWpZZGZrY3JQRGc0MGw1T1M1Sk1nOTRkZHBndjI4aEdwcDdaL1pFcUgvCkRUOGNKeVBnNkRHTnhLMHovT05TUlhZSnVoQ3ZoZ1kwdnNCWHplNU9WTTBobks5VzhBblIzUGpkYkZiNTRMVmwKeVBjeHFLQStLdHNyei9RTnFObTQ5cUxlZlBsMDljVT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
    client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBcWJrajAzY1hDcjhOYjl0M3NpaFhKeWlKTnQ1MlVsaG5NV08rS0lSMUtzYXNSTEVKCkh2SS9QODVIU0VzTkNvT3diY3VpY29haHdIZVcybHdmOERmVmJGYnBpeEhZelllTExkLzN2di9sYjI3MUE5T1YKQkJ4RGhTUkplODZ2ZnU1ekhSWUFDTWRpQXhYYUh2d3hqb2ZUbjMyZXB0bklSOWk4ZG93MFIrWnZLSHVySzJlYQpIelVySm5xcmNJbkpTajVMQ2RMbVN6RlM5cXdsL0ViRzRLK2FNNHM2TC9ldzFtSXZ3aHRiVDdMUVVJREZSQzNYClhUN1BTUUFHUUpDVU5oSnVsNS9TYTdQZEZKVzJsY2lmUSsxMnN1Z3dFK1RHakQ3eEs3Y2NBVHVMOUtFNk5XTXMKelViOUtiSDkrZmZ5c0d4YlpObUR6N3QyckNaVG9MU2xEdUpBb1FJREFRQUJBb0lCQUQ0VXZvb0hNYUo0cDgyVwpsWDNSUzYvRElBMjE2Y25ORkZINGpnSDhFVytJSkZNci9vNFhSaE5zdko0dzlhQTI4ejMyRW9HWnhXakZWYVNoCnRmMEVMMGpsc1o5dzg4Q2FKOHFyOWM4amd5VHpqU1BOTE9ESUJkcVpuMWR1RHJ0N05SZ2FpQUN1RGFmYlFtRzcKRmRWdzBYT3hXMnJrbG1IUllYNXJZbVE2WWNhSWZWdmJsZW9ZbkNxT3hKVnZXRXc0ZWFYczUrVzJWVDFBbGZWQwowemxWcW1wUmdvU2xjYTkyRkdWSnBudkpQaFptcXZaWVowVVZaTkQyWmtHUkRIVEgvOVhKbElCTGsrVXAwbzIvCjRyUmdMS0V0Q0RvNUJIclA5WkJUM2NLQWF2dDVhdjg0Zk5PWE8ycE1NeHZ1LzdDeEo2SkwxbGllRXNHREVvY00KT0VQZEdNRUNnWUVBMURwaE1Jd0NGTU8rRVM2YkhCazdQMkJwV05pYmJ3S0ZiU0toTENlb0tLNVBIMWJYSXh2bgpaOXhGU2FQYmpXeUt0ZFU4c2FFc2ZodG9iVUpEUjBxY09GZld4czRNazRCRGhjUTZzSTR0ME5Ta2liZ2ZndDdzClBTazZ5cktnTnZZZzhOMzVIK1NVZmx6YVBKRkhWd0pjbWhtc2I4RVlUMlJZcTNPNFJqdUpZdVVDZ1lFQXpMcUMKT29hekNydWtJcHRBMkRZc0htNXZyeXBwM0dXM0J0K2ViRDdac2wxQXdJVyt0VHRGdW4zWHB1aEpvdFhtUFpsZAp3aHFZbVBXWlptcmFIWHdqUC9ndFo1dHViZ0kyVjdIMS9DbXhkSThYdzlkQUxIRHEwQWRYQytrQThFLy8rNEZUCkhIVDZSUWYzYjZYc1BvK3VXNkpkdWIvb0JPWHJtY3pqRnU3TW53MENnWUFaS1ZyQWdMajJjVWFsanRzQTk5VFkKYkx2UXRzMm0yYXVzQnNFSkZTS1F3Q25OVTJScVd6S1NVOEU3Tzl3WjVsYUR2R1pYd1A0ZmJXeHlGN3NXUnJoQwp6ZGMrOXNyeTZmQVhlZTVqWkZmMlBGL05uRERRT1ZIVTVvQjc2N1duRG9OVlMxdnY5Zy9NODRGRVVRMGVPYjkwCjNicGQvWXkrVE8xZVZuZndpN3A4S1FLQmdGVDlyS2l0V05EQTJ6LytvZW5nZTJwYXdJVEFuOWYrWmdBMWYyaEMKbzArWHhSVG5zU2M5cHhIbndrb3BMc0NwK2Y1aWwvakgzOGZJVmRtZHpGVG5QeDhFWVowY2VyaXl0R3F0bDRnSwpxdi9QazdjYXVpcDQ2aEpZcWJ0cERKbTNMSGIxMWxIL0FoTDhYcTE3L1ZwdmZadlBDUWZlOG14dUl1UGptZmJnClJoUlZBb0dCQUtKRUQzenFXVjJDbnh6bGlscEhFN084TkdJa1I2OFoyS0QvUVhuQ21HVDc4RU14QjNPemNDS1YKNTJEYmxJQ0RDWjlZNkhkVHhSOVhJZTJ0Q3Vjc0tzOWp0WVVuTHRwb1RDNVRMeVVRcXE1NFVSZTRmeUNXOUNVVQozbEdqbHdTZ20weUtMYmZGVTdRK29GL3orRWR1MElPRGJrdE40U3JIckE1MlZlNFJyQTk1Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==

2、jekins创建k8s凭据

image.png
image.png
image.png
选择文件类型,选择生成的配置文件上传,点击创建即可。
image.png

3、新建k8s云节点

image.png
image.png
image.png
连接成功,表示jenkins配置k8s成功。

3、jenkins流水线配置

pipeline {
    agent any
    
    environment {
        DOCKER_REGISTRY = 'registry.cn-hangzhou.aliyuncs.com'
        DOCKER_REPOSITORY = 'doyo_k8s'
        DOCKER_IMAGE = 'doyo_pic'
        DOCKER_TAG = '0.0.1'
        DOCKER_USERNAME = '17610481017'
        DOCKER_PASSWORD = 'wz857741375+'
        KUBECONFIG = credentials('kubernetes_id')
        KUBE_NAMESPACE = 'doyo'
        DEPLOYMENT_NAME = 'doyo_pic'
    }
    
    tools{
        maven "maven3"
    }

    stages {
        stage('拉取代码') {
            steps {
                git credentialsId: '4a502fac-8c7f-4235-93f9-92e1430d28bb', url: 'https://gitee.com/wang_du_yu_n/doyo_pic.git'
                echo '拉取代码完成'
            }

        }
        stage('打包') {
            steps {
                sh "mvn clean package"
                echo '打包完成'
            }

        }
        stage('构建镜像') {
            steps {
                sh "docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} ."
                echo '镜像创建完成'
            }

        }
        stage('推送镜像仓库') {
            steps {
                sh "docker login ${DOCKER_REGISTRY} -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD}"
                sh "docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_REGISTRY}/${DOCKER_REPOSITORY}/${DOCKER_IMAGE}:${DOCKER_TAG}"
                sh "docker push ${DOCKER_REGISTRY}/${DOCKER_REPOSITORY}/${DOCKER_IMAGE}:${DOCKER_TAG}"
                echo '镜像推送完成'
            }

        }
        stage('拉取镜像') {
            steps {
                sh "docker login ${DOCKER_REGISTRY} -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD}"
              	sh "docker pull ${DOCKER_REGISTRY}/${DOCKER_REPOSITORY}/${DOCKER_IMAGE}:${DOCKER_TAG}"
              	echo '镜像拉取完成'
            }

        }
        stage('部署') {
            steps {
                container('kubectl') {
                    withCredentials([file(credentialsId: 'kubernetes_id', variable: 'KUBECONFIG')]) {
                        sh "kubectl --kubeconfig=${KUBECONFIG} --namespace=${KUBE_NAMESPACE} create deployment ${DEPLOYMENT_NAME} --image=${DOCKER_REGISTRY}/${DOCKER_REPOSITORY}/${DOCKER_IMAGE}:${DOCKER_TAG}"
                    }
                }
                echo '部署完成'
            }

        }
    }
    
    post {
        
        always {
            echo "完成"
            
        }
        failure {
            
            echo "失败"
        }
    }
}

4、k8s pod配置(部署失败,解决方法待寻找)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: doyo-pic
  labels:
    app: doyo-pic
spec:
  replicas: 1
  selector:
    matchLabels:
      app: doyo-pic
  template:
    metadata:
      labels:
        app: doyo-pic
    spec:
      containers:
        - name: doyo-pic
          image: your-image-name:tag
          ports:
            - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: your-service-name
spec:
  selector:
    app: your-app-label
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员王多余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值