《玩转Jenkins系列》之集成K8S

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 本文介绍了如何在Jenkins里面集成K8S进行对Node节点的动态管理

《玩转Jenkins系列》之集成K8S

前言*序

今天这篇Topic主要讲一下如何在Jenkins里面与K8S进行深度融合。目标只有一个:

动态创建编译机,提升编译集群资源利用效率

配置篇

系统管理菜单下面如下图

20181227105431.png | center | 747x408

说明:

  • 名称可以随意取。这个为后续的时候用到
  • Jenkins地址,请填写Jenkins服务器访问地址
  • 配置完了之后点连接测试,如果提示"Connection test successful"说明连接到集群上了

上面K8S的地址什么的都没有配置为什么就连接成功了?好奇的看官肯定会有疑问了。
『The URL of the Kubernetes API server. If not set the connection options will be autoconfigured from service account or kube config file.』 在这里我们用了kube配置文件来完成这个事情的。
登录Jenkins服务所在的容器内将APIserver的连接配置kube/config配置文件放到~/.kube/config。这样它就会自动去完成连接了。

使用篇

现在连接上了K8S了那我们先创建一个非常简单的流水线,里面就输出一条:"hello jenkins and k8s"
a)先创建一条流水线的任务

20181227110339.png | center | 747x268

b) 我们选择用Jenkinsfile的方式

20181227110555.png | center | 747x352

c) 编写Jenkinfiles文件

pipeline {
  agent {
    kubernetes {
      label 'mypodx'
      cloud 'yaofang_k8s_test'
      yamlFile 'mpod.yaml'
    }
  }
  stages {
    stage('git clone') {
        steps {
                git credentialsId: '3b1cd500-c1a2-4bd6-84f0-237b0c879fbf', url: '${url}'
        }
    }

    stage('hold') {
        agent none
        steps {
                input "Does the staging environment look ok?"
         }
    }

    stage('Run containers shell') {
      steps {
        sh '/root/bin/git.sh ${url}'
      }
    }

  }
}

说明:

  • cloud 表示我们在上面配置的名称进行关联
  • yamlFile 表示通过yaml来创建Pod
    以下是创建Pod的描述文件:
metadata:
  labels:
    some-label: some-label-value
spec:
  volumes:
  - hostPath:
      path: /data/mvn_cache
      type: ""
    name: mvn-cache
  containers:
  - name: jnlp
    alwaysPullImage: true
    volumeMounts:
    - mountPath: /root/repository
      name: mvn-cache
    image: registry.cn-shanghai.aliyuncs.com/cpaas/build_dockerfile:v5
    env:
    - name: CONTAINER_ENV_VAR
      value: jnlp

说明:

  • 通过volumes可以将宿主机的目录挂载到容器内,实现对maven编译场景下的加速
  • images这个镜像是我们自定义镜像,可以用于构建自己想的编译运行环境.

d) 运行流水线
先看下K8S上面的POD变化

20181227111651.png | center | 747x178

可以看到出来了一个POD。

再来看下流水线控制台的输出

20191230123657.png | center | 747x707

最佳实践

基于镜像的实践,可以针对编译机的镜像做更多的扩展。比如可以集成docker工具/OSS工具等。另外针对maven编译机的加速问题也可以进一步优化,可以将.m2下面的文件放到宿主机上去,这样可以提升编译速度。

最佳实践之解决git权限方案

如果我们直接在镜像中运行一个shell脚本的话,我们会发现git clone代码的时候会报权限不足。解决办法

  1. 将宿主机的/root/.ssh/目录挂载到Pod的容器里面即共享公钥文件
  2. 将宿主机的公钥配置到GIT仓库
    类似的启动如下:
docker run -itd  -v /root/.ssh/:/root/.ssh/ -v /tmp/build_maven/:/root/repository/

问题交流群

如果大家在实际应用过程中遇到什么问题,也可以加钉钉群:23145481进行交流。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
9天前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
30 0
|
9天前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
34 0
|
2月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
57 1
|
1月前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
安装Git、配置用户信息、生成SSH密钥以及在Gitee上创建项目仓库等。
63 0
|
2月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
54 0
|
2月前
|
Kubernetes jenkins 持续交付
Jenkins 与 Kubernetes 的集成:实现高效的资源管理和自动化部署
【8月更文第31天】随着微服务架构的普及,Kubernetes 已经成为了容器编排的事实标准。Kubernetes 提供了一种强大的方式来管理容器化的应用程序,而 Jenkins 则是持续集成与持续部署(CI/CD)领域的一个重要工具。将 Jenkins 与 Kubernetes 集成,不仅可以充分利用 Kubernetes 的资源管理能力,还能通过 Jenkins 实现自动化构建、测试和部署,从而提高开发效率和部署速度。本文将详细介绍如何将 Jenkins 集成到 Kubernetes 环境中,并提供具体的代码示例。
186 0
|
2月前
|
jenkins 持续交付 开发工具
Jenkins 与 Docker 集成的最佳实践
【8月更文第31天】随着容器技术的兴起,越来越多的团队开始采用 Docker 来构建和部署应用。Docker 提供了一种轻量级的虚拟化方法,使得应用可以在任何地方以相同的方式运行,这极大地提高了开发效率和部署的一致性。与此同时,Jenkins 作为一种广泛使用的持续集成/持续交付(CI/CD)工具,可以帮助团队自动化构建、测试和部署流程。本文将探讨如何将 Docker 与 Jenkins 集成,以简化开发环境的搭建和维护。
223 0
|
2月前
|
jenkins Java 测试技术
Jenkins 在持续集成/持续交付(CI/CD)管道中的应用
【8月更文第31天】 在现代软件开发过程中,持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)已经成为提升开发效率和软件质量的重要实践。Jenkins 是一个广泛使用的开源工具,它能够帮助团队实现自动化构建、测试和部署,是 CI/CD 流水线的核心组件之一。本文将详细介绍 Jenkins 在 CI/CD 管道中的应用,并提供具体的代码示例。
87 0
|
2月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
2月前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
【8月更文挑战第30天】在Jenkins服务器中,git和Gitee是常用的代码拉取终端。Git作为分布式版本控制系统,具备出色的灵活性和可扩展性;而Gitee则在国内网络环境下表现更佳,适合团队协作。Git配置包括安装、设置用户信息及生成SSH密钥等步骤;Gitee配置也类似,需注册账号、创建仓库、配置基本信息并设置远程仓库地址。开发人员提交代码后,可通过Webhook、定时轮询或事件监听等方式触发Jenkins动作,确保持续集成和部署高效运行。正确配置这些触发机制并通过测试验证其有效性至关重要。
58 2