Mac环境下Jenkins学习笔记-Docker部署+角色分配+pipline构建+发送邮件

前言

最近抽空又把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下可以看到挂载的文件


image.png

image.png
2. 访问 http:127.0.0.1:8081
image.png
3. 因为之前已经把jenkins挂载到本地可以直接在本地的jenkins_home里找到密码
image.png

输入密码后,可以看到如下图


image.png

建议直接选择第二项,自己选择插件来安装


image.png
4. 创建管理用户,保存完成即可
image.png

权限与角色

因为jenkins本身提供的不足以满足我们对与权限的需求,所以还是需要安装插件来实现。另外jenkins本身是英文,对于国人来说还是中文更舒适,因此这个也需要安装插件

1. 插件目录

Manage Jenkins ->Manage Plugins -> Availble

2. 安装中文插件
image.png
3. 安装角色插件
image.png
4. 安装后重启

http://127.0.0.1:8081/restart/
选择是,就可以重启

image.png

重启成功后,可以看到界面变成来中文
image.png

5. 更改jenkins默认授权测试为Role-Based Strategy

系统管理-> 全局安全配置


image.png
6. 新建角色

在系统管理选择Manage and Assign Role


image.png

新建角色


image.png

新建一个全局角色,base_role:给他赋可读权限;
新建两个子角色(项目的权限),A组和B组,A组成员可以看到test开头的项目,B组成员可以看到product开头的项目;
image.png
7. 新建两个用户,并且分别给它分配A组和B组权限

新增用户-test 和prodcut用户


image.png

image.png

分配权限- test和prodcut分配全局权限,test分配A组,prodcut分配B组


image.png

image.png
8. 测试
1. 分别新建两个项目,test开头和prodcut开头的项目

可以看到root用户可以看到两个项目


image.png
2. 登录test用户,查看项目
image.png
3. 登录product用户,查看项目
image.png

Credentials Binding Plugin(用户授权和凭证)

因为在生产中,jenkins经常需要和外部的一些系统打交道,常见的场景是需要从gitlab中拉取代码、构建、部署,所以需要配置一下凭证才可以完成。
Jenkins 提供多种类型的凭证,常用的就两种,
1.用户和密码
2. 通过SSH private key的方式
下面就演示一下第一种方式

1. 添加凭证

image.png

image.png

2. 使用该账号从git拉下代码测试一下

1.测试前需要安装gitlab的插件

image.png

2. 新建一个自由风格的项目,配置gitlab的url,拉取项目
image.png

可以看到,构建成功

image.png

Pipline构建

Jenkins原生只提供自由风格的构建,但是在实际生产中更多的使用的是Pipline的构建。

1. 安装插件
image.png
2. 新建Pipeline风格的项目
image.png
3. 写一个pipeline的脚本测试一下

小技巧:pipeline语法生成器
因为pipeline 是一种脚本语言,如果我们只是使用的话不需要掌握太深,只要会用就行。jenkins也为我们提供了大量的事例以及语法生成器,具体可以参考如下:

image.png

image.png

image.png

可以选择界面的方式,也可以选择在把把脚本写入Jenkinsfile放在项目根目录

pipeline {
    agent any

    stages {
        stage('git pull') {
            steps {
                echo 'git pull'
            }
        }
        stage('build ') {
            steps {
                echo 'build'
            }
        }
        stage('deploy ') {
            steps {
                echo 'deploy'
            }
        }
    }
}

方法一:

image.png

方法二
image.png

方法二配置.png

更详细.png
4. 开始构建- 可以看到构建的整个过程
image.png
5. 设置构建时的参数化
image.png
# 可以通过 ${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"
            )
        }

    }
}

设置完的界面如下,可以直接选择分支构建即可

image.png

构建后发送邮件

1. 安装邮件相关的插件

因为jenkins自带的邮件通知不太完善,所以还是需要下载特定的邮件插件- Email Extension Template , 重启后生效

image.png

2. 配置jenkins 关于邮件相关的

首先:进入系统管理- 系统配置页面
在系统管理员邮件地址栏填写自己的邮箱地址

image.png

其次: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: 回复者列表
image.png

再而可以通过配置 “邮件通知” 来测试一下

可以看到测试成功了

image.png

最后写入邮件模版并且把它放到项目跟目录,并且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"
            )
        }

    }
}

所有一切准备好后,代码提交就可以通过构建看到效果


image.png

over

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容