DevOps实践-Jenkins的环境管理讨论

简介: 在经过公司内部自研持续交付环境,再到使用很长时间的Jenkins之后。

DevOps实践系列文章,请参见连接。

背景

在经过公司内部自研持续交付环境,再到使用很长时间的Jenkins之后。对于持续交付工具的一些特点有一定认识。在为软件开发流程设计持续交付过程中需要考虑到很多方面的内容。一般通用的持续集成系统中都会设计到以下几个部分:

  1. 环境管理。在持续集成环境中包括很多类型的环境。例如:持续交付运行环境,编译环境,存储环境,发布环境,被测环境,测试环境等等。之前在通信行业进行持续交付环境构建时,考虑到硬件资源以及硬件型号的问题对于不同的硬件型号需要运行不同的构建与测试过程。
  2. Pipeline流程。为持续交付提供流程、步骤的支持,可以使用原子操作、组合操作进行组合形成一套Pipeline流程。最终满足持续交付的过程需要。
  3. 原子操作。针对通信行业中的交付过程,可能涉及到不同的网元。对于网元间版本控制与接口对接的以及测试要求需要考虑。所以,原子操作可以拆成对网元的操作。对于互联网应用中的微服务体系的操作,可以定义一套编译,构建,发布是原子操作。每个微服务都是由这些原子操作的过程组成,然后这些微服务的统一管理的pipeline又可以是一个更上层的流程。
  4. 结果展示。各项结果都需要有好的展示出来。代码扫描结果,编译结果,流程结果,原子操作结果等等都是需要展示出来的。

综上,要构建一套持续交付环境需要对各个层级有比较清晰的认识之后再做环境构建时是比较好的。本篇文章着重讨论环境管理部分的内容。

环境管理发展

环境管理发展描述从比较单一的持续构建环境一路发展为环境即代码环境管理方式。这个过程从某个侧面可以认为是IT业界对环境管理过程的认知升级的过程。一步步的从手动管理环境到自动化调度、控制环境的过程。

  • 1. 直接使用Jenkins服务器做为构建环境

在刚开始接触Jenkins时,一般都会使用Jenkins Server作为我们所有动作执行的地方。在Jenkins Server上执行代码Checkout,编译,依赖管理,制品管理。慢慢的随着要处理的微服务个数,要存储的制品、要做的频率不断的提升会逐渐的觉得只使用Jenkins Server完成这些工作比较吃力。想办法逐渐的把各项工作分散到不同的机器上完成。可能通过ssh,ansible,chef等工具完成。

  • 2. 使用Jenkins的Node管理作为构建环境

在用ssh一段时间之后,发现ssh的服务器只能通过代码进行管理。在同时执行一个Job的时候回发生环境冲突的问题。ssh不能进行环境调度的工作,只能将Job和主机绑定。从这个时候开始借助Jenkins Agent来进行辅助服务器的管理工作。使用Jenkins Agent可以对服务器进行包活,任务调度的管理。

  • 3. 使用Docker作为Node进行环境管理

在经过对Job的调度工作时候,慢慢的发现每个Agent都是一个持续交付的环境。每个Agent上跑着所有的任务,任务都在Agent上存储一部分Job数据。Job间可能会造成排队与存储干扰的问题。在持续交付环境管理中已经投入了机器的情况下,还是会遇到一些环境的一些问题。就需要考虑怎样处理这些问题。正好Docker第一个功能就是做环境隔离的工作。用Docker将不同的环境隔离出来,例如:专门做Node编译的,专门做Java编译的,专门做C#编译的,专门做发布的。都可以独立的隔离出来,这样可以按照持续交付的步骤进行环境的隔离,解决排队和干扰的问题。

  • 4. 使用一次性Docker容器作为Node的环境管理

慢慢的固定的Docker容器去做工作,会发现Docker很多时候都是空闲的。所以,就想怎样提高资源的利用率。开始使用一次性Docker解决问题,最终可以做到随建随走,随用随走。

  • 5. 使用环境即代码的方式管理环境

