Jenkins搭建、权限管理、参数化、流水线等详细教程!

部署Jenkins

一、jenkins 安装

官网: https://jenkins.io

yum 安装 jenkins *jenkins 依赖 java 环境 #注意2.346之后的版本不再支持jdk8
卸载旧jenkins
#查询以前是否安装jenkins
rpm -qa |grep jenkins
#卸载 jenkins
yum -y remove jenkins  
rpm -e jenkins
#彻底删除jenkins残留文件
find / -iname jenkins | xargs -n 1000 rm -rf# 导入jenkins源
wget -O /etc/yum.repos.d/jenkins.repo     https://pkg.jenkins.io/redhat/jenkins.repo
# 导入jenkins官方证书
rpm --import https://pkg.jenkins.io/redhat/jenkins.io-2023.key#安装jdk11
yum install fontconfig java-17-openjdk -y
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
#有点慢,可以在Windows上提前下载导入。
sudo yum -y install ./jdk-17_linux-x64_bin.rpm
java -version#安装jenkins
yum install jenkins -y
#设置开机自启动
systemctl enable jenkins #rpm安装
wget http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.346.1-1.1.noarch.rpm 
#安装
rpm -ivh jenkins-2.346.1-1.1.noarch.rpm  
二、配置文件
2.1 查询 yum 下载 Jenkins 安装的文件
[root@k8s-master-node1 ~]# rpm -ql jenkins
/usr/bin/jenkins    # Jenkins 服务二进制文件
/usr/lib/systemd/system/jenkins.service #systemd 服务单元文件,定义Jenkins启动参数
/usr/share/java/jenkins.war # war 包 
/var/cache/jenkins  # war包解压目录 jenkins网页代码目录
/var/lib/jenkins  # jenkins 工作目录
2.2 修改配置文件

配置文件说明

[root@k8s-master-node1 ~]# grep -Ev "^(#|$)" /usr/lib/systemd/system/jenkins.service
[Unit]
Description=Jenkins Continuous Integration Server    # Jenkins 持续集成服务器的描述
Requires=network.target                              # 依赖于网络服务,表示网络必须先启动
After=network.target                                 # 在网络服务启动后再启动 Jenkins
[Service]
Type=notify                                          # 服务类型为 notify,表示服务启动后会通知 
NotifyAccess=main                                    # 仅监听主进程的通知
ExecStart=/usr/bin/jenkins                           # 启动 Jenkins 的命令
Restart=on-failure                                   # 在服务失败时自动重启
SuccessExitStatus=143                                # 指定退出状态码 143 为正常退出
User=root                                            # 以 root 用户身份运行 Jenkins
Group=root                                           # 以 root 用户组身份运行 Jenkins
Environment="JENKINS_HOME=/var/lib/jenkins"          # 设置 Jenkins 主目录的环境变量
WorkingDirectory=/var/lib/jenkins                    # 指定工作目录为 /var/lib/jenkins
Environment="JENKINS_WEBROOT=%C/jenkins/war"         # 设置 Jenkins Web 根目录的环境变量
Environment="JAVA_OPTS=-Djava.awt.headless=true"     # 设置 Java 选项为无头模式
Environment="JENKINS_PORT=3333"                      # 设置 Jenkins 监听的端口为 3333
[Install]
WantedBy=multi-user.target                           # 在多用户目标(运行级别)下启动 Jenkins
2.3 启动 jenkins
  • • 启动之前修改以 root 用户、群组身份运行 Jenkins, 确保后面 Jenkins 有权限使用 Docker 服务。

接下来启动:

`[root@k8s-master-node1 ~]# systemctl start jenkins`
2.4 验证安装
[root@k8s-master-node1 /data]# ps -ef|grep jenkins
root      3523  7329  0 14:04 pts/0    00:00:00 grep --color=auto jenkins
jenkins  12697     1  7 14:01 ?        00:00:15 /usr/local/java/jdk1.8.0_121/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
三、jenkins配置(web页面)
3.1 管理员密码获取

 

[root@k8s-master-node1 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword

3.2 安装插件 (选择在线安装)

 

如果采用最新版的 一般不一会出现这个情况

 

出现离线安装解决方法:

1)修改 /var/lib/jenkins/updates/default.json

jenkins 在下载插件之前会先检查网络连接,其会读取这个文件中的网址。默认是访问谷歌,肯定监测失败,所以将图下的google改为www.baidu.com即可,更改完重启服务。

 

