学习笔记
- 一、Jenkins
- 1.1、Jenkins的作用
- 二、下载安装
- 2.1、安装环境
- 2.2、安装GitLab
- 2.3、安装Jenkins
- 三、Jenkins + Git + Maven 部署配置
- 3.1、安装maven插件
- 3.2、新建项目
- 3.3、自动发布到测试服务器
- 四、publish over ssh 配置
- 4.1、超时机制
- 4.2、shell的日志输出
- 4.3、运行前清理
- 五、自动化配置
- 5.1、Webhooks
- 5.2、定时拉取
- 六、邮件通知
一、Jenkins
Jenkins,原名 Hudson,2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。
1.1、Jenkins的作用
官方网站
二、下载安装
2.1、安装环境
master | slave1 | slave2 | |
---|---|---|---|
作用 | Jenkins服务器 | GitLab服务器 | 测试服务器 |
ip | 192.168.3.34 | 192.168.3.35 | 192.168.3.36 |
内存 | 1G | 7.5G | 1G |
线程数 | 2 | 4 | 2 |
2.2、安装GitLab
本文采用dacker安装GitLab(GitLab默认占用80,我不喜欢而且ssh安装过于繁琐了)
docker 安装教程
添加容器
docker run --detach \
--hostname 192.168.3.35 \
--publish 443:443 --publish 8080:80 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab:Z \
--volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
--volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
--shm-size 256m \
registry.gitlab.cn/omnibus/gitlab-jh:latest
启动容器
docker start gitlab
查看已存在的容器
docker ps -a
进入容器
docker exec -it gitlab /bin/bash
输入192.168.3.35:8080
进行访问
当首次运行出现502错误的时候
- 被拒绝访问了 再等等 还在加载中
- 访问成功但502了 也稍微再等等 还是在加载 刷新一会 就好了
- 虚拟机内存不够
使用管理员账号登录
用户名:root
密码存在下面文件中,登录后需要改密码不然24小时之后会失效
cat /etc/gitlab/initial_root_password
2.3、安装Jenkins
官方文档
前提需要:
Java 8 ( JRE 或者 JDK 都可以) linux安装JDK教程
Maven linux安装Maven教程
Git yum install git
Jenkins WAR包下载
将下载好的war包上传到master服务器
运行
java -jar jenkins.war
首次启动war包会在当前路径下生成配置文件.jenkins
(隐藏)
同时控制台生成一串密码 密码文件使用后会自动删除
待完全启动成功后 访问服务器8080端口(默认)完成配置
三、Jenkins + Git + Maven 部署配置
3.1、安装maven插件
在Manage Jenkins下点击Manage Plugins
可选插件搜索maven 选择 Maven Integration
3.2、新建项目
新建item 选择maven项目
创建成功以后 选择源码管理 选择Git
填上需要拉取的分支
选择Build
进行Maven配置
配置完成回来之后那个提示也不会消失,不用管
在Root POM中添加到具体项目的Pom路径
完成
回到首页点击运行
点击历史 可以查看本次详情
3.3、自动发布到测试服务器
安装插件
配置系统:
Manage Jenkins->Configure System ->Publish over SSH->新增
配置完成点击Test Configuration出现success则能连通
更新项目配置
选择 Post Steps ->Add post-build step ->Send files or execute commands over SSH
四、publish over ssh 配置
4.1、超时机制
输出命令时一定要注意不要让窗口卡住,不然Jenkins会认为认为一直没完成
官方默认2分钟
4.2、shell的日志输出
nohup java -jar /root/jar/EXArea02*.jar >mylog.log 2>&1 &
数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据传输到其他地方
标准输入(stdin):代码为0,使用<或<<;
标准输出(stdout):代码为1,使用>或>>;
标准错误输出(stderr):代码为2,使用2>或2>>
> 覆盖写
>> 追加写
4.3、运行前清理
item配置 选择Pre Steps
上面爆红的选项不用管 官方解释的是可以2选1 或者都选
#!/bin/bash
#删除历史数据
rm -rf /root/jar
appname=$1
#获取传入的参数
echo "arg:$1"
#获取正在运行的jar包pid
pid=`ps -ef | grep $1 | grep 'java -jar' | awk '{printf $2}'`
echo $pid
#如果pid为空,提示一下,否则,执行kill命令
if [ -z $pid ];
#使用-z 做空值判断
then
echo "$appname not started"
else
kill -9 $pid
echo "$appname stoping...."
check=`ps -ef | grep -w $pid | grep java`
if [[ -z $check ]];
then
echo "$appname pid:$pid is stop"
else
echo "$appname stop failed"
fi
fi
五、自动化配置
目前来说每一次push代码都要手动合并分支,再到Jenkins手动提交任务
5.1、Webhooks
安装插件用于免密登入Jenkins
在Jenkins项目里选择配置->构建触发器->选择 触发远程构建 (例如,使用脚本)密码自己设置
正常地址:http://192.168.3.34:8080/job/first/build?token=root123 这个需要登入才能运行
装上插件以后的地址
http://192.168.3.34:8080/buildByToken/build?job=first&token=root123
回到GitLab上
如果出现
菜单->管理员->设置->网络->设置->出站请求
然后在重新添加一遍Webhooks
5.2、定时拉取
Jenkins cron不是标准的cron表达式
第一个 * 表示每个小时的第几分钟,取值0~59
H * * * *
H:每小时执行一次
第二颗 * 表示小时,取值0~23
* 15 * * * 表示每天下午3点
* 1 * * * 表示每天凌晨1点
第三颗 * 表示一个月的第几天,取值1~31
* 1 5 * * 表示每月5日凌晨1点
第四颗 * 表示第几月,取值1~12
* 15 5 1 * 表示每年几月执行
第五颗 * 表示一周中的第几天,取值0~7,其中0和7代表的都是周日
H * * * *`表示一小时内的任意时间
*/10 * * * * 每10分钟
H/10 * * * * 每10分钟,可能是7,17,27,起始时间hash,步长不变
45 3 * * 1-6 每个周一至周六,凌晨3点45 执行1次
45 3-5 * * 1-6 每个周一至周六,凌晨3点45 ,凌晨4点45,凌晨5点45 各执行1次
H(40-48) 3-5 * * 1-6 在40~48之间取值 其他同上
45 3-5/2 * * 1-6 每个周一至周六,凌晨3点45 ,凌晨5点45 各执行1次
45 0-6/2 * * 1-6 * * 1-6 0点开始,每间隔2小时执行一次 0:45、2:45、4:45
六、邮件通知
需要有POP3/SMTP的邮箱
在Configure System进行设置 填入邮箱地址