前言
最近抽空又把jenkins给学了一下,这次使用docker部署,内容涉及到部署,插件安装,角色权限分配,以及使用pipline构建,参数化,最后是发送邮件通知。
docker部署安装
1. 因为涉及到使用docker部署,所以我直接上docker hub去搜索到相应的镜像和安装命令,很简单直接看命令吧
docker run -itd -p 8081:8080 -p 50001:50000 -v /Users/shenhaodong/jenkins_home:/var/jenkins_home
-e TZ='Asia/Shanghai' jenkins/jenkins:lts
# -p 是映射端口号
# -v 是挂载到本地
# -e 是修改jenkins时间
通过docker ps 可以看到已经在本地启动成功,而且在本地jenkins_home下可以看到挂载的文件
2. 访问 http:127.0.0.1:8081
3. 因为之前已经把jenkins挂载到本地可以直接在本地的jenkins_home里找到密码
输入密码后,可以看到如下图
建议直接选择第二项,自己选择插件来安装
4. 创建管理用户,保存完成即可
权限与角色
因为jenkins本身提供的不足以满足我们对与权限的需求,所以还是需要安装插件来实现。另外jenkins本身是英文,对于国人来说还是中文更舒适,因此这个也需要安装插件
1. 插件目录
Manage Jenkins ->Manage Plugins -> Availble
2. 安装中文插件
3. 安装角色插件
4. 安装后重启
http://127.0.0.1:8081/restart/
选择是,就可以重启
重启成功后,可以看到界面变成来中文
5. 更改jenkins默认授权测试为Role-Based Strategy
系统管理-> 全局安全配置
6. 新建角色
在系统管理选择Manage and Assign Role
新建角色
新建一个全局角色,base_role:给他赋可读权限;
新建两个子角色(项目的权限),A组和B组,A组成员可以看到test开头的项目,B组成员可以看到product开头的项目;
7. 新建两个用户,并且分别给它分配A组和B组权限
新增用户-test 和prodcut用户
分配权限- test和prodcut分配全局权限,test分配A组,prodcut分配B组
8. 测试
1. 分别新建两个项目,test开头和prodcut开头的项目
可以看到root用户可以看到两个项目
2. 登录test用户,查看项目
3. 登录product用户,查看项目
Credentials Binding Plugin(用户授权和凭证)
因为在生产中,jenkins经常需要和外部的一些系统打交道,常见的场景是需要从gitlab中拉取代码、构建、部署,所以需要配置一下凭证才可以完成。
Jenkins 提供多种类型的凭证,常用的就两种,
1.用户和密码
2. 通过SSH private key的方式
下面就演示一下第一种方式
1. 添加凭证
2. 使用该账号从git拉下代码测试一下
1.测试前需要安装gitlab的插件
2. 新建一个自由风格的项目,配置gitlab的url,拉取项目
可以看到,构建成功
Pipline构建
Jenkins原生只提供自由风格的构建,但是在实际生产中更多的使用的是Pipline的构建。
1. 安装插件
2. 新建Pipeline风格的项目
3. 写一个pipeline的脚本测试一下
小技巧:pipeline语法生成器
因为pipeline 是一种脚本语言,如果我们只是使用的话不需要掌握太深,只要会用就行。jenkins也为我们提供了大量的事例以及语法生成器,具体可以参考如下:
可以选择界面的方式,也可以选择在把把脚本写入Jenkinsfile放在项目根目录
pipeline {
agent any
stages {
stage('git pull') {
steps {
echo 'git pull'
}
}
stage('build ') {
steps {
echo 'build'
}
}
stage('deploy ') {
steps {
echo 'deploy'
}
}
}
}
方法一:
方法二
4. 开始构建- 可以看到构建的整个过程
5. 设置构建时的参数化
# 可以通过 ${branch} 的方式获取到build传递过来的参数
pipeline {
agent any
stages {
stage('git pull') {
steps {
git branch: '${branch}', credentialsId: '33b48af2-4976-457b-b68c-74193358afcb', url: 'http://git.longhu.net/maas-qa/wucap_web.git'
}
}
stage('build ') {
steps {
echo 'build1'
}
}
}
post {
always {
emailext (
subject: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
body: '${FILE,path="email.html"}',
to: "759275499@qq.com",
from: "jwcu1992@163.com"
)
}
}
}
设置完的界面如下,可以直接选择分支构建即可
构建后发送邮件
1. 安装邮件相关的插件
因为jenkins自带的邮件通知不太完善,所以还是需要下载特定的邮件插件- Email Extension Template , 重启后生效
2. 配置jenkins 关于邮件相关的
首先:进入系统管理- 系统配置页面
在系统管理员邮件地址栏填写自己的邮箱地址
其次:Extended E-mail Notification 做如下配置
SMTP server: 就是你自己邮箱的smtp默认的服务器地址,因为我的是163邮箱所以默认是这个
SMTP Port:465 因为我下面开启了Use SSL,所以默认端口号就是465
Use SSL 期望勾上
Default user e-email suffix: 默认用户邮箱后缀
Default Content Type: 默认内容类型
Default Recipients: 默认接受者,通过逗号分开
Reply To List: 回复者列表
再而可以通过配置 “邮件通知” 来测试一下
可以看到测试成功了
最后写入邮件模版并且把它放到项目跟目录,并且Jenkinsfile引入即可
email.html模板
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td>以下为${PROJECT_NAME }项目构建信息</td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称:${PROJECT_NAME}</li>
<li>构建编号:第${BUILD_NUMBER}次构建</li>
<li>触发原因:${CAUSE}</li>
<li>构建状态:${BUILD_STATUS}</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>
<li>SonarQube结果:http://sonar****** </li>
<li>代码覆盖率结果:http://**/job/${PROJECT_NAME}/${BUILD_NUMBER}/jacoco/ </li>
</ul>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">历史变更记录:</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
${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>
</table>
</body>
</html>
Jenkinsfile文件
pipeline {
agent any
stages {
stage('git pull') {
steps {
git branch: 'test1', credentialsId: '122dbcaf-e271-4357-a89a-2be183b12b3c', url: 'http://git.longhu.net/maas-qa/wucap_web.git'
}
}
stage('build ') {
steps {
echo 'build1'
}
}
stage('deploy ') {
steps {
echo 'deploy'
}
}
}
post {
always {
emailext (
subject: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
body: '${FILE,path="email.html"}',
to: "759275499@qq.com",
from: "jwcu1992@163.com"
)
}
}
}
所有一切准备好后,代码提交就可以通过构建看到效果
over