2)修改/var/lib/jenkins/hudson.model.UpdateCenter.xml

该文件为jenkins下载插件的源地址,默认为:https://updates.jenkins.io/update-center.json,就是因为https的问题,此处我们将其改为http即可,之后重启jenkins服务即可。

其他国内备用地址(也可以选择使用):

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

http://mirror.esuni.jp/jenkins/updates/update-center.json

在修复完之后,我们发现离线问题已经解决

选择安装推荐的插件:

 

3.3 创建第一个管理员用户

 

3.4 url 配置

之前版本没有这个选项,这里默认即可:

 

3.5 安装完成

出现如下页面时,表示安装完成

 

 

3.6 配置 jdk、git、maven

系统管理->全局工具配置

 

jdk:可以自动安装,但是选择本地安装的适合项目jdk版本,写入我们jdk的路径即可

 

git:

 

maven:

 

3.7 jenkins 下载插件失败处理办法

jenkins 下载插件失败,提示:

java.io.IOException: Downloaded file /app/jenkins_home/plugins/jacoco.jpi.tmp does not match expected SHA-1, expected 'CtK02wHdFOxTutqhUQzmue6uvpg=', actual 'YGO05utKyaaFzpGCgCE95GS0WsU='at hudson.model.UpdateCenter.verifyChecksums(UpdateCenter.java:1783)at hudson.model.UpdateCenter.access$1100(UpdateCenter.java:147)at hudson.model.UpdateCenter$InstallationJob.replace(UpdateCenter.java:1934)at hudson.model.UpdateCenter$UpdateCenterConfiguration.install(UpdateCenter.java:1178)at hudson.model.UpdateCenter$DownloadJob._run(UpdateCenter.java:1653)at hudson.model.UpdateCenter$InstallationJob._run(UpdateCenter.java:1848)at hudson.model.UpdateCenter$DownloadJob.run(UpdateCenter.java:1624)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:110)at java.lang.Thread.run(Thread.java:745)

中国源的问题。需要换个源就可,换源方法:

jenkins->系统管理->管理插件->高级 选择升级站点

把:http://updates.jenkins-ci.org/update-center.json

换成:http://mirror.esuni.jp/jenkins/updates/update-center.json

镜像地址查询:

http://mirrors.jenkins-ci.org/status.html

Jenkins 核心功能使用

一、Jenkins 用户权限管理
1.1 用户管理背景

针对开发、运维、测试针对不同角色进行不同权限划分,

基于插件: Role-based Authorization Strategy ,Authorize Project 来实现。

1.2  安装用户管理插件

安装该插件:

系统管理->管理插件-可选插件->搜索该插件选中直接安装即可。

 

 

1.3 开启该插件功能

系统管理->全局安全设置-授权策略->选中该插件功能即可->保存

 

1.4 验证用户管理

关闭用户管理功能来进行实践测试

1、策略改回原来的(全局安全配置)

 

2、开启允许用户注册(全局安全配置)

 

3、注册一个新用户

 

4、登录之后,其默认就是管理员用户,可以进行任何操作

 

5、开启 Role-Based Strategy

6、重新登录新创建 test1 用户,显示已经没有任何权限了

 

1.5 权限划分

安装 Role-Based Strategy 插件后,系统管理 中多了如图下所示的一个功能,用户权限的划分就是靠他来做的。

 

1、Manage Roles(管理角色)

  • • Manage Roles:管理角色,相当于针对角色赋予不同权限,然后在将该角色分配给用户。角色就相当于一个组。其里面又有Global roles(全局)、Project roles(项目)、Slave roles(),来进行不同划分。

默认如图下所示:

 

1)Global roles

默认是有一个admin用户的,是所有权限都有的,所有权限都是勾选了的。

接下来我们来添加一个角色:user

 

给其一个读的权限。

2)Item roles
  • • roles to add:表示项目角色

  • • Pattern:是用来做正则匹配的(匹配的内容是Job(项目名)),比如说根据正则匹配到的项目项目角色就都有权限;

接下来新建一个island 项目角色,改项目角色一般给其构建、取消、读取、读取空间权限,一般配置这4个即可

 

  • • Agent roles (代理角色):节点相关的权限

  • • roles to add:表示项目角色

  • • Pattern:是用来做正则匹配的(匹配的内容是节点(Agent节点)),比如说根据正则匹配到的项目项目角色就都有权限;

 

