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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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搭建和管理企业级网站应用
相关文章
|
23天前
|
jenkins 持续交付 开发工具
jenkins学习笔记之一:流水线基础语法
jenkins学习笔记之一:流水线基础语法
|
28天前
|
Kubernetes jenkins 持续交付
在K8S中,Jenkins如何集成K8S集群?
在K8S中,Jenkins如何集成K8S集群?
|
21天前
|
Kubernetes jenkins 持续交付
Jenkins 与 Kubernetes 的集成:实现高效的资源管理和自动化部署
【8月更文第31天】随着微服务架构的普及,Kubernetes 已经成为了容器编排的事实标准。Kubernetes 提供了一种强大的方式来管理容器化的应用程序,而 Jenkins 则是持续集成与持续部署(CI/CD)领域的一个重要工具。将 Jenkins 与 Kubernetes 集成,不仅可以充分利用 Kubernetes 的资源管理能力,还能通过 Jenkins 实现自动化构建、测试和部署,从而提高开发效率和部署速度。本文将详细介绍如何将 Jenkins 集成到 Kubernetes 环境中,并提供具体的代码示例。
55 0
|
23天前
|
Kubernetes jenkins 持续交付
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
|
23天前
|
前端开发 jenkins 持续交付
jenkins学习笔记之二十:docker in docker运行pipeline
jenkins学习笔记之二十:docker in docker运行pipeline
|
23天前
|
jenkins Devops Java
jenkins学习笔记之十:配置Gitlab提交流水线
jenkins学习笔记之十:配置Gitlab提交流水线
|
1月前
|
存储 Kubernetes jenkins
在k8S中,Jenkins发布详细流程是什么?
在k8S中,Jenkins发布详细流程是什么?
|
21天前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
20天前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
39 1
|
22天前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
【8月更文挑战第30天】在Jenkins服务器中,git和Gitee是常用的代码拉取终端。Git作为分布式版本控制系统,具备出色的灵活性和可扩展性;而Gitee则在国内网络环境下表现更佳,适合团队协作。Git配置包括安装、设置用户信息及生成SSH密钥等步骤;Gitee配置也类似,需注册账号、创建仓库、配置基本信息并设置远程仓库地址。开发人员提交代码后,可通过Webhook、定时轮询或事件监听等方式触发Jenkins动作,确保持续集成和部署高效运行。正确配置这些触发机制并通过测试验证其有效性至关重要。
44 2