Jenkins全攻略:从搭建到流水线全流程保姆级教程,太详细了!

Jenkins的初始化groovy脚本_import jenkins.*-CSDN博客部署Jenkins一、jenkins 安装官网: https://jenkins.io

yum 安装 jenkins *jenkins 依赖 java 环境 #注意2.346之后的版本不再支持jdk8代码语言:javascript代码运行次数:0运行复制卸载旧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 安装的文件代码语言:javascript代码运行次数:0运行复制[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 修改配置文件配置文件说明:

代码语言:javascript代码运行次数:0运行复制[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 服务。图片接下来启动:

代码语言:javascript代码运行次数:0运行复制`[root@k8s-master-node1 ~]# systemctl start jenkins`2.4 验证安装代码语言:javascript代码运行次数:0运行复制[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.jsonjenkins 在下载插件之前会先检查网络连接,其会读取这个文件中的网址。默认是访问谷歌,肯定监测失败,所以将图下的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 下载插件失败,提示:

代码语言:javascript代码运行次数:0运行复制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 Strategy6、重新登录新创建 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 Parameter2.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 pipeline3.1 概览图片3.2 安装在对 jenkins 进行初始化安装时,默认已经安装了 jenkins 的相关插件,如下图所示:

图片3.3 实操1、新建任务图片2、编写 pipeline 脚本图片可以借助流水线语法去做。

roads流水线脚本:

代码语言:javascript代码运行次数:0运行复制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

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

进行配置:

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

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

图片

随便看看