jenkins-CICD系列之-jenkins使用pipeline流水线k8s发布

简介: jenkins使用pipeline流水线k8s一键发布

jenkins-demo 项目地址   这里最重要的就是 Jenkinsfile 和  jenkins-demo.yaml  文件

  1. 新建好 pipeline之后 , 选择 Pipeline script from SCM  ,这里我们使用在git上的jenkinsfile 文件进行配置
  2. gitee 项目上添加  Jenkinsfile 文件  , 切记这个名字不能改

开始编写 Jenkinsfile 脚本文件

  1. 使用Jenkins自带的流水线语法
  2. 以git拉取代码为例
  3. 直接将生成的流水线脚本文件放到我们自己的Jenkinsfile文件 , 后续的脚本文件都将使用这种方式生成
  4. 构建maven打包 , 使用 maven 命令 ,maven地址使用自己之前配置的
  5. 构建docker镜像
  1. 创建全局凭据 , 不在Jenkisfile中暴露账号密码
  2. 引用凭据 推送到阿里云镜像
steps{
        withCredentials([usernamePassword(credentialsId: 'f1ae8e1e-b082-49de-89fb-a99e514b62bb', passwordVariable: 'password', usernameVariable: 'username')]) {
sh'''docker login -u $username -p $password registry.cn-hangzhou.aliyuncs.com    docker tag jenkins-demo registry.cn-hangzhou.aliyuncs.com/conlon/jenkins-demo-repository:latest    docker push registry.cn-hangzhou.aliyuncs.com/conlon/jenkins-demo-repository:latest'''        }
    }
  1. 将k8s运行需要的yaml文件传送到master

stage('将k8s运行需要的yaml文件传送到master ') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s_node1_141', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'jenkins-demo.yaml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
  1. 运行自己的 jenkins-demo.yaml 文件

steps {
sh'''ssh root@192.168.228.141 kubectl apply -f /usr/local/k8s/jenkins-demo.yaml                    ssh root@192.168.228.141 kubectl rollout restart deployment jenkins-demo -n jenkins-demo-np'''            }

出现的问题

  1. 因为我不是使用的default的命名空间所以我需要创建自己的命名空间
  1. kubectl get namespace
  2. vim jenkins-demo-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:  name: jenkins-demo-np
  1. kubectl apply -f jenkins-demo-namespace.yaml
  1. IngressClass
  1. 在创建 jenkins-demo.yaml 文件中的 ingress的时候 有一个 ingressClassName 的配置 这里是需要我们自己先去k8s上创建这个kind的
  2. 这里的那么就是 name: nginx-example 就是 ingress 配置中的 ingressClassName: nginx-example
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:  labels:    app.kubernetes.io/component: controller
  name: nginx-example
  annotations:    ingressclass.kubernetes.io/is-default-class: "true"spec:  controller: k8s.io/ingress-nginx
  1. 执行  kubectl apply -f jenkins-demo.yaml 命令后
  1. kubectl get pod -n jenkins-demo-np 查看pod的情况 出现如下报错
[root@node1 ~]#  kubectl get pod -n jenkins-demo-npNAME                            READY   STATUS             RESTARTS   AGE
jenkins-demo-858847849d-kgqqj   0/1     ImagePullBackOff   0          77s
# 阿里云的镜像 pull 不下来 ,使用了  docker login  登录还是不行# 这篇文章详细的解释了这个问题  https://www.cnblogs.com/unchch/p/11771005.html
  1. 执行命令创建 secret
kubectl create secret docker-registry aliyun-docker-secret --namespace=jenkins-demo-np \
--docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=dkz13887548339 \
--docker-password=dkz13887548339
  1. 这个时候在去拉取镜像就不会报错了
  1. 需要提前配置 centos无密码登录的操作  
  2. 配置了无密码登录报错
+ssh root@192.168.228.141 kubectl apply -f /usr/local/k8s/jenkins-demo.yaml
Host key verification failed.
# 我已经配置了无密码登录了 ,为啥还报错呢 , 因为在jenkins中执行这个命令的是Jenkins这个用户

# 而我在上面这一步配置的是 root 的用户 所以需要修改jenkins配置

  1. Jenkins 进行如下修改 ,解决后课正常执行 , 自动部署了 参考文章
vim /etc/sysconfig/jenkins
# 修改这个参数 jenkins 为 rootJENKINS_USER="jenkins"JENKINS_USER="root"重启Jenkins
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
jenkins 持续交付
Jenkins Pipeline 参数化构建
Jenkins Pipeline 参数化构建
95 0
|
6天前
|
存储 运维 Kubernetes
Docker+Kubernetes/K8s+Jenkins视频资料【干货分享】
Docker+Kubernetes/K8s+Jenkins视频资料【干货分享】
Docker+Kubernetes/K8s+Jenkins视频资料【干货分享】
|
29天前
|
jenkins 持续交付
Jenkins构建简单流水线
Jenkins构建简单流水线
12 0
|
1月前
|
JavaScript jenkins 持续交付
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
61 0
|
4月前
|
存储 jenkins Shell
Jenkins Pipeline 流水线任务 补充篇
Jenkins Pipeline 流水线任务 补充篇
53 0
|
4月前
|
Java jenkins 持续交付
Jenkins Pipeline 流水线方式部署 SpringBoot 项目2
Jenkins Pipeline 流水线方式部署 SpringBoot 项目
156 0
|
4月前
|
jenkins Java 持续交付
Jenkins Pipeline 流水线方式部署 SpringBoot 项目1
Jenkins Pipeline 流水线方式部署 SpringBoot 项目
208 0
|
6月前
|
jenkins Devops 机器人
【devops】九、Jenkins流水线(下)
【devops】九、Jenkins流水线(下)
|
6月前
|
jenkins Devops 持续交付
【devops】九、Jenkins流水线(上)
【devops】九、Jenkins流水线(上)
114 1
|
6月前
|
Kubernetes jenkins 持续交付
jenkins结合k8s构建流水线如何提升运行性能和构建效率
jenkins结合k8s构建流水线如何提升运行性能和构建效率