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'
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 |
|
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}")
}
}
}
}