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搭建和管理企业级网站应用
相关文章
|
21小时前
|
存储 Kubernetes jenkins
在k8S中,Jenkins发布详细流程是什么?
在k8S中,Jenkins发布详细流程是什么?
|
6天前
|
jenkins 持续交付 网络安全
Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
13 0
|
6天前
|
jenkins 持续交付 Windows
Jenkins Pipeline 多分支流水线 Input length = 1
Jenkins Pipeline 多分支流水线 Input length = 1
5 0
|
6天前
|
运维 jenkins Devops
Jenkins 多分支流水线(SVN)
Jenkins 多分支流水线(SVN)
12 0
|
6天前
|
jenkins 持续交付
Jenkins Pipeline 流水线 - Parameters 参数化构建
Jenkins Pipeline 流水线 - Parameters 参数化构建
6 0
|
6天前
|
jenkins 持续交付 网络安全
Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本
Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本
8 0
|
1天前
|
运维 Java Devops
阿里云云效操作报错合集之在流水线增加单元测试报错,是什么导致的
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
1天前
|
缓存 运维 前端开发
阿里云云效操作报错合集之如何解决在使用流水线构建net8应用时遇到无法构建的报错
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
1天前
|
运维 安全 Java
阿里云云效操作报错合集之遇到流水线报错,该如何排查
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
1月前
|
运维 Kubernetes Java
阿里云云效操作报错合集之npm包已经发布到了制品仓库,但流水线中拉取依赖时出现404错误,该如何排查
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
阿里云云效操作报错合集之npm包已经发布到了制品仓库,但流水线中拉取依赖时出现404错误,该如何排查

热门文章

最新文章