不经常用的东西还是记录一下吧,老了记性差
Jenkins开发团队重要成员之一。
jenkins
jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。官网: http://jenkins-ci.org/
教程环境
CentOS7
GitLab(不多说)
Jenkins安装
安装JDK
jenkins需要依赖JDK,先安装JDK8
yum install java-1.8.0-openjdk
安装目录 /usr/lib/jvm
jenkins安装包
下载页面:[https://jenkins.io/zh/download/
按照提示操作
修改Jenkins配置
vim /etc/syscofig/jenkins
...
#修改
JENKINS_USER="root"
JENKINS_PORT="82"
启动jenkins
systemctl start jenkins
端口添加到防火墙
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload
打开浏览器访问
http://ip:82
在日志中找到密码
先跳过插件安装
接着创建管理员用户保存完成
修改插件下载地址(国内)
下面这一步要先点击一下让jenkins的官方插件列表下载到本地
Jenkins->Manage Jenkins->Manage Plugins,点击Available
然后替换源
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
进入插件管理点击 advanced
Update Site改为国内插件下载地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
点击sumbit
浏览器输入: http://ip:82/restart ,重启Jenkins。
汉化插件
还是国语舒服
Jenkins->Manage Jenkins->Manage Plugins,点击Available,搜索"Chinese"
记得要重启
jenkins用户权限管理
安装Role-based Authorization Strategy 插件来管理。jenkins的插件是真多。。
系统管理中就会多出一个菜单
点击Manage Roles
- testRole:该角色为全局角色。这个角色需要绑定Overall下面的Read权限,是为了给所有用户绑 定最基本的Jenkins访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is missing the Overall/Read permission
- role1:该角色为项目角色。使用正则表达式绑定"api.",意思是只能操作itcast开头的项目。
- role2:该角色也为项目角色。绑定"api.*"。
创建用户
系统管理->管理用户
分配角色
系统管理->Manage and Assign Roles. 点击Assign Roles. 进行上面创建的角色绑定
创建项目
不同的用户不同的角色看到不同的项目。。
Jenkins凭证管理
就是存一些密码,比如 数据库密码,gitlab密码认证,Docker仓库密码等。
还是要下插件,需要啥下载啥
安装Credentials Binding插件
还是上面安装插件的地方,略略略。。。
安装完后
点击. 系统管理. 里面会有一个 manage Credentials 菜单 点进去,点击全局 就可以添加凭证了
凭证类型
- Username with password:用户名和密码
- Gitlab api token :在gitlab中创建access token使用
- SSH Username with private key: 使用SSH用户和密钥
- Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径 设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
- Secret text:需要保存的一个加密的文本串
- Certificate:通过上传证书文件的方式
安装Git插件和Git工具
在Jenkins的插件管理中搜索 git。安装
CentOS7 安装git工具
yum install git -y
Gitlab认证
可以使用Username with password类型认证 也可以api token认证,ssh认证
教程使用ssh认证
在Centos上root用户生成公钥和私钥
ssh-keygen -t tsa
在/root/.shh/ 目录中
id_rsa:私钥文件
id_rsa.pub:公钥文件
把生成的公钥放在Gitlab中
用gitlab的root账户登录->点击头像->Settings->SSH Keys
复制id_rsa.pub文件的内容到 文本框中点击 add key
在Jenkins添加一个新的凭证,类型为"SSH Username with private key",把生成私有文件内容复制到‘private key’中 username填入root。点击确认
Maven安装配置
安装Maven来编译和打包项目
在Centos上安装maven,配置环境变量 mvn -v 检查
偷懒不想写了。。
全局工具配置
首页 系统管理->全局工具配置 配置jdk、maven路径
首页 系统管理- >系统配置。配置环境变量
修改Maven的settings.xml
mkdir /root/repo
创建本地仓库目录 vim /opt/maven/conf/settings.xml
本地仓库改为:/root/repo/
添加阿里云私服地址: alimaven aliyun maven http://maven.aliyun.com/nexus/content/groups/public/central
Tomcat安装和配置
安装tomcat8.5。放开防火墙端口。怎么安装不想写
配置Tomcat用户角色权限
默认Tomcat没有配置用户角色权限
Jenkins部署项目到Tomcat服务器,需要用到Tomcat的用户,所以修改tomcat以下配置, 添加用户及权限
vim /opt/tomcat/conf/tomcat-users.xml
添加内容,账户密码为tomcat
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
</tomcat-users>
为了能外部访问还需要修改 注释掉
vim /opt/tomcat/webapps/manager/META-INF/context.xml
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
重启tomcat
访问: http://ip:port/manager/html ,输入tomcat和tomcat
Jenkins构建Maven项目
- 自由风格软件项目(FreeStyle Project) 略。。懒了
- Maven项目(Maven Project) 略。。懒了
- 流水线项目(Pipeline Project)
Pipeline流水线项目构建
- Pipeline 脚本是由 Groovy 语言实现的
- Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
- Pipeline 可以在web ui端创建编写。一般都是放在项目中在jenkins设置(SCM)直接载入
安装Pipeline插件
还是老样子 不贴图了
创建项目
jenkins首页点击新建任务
进入项目中配置
流水线 定义可以选择Pipeline Script在web ui上编写脚本
这选择Pipeline Script from SCM
脚本
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'ssh', url: 'git@192.168.31.238:bo/api_test.git']]])
}
}
stage('拉取代码') {
steps {
sh 'mvn clean package'
}
}
stage('项目部署') {
steps {
deploy adapters: [tomcat8(credentialsId: 'tomcat', path: '', url: 'http://192.168.31.238:8081')], contextPath: null, war: 'target/*.war'
}
}
}
}
构建触发器
- 触发远程构建
- 其他工程构建后触发(Build after other projects are build)
- 定时构建(Build periodically)
- 轮询SCM(Poll SCM)
略。。又懒了
Git hook自动触发构建
目前正常用的方案
安装Gitlab Hook插件。又来了
需要安装两个插件: Gitlab Hook和GitLab
进入项目找到触发器
Gitlab配置webhook
1.gitlab使用root账户登陆 点击Admin Area -> Settings -> Network
勾选"Allow requests to the local network from web hooks and services"
2.在项目添加webhook 点击项目->Settings->Integrations
URL输入上面截图的地址。勾选Push events
3.进入jenkins
系统管理->系统配置。取消勾选Enable authentication for '/project' end-point。保存
Jenkins 邮箱发送构建结果
安装Email Extension插件
系统管理->系统配置
邮件服务器,如qq、163自己开启配置
在项目根目录创建jenkinsEmail.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginheight="4" marginwidth="0" offset="0"
topmargin="8">
<table cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sansserif"
width="95%">
<tr>
<td>(本邮件是程序自动下发的,请勿回复!)</td>
</tr>
<tr>
<td><h2>
<font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
</h2></td>
</tr>
<tr>
<td><br/>
<b><font color="#0B610B">构建信息</font></b>
<hr align="center" size="2" width="100%"/>
</td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>触发原因: ${CAUSE}</li>
<li>构建日志: <a
href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建 Url : <a
href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录 : <a
href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目 Url : <a
href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">Changes Since Last
Successful Build:</font></b>
<hr align="center" size="2" width="100%"/>
</td>
</tr>
编写Jenkinsfile添加构建后发送邮件
<tr>
<td>
<ul>
<li>历史变更记录 : <a
href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
</ul>
${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for
Build #%n:<br/>%c<br/>",showPaths=true,changesFormat="
<pre>[%a]<br
/>%m</pre>
",pathFormat=" %p"}
</td>
</tr>
<tr>
<td><b>Failed Test Results</b>
<hr align="center" size="2" width="100%"/>
</td>
</tr>
<tr>
<td><pre
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica,
sans-serif">$FAILED_TESTS</pre>
<br/></td>
</tr>
<tr>
<td><b><font color="#0B610B">构建日志 (最后 100行):</font></b>
<hr align="center" size="2" width="100%"/>
</td>
</tr>
<tr>
<td><textarea cols="80" readonly="readonly" rows="30"
style="font-family: Courier New">${BUILD_LOG,
maxLines=100}</textarea>
</td>
</tr>
</table>
</body>
</html>
pipeline {
agent any
stages {
stage('pull code') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'ssh', url: 'git@192.168.31.238:bo/api_test.git']]])
}
}
stage('build project') {
steps {
sh 'mvn clean package'
}
}
stage('publish project') {
steps {
deploy adapters: [tomcat8(credentialsId: 'tomcat', path: '', url: 'http://192.168.31.238:8081')], contextPath: null, war: 'target/*.war'
}
}
}
post {
always {
emailext(
subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
body: '${FILE,path="email.html"}',
to: ' 接受的邮箱地址'
)
}
}
}
其实还有钉钉推送(api机器人),安装DingTalk插件
Jenkins还有很多东西,慢慢玩吧
Q.E.D.