Jenkins部署及使用

官网 jenkins.io
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

1.安装准备

装备1台服务器 关闭selinux和防火墙
内存2G 50G+硬盘
jenkins 10.0.0.101

2.安装JDK运行环境和jenkins服务

上传JDK和jenkins rpm安装包,使用rpm ‐ivh进行安装,安装完JDK运行java测试是否安装成功
rpm ‐ivh jdk‐8u181‐linux‐x64.rpm
rpm ‐ivh jenkins‐2.99‐1.1.noarch.rp

3.配置jenkins

启动用户修改为root
JENKINS_USER="root"
[root@CentOS7 ~]# systemctl start jenkins
[root@CentOS7 ~]# systemctl enable jenkins

ps:启动Jenkins时,默认启动方式在配置文件中是Jenkins普通用户身份,本次测试环境在内网使用,不使用普通用户,则需要改为root用户。
[root@Jenkins ~]rpm -ql jenkins
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins
[root@Jenkins ~]vim /etc/sysconfig/jenkins 
[root@Jenkins ~]netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1145/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1236/master         
tcp6       0      0 :::8080                 :::*                    LISTEN      16717/java          
tcp6       0      0 :::22                   :::*                    LISTEN      1145/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1236/master         
[root@Jenkins ~]systemctl enable jenkins
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on

访问页面进行配置
http://10.0.0.101:8080


图片.png
图片.png

重新配置一下密码,保存后重新登录(密码:123)
图片.png

图片.png

图片.png

4.插件安装(跳过安装插件,直接上传插件到目录)、修改登录密码及使用

1.自动安装可选插件
2.手动下载插件上传安装
3.插件放入插件目录
[root@Jenkins ~]cd /var/lib/jenkins/
[root@Jenkins jenkins]ll #jobs为每次构建后构建的结果目录,plugins为插件目录
总用量 36
-rw-r--r-- 1 root root 1644 11月 28 21:02 config.xml
-rw-r--r-- 1 root root  156 11月 28 20:50 hudson.model.UpdateCenter.xml
-rw------- 1 root root 1712 11月 28 20:50 identity.key.enc
-rw-r--r-- 1 root root    7 11月 28 21:02 jenkins.install.InstallUtil.lastExecVersion
-rw-r--r-- 1 root root    7 11月 28 21:02 jenkins.install.UpgradeWizard.state
-rw-r--r-- 1 root root  171 11月 28 20:50 jenkins.telemetry.Correlator.xml
drwxr-xr-x 2 root root    6 11月 28 20:50 jobs
drwxr-xr-x 3 root root   19 11月 28 20:50 logs
-rw-r--r-- 1 root root  907 11月 28 20:50 nodeMonitors.xml
drwxr-xr-x 2 root root    6 11月 28 20:50 nodes
drwxr-xr-x 2 root root    6 11月 28 20:50 plugins
-rw-r--r-- 1 root root   64 11月 28 20:50 secret.key
-rw-r--r-- 1 root root    0 11月 28 20:50 secret.key.not-so-secret
drwx------ 4 root root 4096 11月 28 20:54 secrets
drwxr-xr-x 2 root root   67 11月 28 20:56 updates
drwxr-xr-x 2 root root   24 11月 28 20:50 userContent
drwxr-xr-x 3 root root   55 11月 28 20:50 users

上传插件包解压到plugins下执行重启 systemctl restart jenkins

4.jenkins主要的目录

/usr/lib/jenkins/:jenkins安装目录,WAR包会放在这里
/etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置
/var/lib/jenkins/:默认的JENKINS_HOME
/var/log/jenkins/jenkins.log:Jenkins日志文件

5.创建一个自由风格的项目freestyle‐job
图片.png

丢失旧的构建
图片.png

执行一条shell命令、查看运行的当前路径,构建后的产物存储在/var/lib/jenkins/workspace/
图片.png
6.jenkins获取git源码,这里我们由码云导入一个HTML页面的监控平台到gitlab仓库
图片.png

jenkins端配置从git获取代码,由于我们dev用户是配置在jenkins上,所以无需认证即可下载代码

7.执行立即构建获取到代码
图片.png

此时代码被拉到Jenkins服务器本地中