在Docker的仓库,Docker与物理机之间的关系等在发展到一定阶段之后也是需要进行大量的管理的。这个时候Docker的调度,Docker的恢复,Docker的监控,Docker的镜像等都需要进行管理。在这个使用控制环境如果还是使用某种二进制包+说明文档的方式进行管理就不能很好的完成工作了。这个时候就明显的需要对环境进行版本化管理,对环境进行版本化管理可以很快的复制一套相同的环境做其他用途。

实现方式

从上面的环境管理发展可以总结出环境管理的几个要点任务:

  • 环境包活
  • 任务调度
  • 环境隔离
  • 资源利用率
  • 环境管理版本化

针对每一个发展阶段都有它自己的技术特点。每个阶段的技术主要内容有:

  1. Jenksin、Gitlab、TeamCity、Travis CI
  2. Agent
  3. Docker
  4. Swarm,K8s,ansible

这里给出来一个Jenkins上使用一次性Docker的一个例子:

  1. 环境构建

Jenkins环境

  1. 配置Pipeline
pipeline {
    agent {
        docker {
            image 'maven:3.3.3'
            args  '-v /tmp:/tmp -v $HOME/.m2:/root/.m2 -v /opt/docker/ci/pmd/p3c:/opt/p3c -v p3c_result:/opt/result'
        }
    }
    options {
        timeout(time: 1, unit: 'HOURS')
    }
    stages {
        stage("init workspace") {
            steps {
                cleanWs()
            }
        }
        stage("checkout code"){
            steps {
                echo "checkout code"
                checkout([$class: 'GitSCM', branches: [[name: '*/dev']], doGenerateSubmoduleConfigurations: false, 
                    extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'wales_kuo', url: git_url]]])
            }
        }
        stage("scan code"){
            steps {
                echo "scan code"
                sh '''
                export p3c_jar_path="/opt/p3c/p3c-pmd-2.0.0.jar:/opt/p3c/lib/antlr4-runtime-4.7.jar:/opt/p3c/lib/asm-7.1.jar:/opt/p3c/lib/commons-io-2.6.jar"
                export p3c_jar_path=$p3c_jar_path:"/opt/p3c/lib/commons-lang3-3.8.1.jar:/opt/p3c/lib/gson-2.8.5.jar:/opt/p3c/lib/javacc-5.0.jar"
                export p3c_jar_path=$p3c_jar_path:"/opt/p3c/lib/javax.annotation-api-1.3.2.jar:/opt/p3c/lib/jcommander-1.72.jar:/opt/p3c/lib/pmd-core-6.15.0.jar:"
                export p3c_jar_path=$p3c_jar_path:"/opt/p3c/lib/pmd-java-6.15.0.jar:/opt/p3c/lib/pmd-vm-6.15.0.jar:/opt/p3c/lib/saxon-9.1.0.8.jar"
                
                export p3c_rulesets="rulesets/java/ali-comment.xml,rulesets/java/ali-concurrent.xml,rulesets/java/ali-constant.xml,rulesets/java/ali-exception.xml"
                export p3c_rulesets=$p3c_rulesets,"rulesets/java/ali-flowcontrol.xml,rulesets/java/ali-naming.xml,rulesets/java/ali-oop.xml,rulesets/java/ali-orm.xml"
                export p3c_rulesets=$p3c_rulesets,"rulesets/java/ali-other.xml,rulesets/java/ali-set.xml,rulesets/vm/ali-other.xml"

                export CWD=$(pwd)
                export result_path=/opt/result/'''+BUILD_NUMBER+'''
                mkdir -p $result_path
                java -cp "$p3c_jar_path" net.sourceforge.pmd.PMD -R $p3c_rulesets -d $CWD -f yahtml -P outputDir=$result_path | exit 0'''
            }
        }
        stage("run test"){
            steps {
                echo "run test"
            }
        }
        stage("build service"){
            steps {
                echo "build"
                // sh 'mvn clean package'
            }
        }
        stage("publish service"){
            steps {
                echo "public"
                
            }
        }
    }
}
  1. 完成。

参考:

持续交付
持续交付2.0
DevOps实践指南