2、Assigin roles(分配角色)

1)给予test用户分配 user 角色

这样其就有 manage roles 中刚才创建的user角色的权限了。

 

此时再去看 test1用户,已有查看的权限了

 

2)针对指定用户分配项目角色(一般最常用的就是针对不同用户进行项目角色分配)

比如将test用户分配有 island 项目角色,这样其就可以有刚才我们创建的island 项目角色正则匹配到的项目的权限了。

 

二、Jenkins 参数化构建

2.1 参数化构建背景

如果只是简单的构建,jenkins自己默认的插件可以做,但是如果我们想要在构建过程中有更多功能,比如说:选择性构建、传参、项目指定变量等等其他功能,基础的参数化构建可以实现一些简单功能,但是要想使用更多功能这时候我们就需要借助参数化构建来实现交互的功能。此处我们来借助以下插件来进行实现:

  • • Extended Choice Parameter(更丰富的参数化构建插件)

  • • Git Parameter

2.2 安装插件

首先还是安装该插件,去管理插件里面进行安装 Extended Choice Parameter

 

1、项目配置

 

2、构建选择分支进行测试,添加branch参数 git配置中选$branch参数

 

 

3、参数化配置已经生效

 

2.3 Git 插件

再用 git 时使用该插件是非常方便的。

1、安装插件 Git Parameter

 

2、进行配置

在配置之前有一个坑,当我们在配置git中写了远端地址后,会有报错:

这个是和前面docker报错是一样的

这是因为 jenkins 我们 yum 装的运行用户是 jenkins 用户,此处是 jenkins 用户去 git 仓库进行拉取,而 jenkins 用户的话默认是 /bin/false 的,不但不能登录,也没有 git 命令权限,所以肯定是失败的。

解决此问题两种办法:

  • • 更改jenkins用户为root用户;

  • • 更改jenkins用户为正常的普通用户/bin/bash,将其的公钥加入到git服务器的git用户中。

此处暂时先用第一种解决办法,更改 jenkins 的运行用户为 root 用户,通过如下方式进行更改:

 

  • • 将/usr/lib/systemd/system/docker.service;文件中user和group改为root

  • • 然后再重启即可。

三、Jenkins pipeline
3.1 概览

 

3.2 安装

在对 jenkins 进行初始化安装时,默认已经安装了 jenkins 的相关插件,如下图所示:

 

3.3 实操

1、新建任务

 

2、编写 pipeline 脚本

 

可以借助流水线语法去做。

roads流水线脚本:

pipeline { agent any // 参数化parameters {//  string defaultValue: '2.0.0', description: '选择版本', name: 'version'gitParameter branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH'string(name: 'version', defaultValue: '2.0.0', description: '选择版本')
}tools {jdk 'jdk1.8'   maven 'maven-3.9.6'}stages {stage('pull code') {steps {cleanWs() //清空workspaceecho'pull start'git branch: "${params.BRANCH}",  credentialsId: 'xxxxxxxxxxxxxxxxxxxx', url: 'xxxxxxxxxxxxxxxxxxxxxxx'echo'pull end'}}stage('mvn install xxxxxxxxxx') {steps {echo'build xxxxxxxx'dir('xxxxxxxx') {sh "mvn -v"sh "mvn clean install -Dmaven.test.skip=true"} }}stage('mvn install xxxxxxxxxx') {steps {       echo'build xxxxxxxx'dir('xxxxxxxxxxx') {sh "mvn clean install -Dmaven.test.skip=true"} }}stage('mvn install xxxxx') {steps {echo'build xxxxxxxxx'dir('xxxxxxxx') {sh "mvn clean install -Dmaven.test.skip=true"}    }}stage('mvn install island-opple') {steps {echo'build island-opple'sh "mvn clean install -Dmaven.test.skip=true"}}// stage('login docker') {//     steps {//         echo'start login docker'//         sh "docker login --username=xxxxxxxxxxxx --password=xxxxxxxxx registry.cn-hangzhou.aliyuncs.com"//     }}stage('make image and push') {steps {echo'start build image'script {def selectedProjects = "${project_name}".split(',')if(selectedProjects.size()>0){for(int i=0;i<selectedProjects.size();i++){aaa = selectedProjects[i].replace("\"", "")dir(aaa){sh "pwd"sh '''sed -i "1c FROM xxxxxxxxxxxxxxxxxx" Dockerfile '''sh "mvn -Ddocker.image.tag=${version} dockerfile:build"sh '''sleep 3image=$(docker images | sed -n '2p' | awk '{print$1":"$2}')echo $image'''// docker push $image}}}}}}}
}
3、构建测试

具体配置详解请参考 Pipeline

四、Jenkins 构建邮件状态通知
4.1 前提

前提:服务器开启邮箱服务

(如果启动失败修改/etc/postfix/main.cf,确保 inet_interfaces 参数正确设置。默认是inet_interfaces = localhost,

如果你的服务器只想监听 IPv4 地址,可以将该参数设置为 inet_interfaces = 127.0.0.1

如果想监听所有地址(包括 IPv4 和 IPv6),可以将其设置为 inet_interfaces = all

 

4.2  基础配置

需要安装一个插件:

插件: Email Extension Plugin

进行配置:

系统管理->系统设置->相关配置如下图:

 

可以在此处进行测试发送!检验配置是否正确

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/909794.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/909794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度飞桨(PaddlePaddle)案例分享:基于 PaddleOCR 的图像文字提取系统

一、案例背景 在实际教学、办公及政务系统中&#xff0c;纸质材料&#xff08;如手写作文、表格、试卷等&#xff09;仍广泛存在。为提升信息处理效率&#xff0c;采用 OCR&#xff08;Optical Character Recognition&#xff09;技术将图像中的文字提取为可编辑文本已成为刚需…

python操控鼠标

在已知屏幕坐标的情况下&#xff0c;可以通过 Python 的 pyautogui 或 pynput 等库实现网页上的鼠标点击操作。以下是具体步骤和代码示例&#xff1a; 1. 使用 PyAutoGUI&#xff08;推荐&#xff09; pyautogui 是一个简单易用的库&#xff0c;可以直接通过屏幕坐标控制鼠标点…

UV 与 Bun 深度解析

UV 与 Bun 深度解析&#xff1a;现代开发工具的安装与使用指南 什么是 UV&#xff1f; UV&#xff08;Ultra-Velocity&#xff09;是由 Astral 公司&#xff08;Ruff 的创建者&#xff09;开发的超高速 Python 包管理工具&#xff1a; 用 Rust 编写&#xff0c;速度极快&…

【算力网络】多样化算力感知

一、算力网络 ​ 算力网络&#xff08;Computing Power Network&#xff09;是我国率先提出的原创性技术理念&#xff0c;其核心是通过高速网络整合分散的算力资源&#xff08;如云端、边缘、终端等&#xff09;&#xff0c;实现算力的动态感知、智能调度和一体化服务&#x…

Greenplum/PostgreSQL pg_hba.conf 认证方法详解

Greenplum/PostgreSQL pg_hba.conf 认证方法详解 pg_hba.conf 文件中的 METHOD 字段指定了客户端认证方式&#xff0c;以下是各种认证方法的详细说明和配置示例。 常用认证方法 1. trust - 无条件允许连接 说明&#xff1a;不需要密码&#xff0c;完全信任连接 适用场景&am…

分布式数据库中间件-Sharding-JDBC

前言 学习视频&#xff1a;深入Sharding-JDBC分库分表从入门到精通【黑马程序员】本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 1、概述 1.1、分库分表是什么 小明是一家初创电商平台的开发人员&#xff0c;他负责卖家模块的功能开发&#xff0c;其中…

pycharm2020.2版本给项目选择了虚拟环境解释器,项目文件都运行正常,为什么terminal文件路径的前面没有虚拟解释器的名称

解决问题&#xff1a; 1.打开 Anaconda Prompt输入 conda init cmd.exe 或者 pycharm终端直接 conda init cmd.exe 重启动 CMD和pycharm&#xff0c;使配置生效。

2025商旅平台排行:国内主流商旅平台解析

在数字化转型加速2025年&#xff0c;企业商旅管理正从“成本中心”向“智能管控枢纽”升级。如何通过技术赋能实现商旅成本精准优化与管理效率跃升&#xff1f;本文聚焦国内五大主流商旅平台&#xff0c;以“综合型头部平台创新型平台”双维度解析&#xff0c;结合数据实证与场…

CNS无线电信号覆盖分析系统v0.1

#系统终端有的版本号了# 开发一套类EMACS的专业软件任重道远&#xff0c;经过慢吞吞的开发&#xff0c;我们已经将目标定位大幅下调了&#xff0c;不再对标EMACS系统了&#xff0c;改为瞄行业老二WRAP软件了。当然WRAP软件在电磁信号仿真分析领域也是神一样的存在&#xff0c;其…

单视频二维码生成与列表二维码生成(完整版)

视频二维码有有两种情况&#xff1a;一种是单个视频的生成一个二维码&#xff1b;另一种是一组视频&#xff08;多个视频&#xff09;生成一个列表二维码。用户按自己的实际需求生成&#xff0c;即可&#xff0c;很方便。 STEP1 注册帐号 使用视频二维码&#xff0c;您需要注…

关于linux:1. Linux 基础运维

一、Linux 安装与发行版选择 关于操作系统种类&#xff1a; 1&#xff09;基于 Linux 内核的操作系统 Ubuntu、Debian、Kali、CentOS、RHEL、Arch、Android、Alpine、OpenWRT 等 特点&#xff1a;开源、稳定、安全、广泛使用于服务器与开发领域 2&#xff09;基于 Windows…

(LeetCode 每日一题) 2016. 增量元素之间的最大差值 (数组)

题目&#xff1a;2016. 增量元素之间的最大差值 思路&#xff1a;维护已遍历过的最小值&#xff0c;时间复杂度0(n)。 C版本&#xff1a; class Solution { public:int maximumDifference(vector<int>& nums) {int mnnums[0];int ans0;for(int i1;i<nums.size()…

MySQL基础与常用数据类型浅析

一.MySQL数据类型分类 二.数值类型 2.1int类型 我们使用TINYINT作为例子进行实验验证: 越界插入会直接报错,跟我们当时学习语言的时候不太一样,语言会进行隐式类型转换或截断.一般不会直接报错.其他的int类型也是同理. 说明: 在MySQL中&#xff0c;整型可以指定是有符号的…

Ubuntu 20.04离线安装Nvidia-docker

服务器因系统故障重装&#xff0c;安装docker容器时发现几年前的在线安装步骤不好使了&#xff0c;只好尝试离线安装。为了下次不卡壳&#xff0c;记录一下安装步骤。 先确定自己的操作系统&#xff0c;并确保已经安装了nvidia driver。我的操作系统是Ubuntu 20.04。 1. 下载…

6,TCP客户端

1,创建一个新的项目 2,界面设计

【dify更新问题】如何更新dify且低成本解决git pull 443问题

我的dify部署在mini server上&#xff0c;挂不了TZ&#xff0c;所以采用了如下办法 更新origin (.git/config) 地址为&#xff1a;https://gitee.com/dify_ai/dify.git 顺序执行 &#xff08;https://docs.dify.ai/en/getting-started/install-self-hosted/docker-compose#upg…

即时通讯消息推送技术深度解析:从底层原理到行业实践-优雅草卓伊凡|片翼|搁浅

即时通讯消息推送技术深度解析&#xff1a;从底层原理到行业实践-优雅草卓伊凡|片翼|搁浅 引言&#xff1a;重新启程的即时通讯项目 优雅草科技的卓伊凡最近重启了即时通讯项目的二次开发工作&#xff0c;在这个万物互联的时代&#xff0c;消息推送通知作为IM系统的核心功能之…

Joomla jdoc 语法使用介绍

jdoc 语句包含在每个 Joomla 模板中&#xff0c;用于指示 Joomla 或其扩展的其他部分输出内容在整个网页中的位置。本文将简单的介绍一下Joomla模板开发中常用到的<jdoc>标签语法&#xff0c;并且介绍不同类型的<jdoc>标签元素的功能。 JDoc语句 一个典型的 jdoc…

Linux history 命令

Linux history 命令详解 history 是 Linux 系统中一个非常实用的命令&#xff0c;用于查看、管理和操作当前 Shell 会话中执行过的命令历史记录。它可以帮助用户快速重复执行命令、搜索历史记录、清除敏感命令等&#xff0c;极大地提高了命令行操作的效率。 一、基本用法 显示…

侧信道分析中的简单模板攻击(TA)Python实现(带测试)

一、模板攻击原理 模板攻击&#xff08;Template Attacks, TA&#xff09;是一种高效的侧信道分析方法&#xff0c;利用密码设备运行时的物理泄漏信息&#xff08;如功耗&#xff09;恢复密钥。其核心思想是通过建模密钥相关中间值的泄漏特征&#xff0c;构建攻击模板。模板攻…