[root@Jenkins ~]cd /var/lib/jenkins/workspace/freestyle_job
[root@Jenkins freestyle_job]ll
总用量 1364
-rw-r--r--  1 root root  1208 11月 29 14:52 404.html
-rw-r--r--  1 root root 27249 11月 29 14:52 alerts.html
drwxr-xr-x  5 root root    64 11月 29 14:52 assets
-rw-r--r--  1 root root 34972 11月 29 14:52 buttons.html
-rw-r--r--  1 root root 38472 11月 29 14:52 calendar.html
-rw-r--r--  1 root root 36402 11月 29 14:52 charts.html
-rw-r--r--  1 root root 87824 11月 29 14:52 components.html
-rw-r--r--  1 root root 68329 11月 29 14:52 content-widgets.html
drwxr-xr-x  2 root root  4096 11月 29 14:52 css
-rw-r--r--  1 root root 24976 11月 29 14:52 deviceManager.html
-rw-r--r--  1 root root 34930 11月 29 14:52 dianfei.html
-rw-r--r--  1 root root 33003 11月 29 14:52 efficiencyAnalysis.html
-rw-r--r--  1 root root 27158 11月 29 14:52 energy_consumption.html
-rw-r--r--  1 root root 25419 11月 29 14:52 file-manager.html
drwxr-xr-x  6 root root   240 11月 29 14:52 fonts
-rw-r--r--  1 root root 62928 11月 29 14:52 form-components.html
-rw-r--r--  1 root root 33233 11月 29 14:52 form-elements.html
-rw-r--r--  1 root root 40152 11月 29 14:52 form-examples.html
-rw-r--r--  1 root root 48175 11月 29 14:52 form-validation.html
-rw-r--r--  1 root root 78059 11月 29 14:52 images-icons.html
drwxr-xr-x 16 root root  4096 11月 29 14:52 img
-rw-r--r--  1 root root 68654 11月 29 14:52 index.html
drwxr-xr-x  8 root root  4096 11月 29 14:52 js
-rw-r--r--  1 root root 56647 11月 29 14:52 keyInfo.html
  w-r--r--  1 root root 25676 11月 29 14:52 labels.html
-rw-r--r--  1 root root 18041 11月 29 14:52 LICENSE
-rw-r--r--  1 root root 38366 11月 29 14:52 list-view.html
-rw-r--r--  1 root root  4155 11月 29 14:52 login.html
drwxr-xr-x  2 root root    35 11月 29 14:52 media
-rw-r--r--  1 root root 32897 11月 29 14:52 media.html
-rw-r--r--  1 root root 40070 11月 29 14:52 messages.html
-rw-r--r--  1 root root   335 11月 29 14:52 mstp_105_SuperAdmin.iml
-rw-r--r--  1 root root 29295 11月 29 14:52 mstp_map.html
-rw-r--r--  1 root root 41855 11月 29 14:52 other-components.html
-rw-r--r--  1 root root 51611 11月 29 14:52 profile-page.html
-rw-r--r--  1 root root   335 11月 29 14:52 QHME.iml
-rw-r--r--  1 root root   843 11月 29 14:52 readme.md
-rw-r--r--  1 root root 33594 11月 29 14:52 real-time.html
-rw-r--r--  1 root root 58365 11月 29 14:52 sa.html
-rw-r--r--  1 root root 24713 11月 29 14:52 tables.html
-rw-r--r--  1 root root 41609 11月 29 14:52 typography.html
-rw-r--r--  1 root root 22720 11月 29 14:52 userMng.html
8.写一个脚本把从git仓库里获取的代码上传到web服务器站点目录下
[root@Jenkins ~]mkdir /server/scripts -p
[root@Jenkins ~]cd /server/scripts
[root@Jenkins scripts]vim deploy.sh
#!/bin/sh
DATE=$(date +%Y-%m-%d-%H-%M-%S)
CODE_DIR="/var/lib/jenkins/workspace/freestyle_job"
WEB_DIR="/usr/share/nginx/"