目录
相关文章
|
1月前
|
运维 安全 Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在数字化转型的浪潮中,企业对于IT基础设施的要求越来越高,不仅需要快速响应市场变化,还要确保系统的稳定与安全。本文深入探讨了如何通过融合DevOps文化和容器化技术来构建一个高效、稳定且易于管理的云基础设施。通过实际案例分析,阐述了持续集成/持续部署(CI/CD)流程的优化、自动化测试、监控以及日志管理等关键环节的实施策略,旨在为运维专业人员提供一套切实可行的解决方案。
31 3
|
1月前
|
运维 Kubernetes Devops
构建高效可靠的云基础设施:DevOps与容器化技术融合实践
【2月更文挑战第30天】 在当今快速迭代和竞争激烈的软件开发领域,传统的IT运维模式已难以满足业务发展的需要。本文将探讨如何通过整合DevOps文化和容器化技术,构建一个既高效又可靠的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作流的影响,接着深入讨论了容器化技术的优势和挑战,并提出了一套结合两者的实施方案。最后,通过案例分析展示了该方案在实际环境中的应用效果和潜在益处。
|
4月前
|
存储 jenkins 持续交付
Jenkins 构建环境指南
Delete workspace before build starts(常用) 在每次构建开始前清空工作空间。这确保了每次构建开始时都是在一个干净的环境下进行,避免了旧的文件或数据对新构建的影响。特别是对于需要频繁构建的项目,保持工作空间的干净能够确保构建过程的可靠性。 Use secret text(s) or file(s) (常用) 允许你在构建过程中使用加密的文本或文件作为凭证。这对于需要访问受保护资源的构建任务非常有用,可以安全地存储和使用密码、API 密钥等敏感信息,而不用担心泄漏。
128 2
|
13天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
15天前
|
运维 Devops 持续交付
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第13天】 在当今快速迭代和持续部署的软件开发环境中,传统的IT运维模式已难以满足业务发展的需求。本文聚焦于如何通过融合DevOps理念与容器化技术,构建一个高效、稳定且易于管理的云基础设施。文章将探讨持续集成/持续交付(CI/CD)流程的优化、容器化技术的最佳实践、以及微服务架构下的应用管理,以期为企业提供一种改进运维效率、加速产品上市时间,同时保障系统稳定性的解决方案。
|
23天前
|
jenkins 测试技术 持续交付
软件测试|docker搭建Jenkins+Python+allure自动化测试环境
通过以上步骤,你可以在Docker中搭建起Jenkins自动化测试环境,实现Python测试的自动化执行和Allure报告生成。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
45 6
|
30天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
随着企业数字化转型的不断深入,传统的IT运维模式已经难以满足快速迭代和持续交付的需求。本文将探讨如何通过结合DevOps文化与容器化技术,构建一个既高效又稳定的云基础设施。文章首先概述了DevOps的核心理念及其在现代运维中的重要性,然后详细介绍了容器化技术,特别是Docker和Kubernetes在实现微服务架构中的应用。最后,文中通过案例分析展示了这一融合实践如何在真实环境中提升运维效率和系统稳定性。
21 7
|
1月前
|
运维 Kubernetes 监控
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在当今云计算时代,企业追求敏捷性、可扩展性以及成本效益的云基础设施。本文将探讨如何通过DevOps文化与容器化技术的融合,打造一个既高效又稳定的运维环境。文章不仅阐述了DevOps和容器化技术各自的优势,还提供了一个具体的实施案例,展示了这种结合如何优化资源利用、提高部署速度并降低运维复杂性。
|
3月前
|
运维 监控 Devops
构建协同创新的未来:DevOps文化与实践
在当今快节奏的技术世界中,DevOps文化和实践成为了企业实现卓越软件交付和持续创新的关键。本文将探讨DevOps的核心原则、实施步骤以及它如何促进团队协作、提高效率,并引领着未来协同创新的道路。
28 2
|
3月前
|
存储 jenkins 持续交付
百度搜索:蓝易云【Docker+Rancher+Harbor+GitLab+Jenkins搭建CI/CD环境】
请注意,上述步骤仅为一个示例,实际搭建过程可能因环境和需求的不同而有所变化。因此,在实际操作中,请参考相应工具的官方文档和指南,以确保正确地配置和集成这些工具。
61 3