中文文档 https://www.jenkins.io/zh/doc/book/installing/
上传yum源
安装key
rpm --import jenkins.io.key
yum -y install jenkins-2.301-1.1.noarch.rpm
#注:新版 GitLab 的服务端口为 8080,和 GitLab 的服务端口相冲突,修改Jenkins的默认端口8080为198
配置文件
vim /etc/sysconfig/jenkins
JENKINS_PORT="8888"
#数据目录,建议用固态磁盘来存数据,可以自己定义
JENKINS_HOME="/var/lib/jenkins"
JENKINS_USER="root"
vim /etc/init.d/jenkins
candidates="
/data/jdk1.8.0_152/bin/java
"
修改安装插件源
cd ./jenkins/updates/
sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
启动
systemctl daemon-reload
systemctl start jenkins.service
systemctl restart jenkins.service
访问 Jenkins 并安装相关控件
http://192.168.66.40:8888
#查看初始化密码:cat /var/lib/jenkins/secrets/initialAdminPassword
f00b76dece1d416ba50346f21cf937d9
安装插件
选择不需要默认任何插件
创建管理员用户:admin 密码: 123456 全名: admin到些 jenkins 安装成功。
进入插件列表并修改加载源
cd /var/lib/jenkins/updates
sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
重启Jenkins
http://192.168.66.101:8888/restart
开启代理程序的TCP端口
Manage Jenkins -> Configure Global Security
新建节点
安装和配置节点
下载agent.jar,并上传到Slave节点,然后执行页面提示的命令:
java -jar agent.jar -jnlpUrl http://192.168.66.101:8888/computer/slave1/slave- agent.jnlp -secret f2ecbb99e0c81331e8b7a7917a94d478f39cb9763fc6c66d9a9741c61f9ae6d6 -workDir "/root/jenkins"
测试节点是否可用
管理Jenkins用户权限Role-based Authorization Strategy
Global roles(全局角色)、Item roles(项目角色)、Node roles(节点角色)
凭证管理Jenkins-Credentials Binding
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有 仓库密码等,以便Jenkins可以和这些第三方的应用进行交互
Username with password:用户名和密码
SSH Username with private key:使用ssh用户和密钥
Secret file:需要保密的文件文件
Secret text:需要保存的一个加密文本串
Certficate:通过上传证书文本方式
安装Git插件和Git工具
为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在CentOS7上 安装Git工具。
CentOS7上安装Git工具:
yum install git -y 安装
git --version 安装后查看版本
安装Maven来编译和打包项目
Maven项目构建安装Maven Integration插件
安装Maven
tar -xzf apache-maven-3.6.2-bin.tar.gz -C /data/
mv apache-maven-3.6.2/* /data/maven
创建本地仓库目录
mkdir /data/maven/repo
vi /data/mavenconf/settings.xml
配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export MAVEN_HOME=/opt/maven export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
source /etc/profile
查找Maven版本
mvn -v
全局工具配置关联JDK和Maven
Jenkins->Global Tool Configuration->JDK->新增JDK
Jenkins->Global Tool Configuration->Maven->新增Maven
添加Jenkins全局变量
Manage Jenkins->Configure System->Global Properties
Jenkins远程部署到Tomcat的功能Deploy to container
流水线项目构建安装插件pipeline
Pipeline,一套运行在Jenkins上的工作流框架,将原来独立运行于单个或者多个节点的 任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作
邮箱服务器发送构建结果
代码审查安装SonarQube
SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检测。
物理机安装安装SonarQube
#创建对应数据库
#建用户
CREATE USER 'sonar'@'%' IDENTIFIED BY 'sonar';
#新建库
CREATE DATABASE `sonar`CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
#用户授权
GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%';
#安装
unzip -o -d /data/ sonarqube-6.7.4.zip
mv sonarqube-6.7.4/* /opt/sonarqube
#创建sonar用户,必须sonar用于启动,否则报错
useradd sonar
chown -R sonar. /data/sonarqube
修改sonar配置文件
vi /data/sonarqube/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar
#注意:sonar默认监听9000端口,如果9000端口被占用,需要更改。
启动sonar
cd /opt/sonarqube
启动
su sonar ./bin/linux-x86-64/sonar.sh start
停止
su sonar ./bin/linux-x86-64/sonar.sh stop
查看状态
su sonar ./bin/linux-x86-64/sonar.sh status
tail -f logs/sonar.logs 查看日志
访问sonar、默认账户:admin/admin
http://192.168.66.101:9000
jenkins安装SonarQube Scanner插件并添加凭证
Jenkins进行SonarQube配置
Manage Jenkins->Configure System->SonarQube servers
Manage Jenkins->Global Tool Configuration
Publish Over SSH 插件,实现远程发送Shell命令
配置远程部署服务器
拷贝公钥到远程服务器
ssh-copy-id 192.168.66.103
NodeJS插件
Extended Choice Parameter插件支持多选框
安装插件kubernetes
安装插件BlueOcean
Jenkins团队从用户体验角度出发,专为Jenkins Pipeline重新设计的一套 UI 界面,仍 然兼容以前的 fressstyle类型的job,
BlueOcean 具有以下的一些特性:
连续交付(CD)Pipeline 的复杂可视化,允许快速直观的了解 Pipeline 的状态
可以通过 Pipeline 编辑器直观的创建 Pipeline
需要干预或者出现问题时快速定位,BlueOcean 显示了 Pipeline 需要注意的地方, 便于异常处理和提高生产力
用于分支和拉取请求的本地集成可以在 GitHub 或者 Bitbucket 中与其他人进行 代码协作时最大限度提高开发人员的生产力。
创建用户
给用户分配角色
创建项目测试权限
以itcast管理员账户创建两个项目,分别为itcast01和itheima01
结果为:
eric用户登录,只能看到itcast01项目
jack用户登录,只能看到itheima01项目
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码 等,以便Jenkins可以和这些第三方的应用进行交互
创建凭证
普通类型
SSH密钥类型
#使用root用户生成公钥和私钥
ssh-keygen -t rsa
#在/root/.ssh/目录保存了公钥和使用
id_rsa:私钥文件
id_rsa.pub:公钥文件
把生成的公钥放在Gitlab中
root账户登录->点击头像->Settings->SSH Keys
复制刚才id_rsa.pub文件的内容到这里,点击"Add Key"
在Jenkins中添加凭证,配置私钥
在Jenkins添加一个新的凭证,类型为"SSH Username with private key",把 刚才生成私有文件内容复制过来
测试凭证是否可用
创建一个FreeStyle项目:新建Item->FreeStyle Project->确定
找到"源码管理"->“Git”,在Repository URL复制Gitlab中的项目URL
查看/var/lib/jenkins/workspace/目录,成功拉取了代码到Jenkins中
自由风格软件项目(FreeStyle Project)
拉取代码->编译->打包->部署
拉取代码
编译打包
构建->添加构建步骤->Executor Shell
echo "开始编译和打包"
mvn clean package
echo "编译和打包结束"
部署
把项目部署到远程的Tomcat里面
1)安装 Deploy to container插件
Jenkins本身无法实现远程部署到Tomcat的功能,
需要安装Deploy to container插件实现
点击"Build Now",开始构建过程
4)部署成功后,访问项目
Maven项目(Maven Project)
1)安装Maven Integration插件
2)创建Maven项目
3)配置项目
拉取代码和远程部署的过程和自由风格项目一样,只是"构建"部分不同
点击"Build Now",开始构建过程
6)部署成功后,访问项目
流水线项目(Pipeline Project)
Pipeline,一套运行在Jenkins上的工作流框架,将原来独立运行于单个或者多个节点的 任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作
语法使用
pipeline {
agent any
#代表整个流水线的所有执行阶段,一般只有一个
stages {
#某个阶段,可能出现n个,一般分为拉取代码,编译构建,部署等阶段
stage('拉取代码') {
#阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '68f2087f-a034-4d39-a9ff-1f776dd3dfa8', url: '[email protected]:itheima_group/web_demo.git']]])
}
}
stage('编译构建') {
steps {
sh label: '', script: 'mvn clean package'
}
}
stage('项目部署') {
steps {
deploy adapters: [tomcat8(credentialsId: 'afc43e5e-4a4e-4de6-984f- b1d5a254e434', path: '', url: 'http://192.168.66.102:8080')], contextPath: null, war: 'target/*.war'
}
}
}
}
#一个Node就是一个 Jenkins 节点,Master 或者 Agent,是执行 Step 的具体运行环境
node {
def mvnHome
#每个 Stage 代表一组操作
stage('Preparation') {
}
stage('Build') {
}
stage('Results') {
}
}
安装Pipeline插件
创建项目
在代码中引用该文件或者用web界面操作写入
触发远程构建
其他工程构建后触发
定时字符串从左往右分别为: 分 时 日 月 周
#一些定时表达式的例子:
每30分钟构建一次:H代表形参 H/30 * * * * 10:02 10:32
每2个小时构建一次: H H/2 * * *
每天的8点,12点,22点:0 8,12,22 * * *
每天中午12点定时构建一次 H 12 * * *
每天下午18点定时构建一次 H 18 * * *
在每个小时的前半个小时内的每10分钟 H(0-29)/10 * * * *
轮询SCM
轮询SCM,是指定时扫描本地代码仓库的代码是否有变更,如果代码有变更就触发项目构建。
注意:这次构建触发器,Jenkins会定时扫描本地整个项目的代码,增大系统的开销,不建议使用。
参数化构建
有时在项目构建的过程中,我们需要根据用户的输入动态传入一些参数,从而影响 整个构建结果,这时我们可以使用参数化构建
多选框:项目名称
SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检测。
(非流水线项目)在项目添加SonaQube代码审查
添加构建步骤:
#在给定的SonarQube实例中必须是唯一的
sonar.projectKey=web_demo_cxk
sonar.projectName=web_demo_cxk
sonar.projectVersion=1.0
#审查代码项目/下面那些目录当前
sonar.sources=.
#在上面审查的目录下排除那些目录
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
sonar.sourceEncoding=UTF-8
(流水线项目)在项目添加SonaQube代码审查
项目根目录下,创建sonar-project.properties文件
#在给定的SonarQube实例中必须是唯一的
sonar.projectKey=web_demo_cxk
sonar.projectName=web_demo_cxk
sonar.projectVersion=1.0
#审查代码项目/下面那些目录当前
sonar.sources=.
#在上面审查的目录下排除那些目录
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
sonar.sourceEncoding=UTF-8
修改Jenkinsfile,加入SonarQube代码审查阶段
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],
userRemoteConfigs: [[credentialsId: '68f2087f-a034-4d39-a9ff-1f776dd3dfa8', url:
'[email protected]:itheima_group/web_demo.git']]])
}
}
stage('编译构建') {
steps {
sh label: '', script: 'mvn clean package'
}
}
stage('SonarQube代码审查') {
steps{
script {
scannerHome = tool 'sonarqube-scanner'
}
withSonarQubeEnv('sonarqube6.7.4') {
sh """
cd ${project_name} ${scannerHome}/bin/sonar-scanner
"""
}
}
}
stage('项目部署') {
steps {
deploy adapters: [tomcat8(credentialsId: 'afc43e5e-4a4e-4de6-984f-
b1d5a254e434', path: '', url: 'http://192.168.66.102:8080')], contextPath: null,
war: 'target/*.war'
}
}
}
post {
always {
emailext(
subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} -
${BUILD_STATUS}!',
body: '${FILE,path="email.html"}',
to: '[email protected]'
)
}
}
}
安装插件Email Extension插件
设置邮箱相关参数
准备邮件内容
在项目根目录编写email.html,并把文件推送到
Gitlab,内容如下:
<!DOCTYPE html>
"UTF-8">
${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
"8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">