jenkins

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

安装部署jenkins

jenkins与java对应版本要求

此次所用系统版本:

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

安装java

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

#卸载自带java
yum -y remove java
rm -rf /usr/bin/java
#安装java
wget  https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm
rpm -ivh jdk-21_linux-x64_bin.rpm
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包部署
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
yum install fontconfig
yum -y install jenkins
vim /usr/lib/systemd/system/jenkins.service #修改Jenkins配置文件运行用户为root
    User=root
    Group=root
systemctl daemon-reload
systemctl  enable jenkins	   
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隐藏文件)

wget https://get.jenkins.io/war-stable/2.452.2/jenkins.war
yum install fontconfig
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/        

wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
tar -xvf apache-maven-3.5.4-bin.tar.gz
echo 'export PATH=$PATH:/root/apache-maven-3.5.4/bin' >>/etc/profile
source /etc/profile
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'

3.直接传数据给jenkinsAPI

curl -u admin:1234 -X POST --data-urlencode json='{}' $url/build

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

示例代码

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

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值