get_code_tar(){
        cd $CODE_DIR && tar zcf /opt/web-${DATE}.tar.gz ./*
}

scp_code_web(){
        scp /opt/web-${DATE}.tar.gz 10.0.0.20:$WEB_DIR
}

code_tarxf(){
        ssh 10.0.0.20 "cd $WEB_DIR &&mkdir web-${DATE} && tar xf web-${DATE}.tar.gz -C web-${DATE}"

}
ln_html(){
         ssh 10.0.0.20 "cd $WEB_DIR && rm -rf html && ln -s web-${DATE} html && rm -rf web-${DATE}.tar.gz"
}

main(){

        get_code_tar;
        scp_code_web;
        code_tarxf;
        ln_html;
}
main
9.使用jenkins调用部署脚本(此处写脚本全路径脚本名称)测试
图片.png

执行脚本需要Jenkins10.0.0.101远程连接web10.0.0.20,故需要与web服务器做免密码认证

[root@Jenkins ~]ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.20

在Jenkins中立即构建,显示执行成功
图片.png

此时访问10.0.0.20web服务器,页面访问如下,即Jenkins成功将代码推送到web服务器中。
图片.png
10.配置自动触发构建、需要设置安全令牌Secret token
图片.png
图片.png
11.克隆代码到master上更改代码后进行推送测试是否自动触发
[root@Gitlab ~]git clone git@10.0.0.100:test/monitor.git
[root@Gitlab ~]ll
总用量 4
drwxr-xr-x 3 root root   34 11月 28 15:03 git_data
drwxr-xr-x 9 root root 4096 11月 29 20:51 monitor
[root@Gitlab ~]cd monitor/
[root@Gitlab monitor]vim index.html
[root@Gitlab monitor]git add .
[root@Gitlab monitor]git commit -m "modify index.html v1.1"
[root@Gitlab monitor]git push -u origin master

克隆并更改代码进行推送,刷新web发现代码更改信息已成功,即自动化构建配置完成。
图片.png
12.配置jenkins返回构建状态到gitlab

系统管理‐系统设置选项下
图片.png

进行认证配置进入gitlab点击用户设置找到访问令牌Access Tokens
图片.png
图片.png
图片.png
图片.png
下一步设置项目中的执行后操作。然后进行构建测试返回结果
图片.png

查看测试结果
图片.png

5.jenkins集成微信

工作中档git有新代码提交会触发钩子自动完成上线,运维和开发人员不须时刻盯着jenkins,通过微信的方式显示给运维和开发人员

①. 注册微信企业公众号

搜索微信公众平台->注册->选择企业微信
图片.png

选择完成后把下面信息进行完善->使用自己微信扫描二维码进行管理后-点注册
图片.png
图片.png

注册成功登陆后点击应用管理->创建应用
图片.png

上一张图片->填写应用名称-可见范围->创建应用-保存好agentld和secret写入py脚本
图片.png

更改py脚本内对应的内容-touser为账号名称
[root@Jenkins freestyle_job]cd /server/scripts/
[root@Jenkins scripts]# ll
总用量 4
-rw-r--r-- 1 root root 611 11月 29 20:11 deploy.sh
[root@Jenkins scripts]rz -E
rz waiting to receive.
[root@Jenkins scripts]ll
总用量 8
-rw-r--r-- 1 root root  611 11月 29 20:11 deploy.sh
-rw-r--r-- 1 root root 2008 11月 17 18:49 jenkins_notify.py
[root@Jenkins scripts]# vim jenkins_notify.py
图片.png

Corpid为企业ID 这里只把corpid写入对应的位置
图片.png
配置jenkins

1.由于jenkins没有官网的插件来完成此功能,所以我们只能用网络上一些开源的插件(已集合在plugins)
github下载代码
https://github.com/daniel-beck/changelog-environment-plugin
解压到某个目录-》进入目录执行以下操作
cd 到 changelog-environment-plugin-master 下,执行
mvn verify
时间较长,会在changelog-environment-plugin-master/target/下有个changelog-environment.hpi文件,上传到
jenkins即可使用
2.配置jenkins
jenkins进入到项目中->构建环境多了Add Changelog Information to Environment->点击选择

图片.png
图片.png

构建后操作选择Post build task (需要安装插件,之前已经安装好了)如果没有此选择请安装Hudson Post build task 插件,SCM_CHANGELOG须安装changelog插件,上传py脚本->jenkins服务器上安装python requests模块
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install python-pip
pip2.7 install requests
图片.png

echo {SCM_CHANGELOG} > /tmp/{JOB_NAME}_change.log
python /server/scripts/jenkins_notify.py {BUILD_URL} /tmp/{JOB_NAME}_change.log {JOB_NAME} rm -fv /tmp/{JOB_NAME}_change.log

[root@Jenkins scripts]# yum -y install python-pi
[root@Jenkins scripts]# pip2.7 install requests
图片.png

6.参数化构建,通过tag传递参数达到发布和代码回滚的操作

图片.png

接下来测试一下设置的变量,执行的界面自动变成参数化执行


图片.png

图片.png

注: 接下来安装插件、在可选插件中搜索Git Parameter 直接安装即可,已安装则忽略次步骤
进入到项目把前面的参数化去掉重新选择使用git parameter


图片.png

下一步把git拉取代码的master更改为$git_version变量
图片.png

添加两个参数选项变量deploy和rollback选项
图片.png

下一步修改脚本的传参

[root@Jenkins scripts]# cat deploy.sh

!/bin/sh

DATE=git_version CODE_DIR=WORKSPACE
WEB_DIR="/usr/share/nginx/"

get_code_tar(){
cd CODE_DIR && tar zcf /opt/web-{DATE}.tar.gz ./*
}

scp_code_web(){
scp /opt/web-{DATE}.tar.gz 10.0.0.20:WEB_DIR
}

code_tarxf(){
ssh 10.0.0.20 "cd WEB_DIR &&mkdir web-{DATE} && tar xf web-{DATE}.tar.gz -C web-{DATE}"

}
ln_html(){
ssh 10.0.0.20 "cd WEB_DIR && rm -rf html && ln -s web-{DATE} html && rm -rf web-${DATE}.tar.gz"
}

main(){
get_code_tar;
scp_code_web;
code_tarxf;
ln_html;
}
if [ deploy_env == "deploy" ];then main elif [deploy_env == "rollback" ];then
ln_html
fi
当重复执行构建后会生成多个相同版本的文件,利用jenkins变量值解决重复性构建问题
jenkins变量

  1. GIT_COMMIT 当前版本提交产生的哈希唯一值
  2. GIT_PREVIOUS_SUCCESSFUL_COMMIT 已经提交过的版本的哈希唯一值
    使用以上两个值做比较,如果已提交则退出,如果没有提交过则继续执行构建,更改脚本做判断
if [ $deploy_env == "deploy" ];then
      if [ $GIT_COMMIT == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
           echo "$git_version  此版本已经提交 禁止重复构建"
      else
        main
      fi
elif
[ $deploy_env == "rollback" ];then
       ln_html
fi
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容