• jenkins


    jenkins
            是一个持续集成、自动测试、持续部署的超级引擎,支持自定义工具集、多种交付通道

    安装部署jenkins

    jenkins与java对应版本要求

    此次所用系统版本:

    1. root@localhost ~]# cat /etc/redhat-release
    2. CentOS Linux release 7.9.2009 (Core)

    安装java

    java下载地址:https://www.oracle.com/java/technologies/downloads/

    1. #卸载自带java
    2. yum -y remove java
    3. rm -rf /usr/bin/java
    4. #安装java
    5. wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm
    6. rpm -ivh jdk-21_linux-x64_bin.rpm
    7. java -version

    安装git:https://mp.csdn.net/mp_blog/creation/editor/138207360 

    jenkins三种部署方法

    jenkins官方下载地址:https://www.jenkins.io/download/

    jenkins的rpm包镜像源地址:https://mirrors.jenkins-ci.org/

    1.jenkins的rpm包部署
    1. wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
    2. rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
    3. yum install fontconfig
    4. yum -y install jenkins
    5. vim /usr/lib/systemd/system/jenkins.service #修改Jenkins配置文件运行用户为root
    6. User=root
    7. Group=root
    8. systemctl daemon-reload
    9. systemctl enable jenkins
    10. service jenkins start

    默认端口:8080 

    相关目录:

            /var/lib/jenkins #主目录

            /var/lib/jenkins//workspace/job_NAME   #构建工程目录

            /usr/lib/systemd/system/jenkins.service #配置文件

                    User=jenkins #设置启动用户

                    Group=jenkins  #设置启动用户组

                    #设置启动java容器配置

                    JAVA_OPTS="-XX:MaxPermSize=512m -Djava.awt.headless=true" 

                    JENKINS_PORT="8000"  #设置端口

            /usr/bin/jenkins #启动文件

            /var/cache/Jenkins #程序文件

            /usr/share/java/jenkins.war  #jenkins的war包

    2. jenkins的war包部署

    所有版本war包下载地址:https://updates.jenkins-ci.org/download/war/

     (此时数据存放在当前目录的.jenkins隐藏文件)

    1. wget https://get.jenkins.io/war-stable/2.452.2/jenkins.war
    2. yum install fontconfig
    3. nohup java -jar jenkins.war --httpPort=10000 > jenkins.log 2>&1 &

    启动参数:

            --httpPort=8080  #设置监听端口,默认为8080

            -DJENKINS_HOME=/path/to/your/jenkins_home  #默认情况下,Jenkins会将其数据存储在用户主目录下的.jenkins文件夹中。但你可以通过-DJENKINS_HOME参数指定一个不同的目录。

            -Xms512m -Xmx1024m  #设置JVM的堆内存大小

            --prefix=jenkins #指定 Jenkins 的 URL 路径前缀如本示例的url:http://yourserver.com/jenkins/

    3.tomcat部署

    jenkins的基础用法

    jenkins系统全局设置

    设置中文

    1. 安装插件:Localization: Chinese (Simplified) 、 Locale

    2. jenkins界面设置

    用户账号密码设置

    创建与其他服务器或代码仓库等相关的认证信息

    1.安装Git plugin插件

    2.创建保存相关信息,例如代码仓库的密钥:jenkins上配置私钥,gitlab配置公钥

    插件管理

    插件下载地址: https://updates.jenkins-ci.org/download/plugins/

    两种安装方法:

    1. 手动导入插件,可从官网下载插件包解压移动或覆盖到插件目录
           mv plugins /var/lib/jenkins/
           chown -R jenkins.jenkins plugins/
           service jenkins restart
    2. web图形界面的插件管理界面上联网安装或上传插件

    常用插件:

            git parameter #可以选择tag发布

            subversion plugin  #SVN项目 项目时使用

            ssh plugin #远程管理

            LDAP plugin #接入统一身份认证系统接口

            

    jenkins 升级版本

    1. rpm -ql jenkins 找到jenkins的war包
    2. 备份后替换为挂网下载的war包
    3.重启jenkins

    备份jenkins

    因为jenkins的所有数据都保存在目录/var/lib/jenkins/下,所以可以直接备份目录

    tar -zxvf jenknis.tar.gz /var/lib/jenkins/

    maven        

    作用:
            作为Apache的开源项目,是一个项目管理和综合工具。Maven提供给开发人员构建一个完整的生命周期框架。
            开发团队可以自动完成该项目的基础设施建设,Maven使用标准的目录结构和默认构建生命周期。
            主要服务于JAVA平台的构建、依赖管理、项目管理。

    POM

            POM(Project Object Model):项目对象模型,通过xml格式保存的pom.xml文件。

            作用: 类似ant的build.xml文件功能更强大,该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等

    安装:

            下载地址:https://archive.apache.org/dist/maven/maven-3/        

    1. wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
    2. tar -xvf apache-maven-3.5.4-bin.tar.gz
    3. echo 'export PATH=$PATH:/root/apache-maven-3.5.4/bin' >>/etc/profile
    4. source /etc/profile
    5. mvn -v

    配置文件:

            /root/apache-maven-3.5.4/conf/settings.xml 

    MAVEN命令:

            1. 创建Maven的普通java项目:
              mvn archetype:create 
                 -DgroupId=packageName 
                 -DartifactId=projectName  
            2. 创建Maven的Web项目:
                mvn archetype:create
                 -DgroupId=packageName    
                 -DartifactId=webappName 
                 -DarchetypeArtifactId=maven-archetype-webapp
            3. 清除后再编译
                mvn clean install

    jenkins的计划任务

    在构建任务重配置定时构建时间

    按角色授权

    1. 安装 Role-based Authorization Strategy 插件
    2. 设置授权策略为:Role-Based Strategy    

    3.1创建全局角色

    3.2也可以创建匹配项目权限的项目角色

            注意pattern的项目名字匹配模式是xxx.*(正则表达式)

    4.最后管理用户和角色

    jenkins主从配置 

    1. 主从服务器都安装上jenkins配置好时间同步

    2.添加从节点

     

    3.查看配置成功后的显示节点状态

    4.创建任务并绑定运行节点

    URL调用jenkinsAPI

    1.获取jenkins服务器上所有jobs列表

            用法:

                    curl -u 用户名:密码 'http://JENKINS_URL/api/json?pretty=true'

            示例:

                    curl -u root:123456 'http://192.168.0.11:8080/api/json?pretty=true'

     2.构建一个指定的job

            第一步:配置job的身份验证令牌

                    

           第二步:通过curl命令调用jenkinsAPI

                    用法:

                            curl -u 用户名:密码 'JENKINS_URL/job/test/build?token=TOKEN_NAME'

                    示例:

                            curl  -u root:123456 'http://192.168.0.11:8080/job/test/build?token=1111111'

    jenkins视图的创建

    1.

    2.

    3.配置视图,可以根据任务进行选择,也可以使用正则表达式 

    4.最终效果

    jenkins文件夹的创建

    jenkins文件夹是一个可以嵌套存储的容器,可以用它进行分组

    1.创建文件夹

    2.在文件夹下可以创建多个job

    3.最终结果

    丢弃的构建

    设置job的构建包和记录保留时间

    jenkins三种常见构建类型

    Jenkins中自动构建项目的类型有很多,常用的有以下三种:

    • 自由风格项目(FreeStyle Project)
    • Maven项目(Maven Project)
    • 流水线项目(Pipeline Project)

    其实每种构建类型都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别。使用哪种构建类型可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度高)

    1、自由风格项目类型

    1、创建项目
    • Jenkins --> New Item

    2、拉取源代码

    3、构建
    • Build(构建) --> Add build step(添加构建步骤) --> Executor Shell
      • 执行shell命令

    • 执行两次的结果

    1

    2

    3

    4

    5

    6

    7

    8

    9

    ]# ls -l /data/jenkins/workspace/test-project-free

    total 12

    -rw-r--r-- 1 jenkins jenkins 39 Aug 31 03:02 free01.txt

    -rw-r--r-- 1 jenkins jenkins 14 Aug 31 02:55 project01-rel.txt

    -rw-r--r-- 1 jenkins jenkins 19 Aug 31 02:55 README.md

    ]# cat /data/jenkins/workspace/test-project-free/free01.txt

    2023-08-31 03:02:00    部署中......

    2023-08-31 03:02:33    部署中......

    2、Maven项目类型

    2、创建项目
    • Jenkins --> New Item

    3、拉取源代码

    4、构建
    • 拉取代码和远程部署的过程和自由风格项目一样,只是“构建”部分不同。

    3、流水线项目类型

    1、安装Pipeline插件
    2、创建项目
    • Jenkins --> New Item

    3、简单的pipeline语法

    jenkins的参数化构建

    参数类型

    jenkins的参数类型有多种,也可以根据插件增加类型,如下图

    参数的引用

    1. 根据所配置的参数类型,每个参数都有一个Name和Value。当构建开始时,这些信息被导出为环境变量,从而允许构建配置的后续部分访问这些值。

    2. 注意:不同的操作环境变量引用方式不同

            Shell --  $dstversion
            Windows --   %dstversion%
            Git源码管理--  ${dstversion}

    配置参数

    • 选项参数

    1.pipeline语法配置:

            parameters { choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '') }

    2.web界面配置

    最终效果 

    git参数 

    web界面配置:

    • 最终效果

    • 字符参数 

    1.pipeline语法配置:

            parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }

     2.web界面配置:

    最终效果 

    • 文本参数

    1.pipeline语法配置:

            parameters { text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '') 

    2.web界面配置:

    最终效果:

    • 布尔参数

    1.pipeline语法配置:

            parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }

    2.web界面配置:

    最终效果 

    • 凭据参数

    注意:不会直接公开凭据,而是公开凭据的ID

    web界面配置:

    最终效果 

    • 文件参数

    注意:

            文件参数不支持流水线

            文件会被上传至workspace对应的job目录下,并且文件名会被修改:例如路径设置为 pak/ls

    文件名就会被传到 workspace/job/pak 目录下名字为ls

            如果在jenkins中继续读取该文件可以使用内置变量WORKSPACE

    web界面配置:

    最终效果

    密码参数 

    1.pipeline语法配置:

            parameters { password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A secret password') }

    2.web界面配置:

    最终效果 

    • 运行时参数 

    定义一个运行参数,用户可以选择一个确定的工程。网站的url地址将会被当作环境变量暴露出来,你可以在构建时使用,或者作为环境变 量,或者在配置中做变量替换。通过Jenkins可以查询到更多的信息。

    web界面配置:

    配置脚本输出此变量

    最终效果:

     

     运行结果:

    Jenkins pipeline 

    参考文档:https://www.cnblogs.com/maiblogs/p/17675823.html

    示例代码

    1. def info_(mes){
    2. sh "python -c \"import logging;logging.basicConfig(level=logging.INFO,format='%(asctime)s --------- %(message)s ---------');logger= logging.getLogger(__name__);logger.info('${mes}')\""
    3. }
    4. pipeline {
    5. agent any
    6. parameters {
    7. choice(name: 'Invoke_Parameters', choices:"No\nYes", description: "如果对pipeline参数进行了修改,请选择Yes;这将会只进行参数初始化,不会执行其他部分" )
    8. choice(name: 'passed', choices:"Yes\nNo", description: "此版本镜像生产环境可用请选择Yes;不可用请选择No" )
    9. choice(name: 'publish_rollback', choices:"publish\nrollback\nrestart\nstop", description: "publish:发布,rollback:回滚,restart:重启,stop:删除,发布根据code_release_version参数发布,回滚自动回滚至上一版本忽略code_release_version参数" )
    10. string(name: 'project_name',defaultValue: 'ai-access', description: '该应用唯一标识')
    11. string(name: 'department', defaultValue: 'ai', description: '部门')
    12. string(name: 'namespace', defaultValue: 'ai-sim', description: '集群命名空间')
    13. string(name: 'env', defaultValue: 'prod', description: '集群命名空间')
    14. string(name: 'code_release_version', defaultValue: '', description: '应用要发布的版本Branch或Tag,拉取源码后会切换至至Branch或Tag。')
    15. }
    16. stages {
    17. stage("parameterizing") {
    18. steps {
    19. script {
    20. if ("${params.Invoke_Parameters}" == "Yes") {
    21. currentBuild.result = 'ABORTED'
    22. error('因为你选择了初始化参数为Yes,执行初始化,不进行构建。')
    23. }
    24. }
    25. }
    26. }
    27. stage("deploy:执行部署"){
    28. steps{
    29. info_("${Invoke_Parameters},${passed},${publish_rollback},${project_name},${department},${namespace},${params.env},${code_release_version}")
    30. }
    31. }
    32. }
    33. }

  • 相关阅读:
    分类树,我从2s优化到0.1s
    Django后台管理(二)
    benders分解算法 逻辑思路整理(加星)
    moonligh串流教程以及3大问题解决
    Java学习笔记 --- 多线程
    Go 语言 new 和 make 关键字的区别
    2. 验证面试高频问题整理(附答案)
    背压backpress:供大于求生产过剩
    如何解决电脑出现msvcp140.dll丢失问题,msvcp140.dll丢失的最全解决方法
    【微信小程序 | 实战开发】ES5、ES6概述和新特性介绍
  • 原文地址:https://blog.csdn.net/weixin_43812198/article/details/138528392