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
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
jenkins 持续交付 开发工具
jenkins学习笔记之一:流水线基础语法
jenkins学习笔记之一:流水线基础语法
|
Kubernetes jenkins 持续交付
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
1159 0
|
Kubernetes jenkins 持续交付
在K8S中,Jenkins如何集成K8S集群?
在K8S中,Jenkins如何集成K8S集群?
|
Kubernetes jenkins 持续交付
Jenkins 与 Kubernetes 的集成:实现高效的资源管理和自动化部署
【8月更文第31天】随着微服务架构的普及,Kubernetes 已经成为了容器编排的事实标准。Kubernetes 提供了一种强大的方式来管理容器化的应用程序,而 Jenkins 则是持续集成与持续部署(CI/CD)领域的一个重要工具。将 Jenkins 与 Kubernetes 集成,不仅可以充分利用 Kubernetes 的资源管理能力,还能通过 Jenkins 实现自动化构建、测试和部署,从而提高开发效率和部署速度。本文将详细介绍如何将 Jenkins 集成到 Kubernetes 环境中,并提供具体的代码示例。
1269 0
|
前端开发 jenkins 持续交付
jenkins学习笔记之二十:docker in docker运行pipeline
jenkins学习笔记之二十:docker in docker运行pipeline
|
jenkins Devops Java
jenkins学习笔记之十:配置Gitlab提交流水线
jenkins学习笔记之十:配置Gitlab提交流水线
|
存储 Kubernetes jenkins
在k8S中,Jenkins发布详细流程是什么?
在k8S中,Jenkins发布详细流程是什么?
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
350 2
|
9月前
|
监控 jenkins Shell
jenkins结合gitlab实现CI(持续集成)
通过本文的介绍,我们详细了解了如何结合Jenkins和GitLab实现持续集成。从环境准备、插件配置到Pipeline任务创建和CI流程监控,每一步都提供了详细的操作步骤和示例代码。希望本文能帮助开发者快速搭建起高效的CI系统,提高项目开发效率和代码质量。
833 9
|
10月前
|
Java jenkins 持续交付
Jenkins集成Maven
通过以上步骤,可以在Jenkins中成功集成Maven,实现自动化构建和部署。通过定时构建、SCM轮询等方式,可以确保代码库中的最新变更能够及时构建和测试,提高开发效率和代码质量。这种集成方式在实际项目中具有广泛的应用前景,能够显著提升团队的协作效率。
282 8

热门文章

最新文章

推荐镜像

更多
下一篇
oss云网关配置