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() //清空workspace
echo'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 3
image=$(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
进行配置:
系统管理->系统设置->相关配置如下图:
可以在此处进行测试发送!检验配置是否正确
来源:开源Linux
五、学习合集(福利)
黑客&网络安全如何学习**
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的的网安视频教程,之前都是内部资源,专业方面绝对可以秒杀国内99%的机构和个人教学!全网独一份,你不可能在网上找到这么专业的教程。
内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,200多G的资源,不用担心学不全。
因篇幅有限,仅展示部分资料,需要见下图即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
————————————————
本文转自 https://blog.youkuaiyun.com/yy1715713348/article/details/149346653?spm=1001.2014.3001.5502,如有侵权,请联系删除。