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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
jenkins 持续交付 开发工具
jenkins学习笔记之一:流水线基础语法
jenkins学习笔记之一:流水线基础语法
|
3月前
|
Kubernetes jenkins 持续交付
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
|
3月前
|
Kubernetes jenkins 持续交付
在K8S中,Jenkins如何集成K8S集群?
在K8S中,Jenkins如何集成K8S集群?
|
3月前
|
Kubernetes jenkins 持续交付
Jenkins 与 Kubernetes 的集成:实现高效的资源管理和自动化部署
【8月更文第31天】随着微服务架构的普及,Kubernetes 已经成为了容器编排的事实标准。Kubernetes 提供了一种强大的方式来管理容器化的应用程序,而 Jenkins 则是持续集成与持续部署(CI/CD)领域的一个重要工具。将 Jenkins 与 Kubernetes 集成,不仅可以充分利用 Kubernetes 的资源管理能力,还能通过 Jenkins 实现自动化构建、测试和部署,从而提高开发效率和部署速度。本文将详细介绍如何将 Jenkins 集成到 Kubernetes 环境中,并提供具体的代码示例。
416 0
|
3月前
|
前端开发 jenkins 持续交付
jenkins学习笔记之二十:docker in docker运行pipeline
jenkins学习笔记之二十:docker in docker运行pipeline
|
3月前
|
jenkins Devops Java
jenkins学习笔记之十:配置Gitlab提交流水线
jenkins学习笔记之十:配置Gitlab提交流水线
|
3月前
|
存储 Kubernetes jenkins
在k8S中,Jenkins发布详细流程是什么?
在k8S中,Jenkins发布详细流程是什么?
|
3月前
|
jenkins 持续交付 网络安全
Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
121 0
|
3月前
|
jenkins 持续交付 Windows
Jenkins Pipeline 多分支流水线 Input length = 1
Jenkins Pipeline 多分支流水线 Input length = 1
37 0
|
3月前
|
运维 jenkins Devops
Jenkins 多分支流水线(SVN)
Jenkins 多分支流水线(SVN)
76 0
下一篇
无影云桌面