邯郸建设局公开网站,公司网站建立教程,ai生成建筑网站,自动写作网站Jenkins笔记 文章目录Jenkins笔记[toc]一、安装Jenkinsdocker 安装 JenkinsJava启动war包直接安装二、配置mavenGit自动构建jar包三、自动化发布到测试服务器运行超时机制数据流重定向编写清理Shell脚本四、构建触发器1. 生成API token2. Jenkins项目配置触发器3. 远程Git仓库配…Jenkins笔记
文章目录Jenkins笔记[toc]一、安装Jenkinsdocker 安装 JenkinsJava启动war包直接安装二、配置mavenGit自动构建jar包三、自动化发布到测试服务器运行超时机制数据流重定向编写清理Shell脚本四、构建触发器1. 生成API token2. Jenkins项目配置触发器3. 远程Git仓库配置WebHooks4. 几种构建方式5. 定期构建cron表达式6. Poll SCM轮询五、配置邮箱接收构建信息1. 设置管理员邮箱发件邮箱2. Jenkins邮件设置配置**3.邮件设置中的坑**
一、安装Jenkins
docker 安装 Jenkins 拉取稳定版Jenkins镜像 注意 docker拉取镜像的时候要拉取 jenkins/jenkins 而不是jenkins 要装稳定版否则后面会有很多插件装不上 docker pull jenkins/jenkins:lts挂载对应的容器卷 #给需要挂载的文件夹授权
mkdir jenkins_home
chmod 777 /docker/jenkins_home/#启动容器
docker run -d -p 8090:8080 -p 8091:50000 --privilegedtrue --name jenkins_8090 -v /docker/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime 55860ee0cd73-d 后台运行镜像
-p 8090:8080 将镜像的8080端口映射到服务器的8090端口。
-p 8091:50000 将镜像的50000端口映射到服务器的8091端口
-v /data/jenkins_home:/var/jenkins_home /var/jenkins_home目录为容器jenkins工作目录我们将硬盘上的一个目录挂载到这个位置方便后续更新镜像后继续使用原来的工作目录。这里我们设置的就是上面我们创建的 /data/jenkins_home目录
-v /etc/localtime:/etc/localtime让容器使用和服务器同样的时间设置。
–name jenkins_8090 给容器起一个别名
http://mirror.esuni.jp/jenkins/updates/update-center.json修改插件下载镜像源为清华镜像可以先直接尝试一下是否可以安装成功 # 修改xml
vim jenkins_home/hudson.model.UpdateCenter.xml
#将 urlhttps://updates.jenkins.io/update-center.json/url替换为 urlhttp://mirror.esuni.jp/jenkins/updates/update-center.json/url
http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json# 修改jenkins/updetes/default.json文件
①把“http://www.google.com/” 改成 “http://www.baidu.com/”
②把“https://updates.jenkins.io/download” 全部替换成 “http://mirrors.tuna.tsinghua.edu.cn/jenkins”sed -i s#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g default.json
sed -i s#https://www.google.com#https://www.baidu.com#g default.jsonsed -i s#https://updates.jenkins.io/download#https://mirrors.huaweicloud.com/jenkins#g default.json sed -i s#http://www.google.com#https://www.baidu.com#g default.json http://ip:9090/pluginManager/advanced
https://cdn.jsdelivr.net/gh/jenkins-zh/update-center-mirror/tsinghua/current/update-center.json# 重启服务docker stop jenkins_8090docker start jenkins_8090 访问web页面 http://IP:8090/ 去查看第一次登录的密码 #查看输出日志
docker logs jenkins_8090#在日志中会有一段密码
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:800c8b5201284979a1ea16c1893358d5This may also be found at: /var/jenkins_home/secrets/initialAdminPassword#或者也可以去它上面给的地址中查看密码
将密码填入上面的文本框中等待一会后,开始安装插件 我这里选择的是按照推荐安装 后续需要通过maven来构建我们的项目所以需要在容器内安装mavne # 将maven下载好后解压
unzip /mavne/apache-maven-3.8.6 -d ./# 修改maven的镜像源
vim /mavne/apache-maven-3.8.6/conf/setting.xml#将里面的镜像换为阿里云镜像
mirror
idalimaven/id
namealiyun maven/name
urlhttp://maven.aliyun.com/nexus/content/groups/public//url
mirrorOfcentral/mirrorOf
/mirror#增加软连接 不需要进入到原来的路径也可以验证Maven安装
ln -s /maven/apache-maven-3.8.6/bin/mvn /usr/local/bin/mvn#验证是安装成功
mvn -v
Java启动war包直接安装 下载适合的war包 https://mirrors.jenkins.io/war-stable/ 我这里用的jdk1.8 所以下载的版本为jenkins 2.346.1 利用java命令启动 touch temp.txt
# 这种方式会在后台运行 不会被关闭
nohup java -jar jenkins.war --httpPort8090 temp.txt 访问 ip:8090 后续操作同上4⃣️
二、配置mavenGit自动构建jar包 安装maven插件 安装好后进入新增item出现小猫头鹰即安装成功 创建一个任务 选择Git 此时下面会提示git连接错误 可以配置下凭证 安装git yum install -y git
# 安装完毕后验证一下
git --verison设置需要构建的分支 配置maven路径 配置安装的maven路径 设置需要构建的pom文件路径 保存后开始构建 可以在构建中看到控制台输出记得将maven的镜像地址换成阿里云地址
三、自动化发布到测试服务器运行 安装服务器连接插件 Publish Over SSH 进入配置后管理界面 选择这个选项 配置测试服务器连接 因为我们需要增加一台远程服务器所以我们需要做一些配置信息 添加一台远程服务器 此时在原先的地方就有了我们刚添加的服务器 配置相关数据 构建前Pre Steps 构建后Post Steps 超时机制 启动脚本问题会导致超时从而导致启动不成功 可以设置超时时间为0 这样就可以不会因为超时而不成功
nohup java -jar /jenkins/build_jar/first1/*.jar
# 这条语句会超时原因是因为没有指明日志输出到哪里控制台会一直等待#修改为如下
nohup java -jar /jenkins/build_jar/first1/*.jar /jenkins/build_jar/first1/mylog.log 21 # 也可以简化为
nohup java -jar /jenkins/build_jar/first1/*.jar /jenkins/build_jar/first1/mylog.log
数据流重定向
数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据传输到其他地方
# 标准输入:代码为0使用或者
# 标准输出:代码为1使用或者
# 标准错误输出:代码为2使用2或者2
# 若以输出到一个已存在的文件中那么这个文件会被覆盖
# 覆盖写
# 追加写编写清理Shell脚本
jps|grep -v Jps|awk {print $1}#将 xxxx写入xxx.txt
echo xxxxxxx.txt#!/bin/bash#获取程序运行的pid
ps -ef|grep jenkins_demo #会获取到两条记录 有一条是grep的数据#利用grep -v 再次过滤 grep -v 需要过滤掉的信息
ps -ef|grep jenkins_demo|grep -v grep#利用grep 需要的信息 进行过滤
ps -ef|grep jenkins_demo|grep SNAPSHOT#获取打印出来的信息的第二列数据PID
ps -ef|grep jenkins_demo|grep SNAPSHOT|awk {printf $2}
部署前shell操作删除原来的包,同时关闭上一次运行的pid
#!/bin/bash
#删除原来的包
rm -rf /jenkins/build_jar/first1#传入一个参数
appname$1
if [ -z $appname ]
thenappnamejenkins_demo
fi
echo $appname#获取pid
pidps -ef | grep $appname | grep java -jar | awk {printf $2}echo $pid#如果pid为空的话,提示一下,否则执行kill命令
if [ -z $pid ]
#使用-z来判断是否是空值
thenecho $appname not started
elsekill -9 $pidecho $appname stoping...
fi#再次精准匹配 查看是否已经kill完 -w是精准匹配
checkps -ef|grep -w $pid |grep java
if [ -z $check ]
thenecho $appname pid:$pid is stop
elseecho $appname stop Failed
fi配置构建前执行shell脚本 此时构建的话Jenkins会自动帮我们删除以前的版本数据同时kill掉以前运行的pid
四、构建触发器
触发器可以通过一些事件触发Jenkins的自动构建如上传代码合并代码等。
1. 生成API token 1.1 进入jenkins安全设置开启安全域及授权策略 配置开启 1.2 生成api token
2. Jenkins项目配置触发器 2.1 选择测试项目-配置-构建触发器选择触发远程构建将token粘贴在身份验证令牌处保存 2.2 通过访问 JENKINS_URL/job/first/build?tokenTOKEN_NAME 观察项目是否进入构建队列
3. 远程Git仓库配置WebHooks
GitLab GitHub同理 3.1在Jenkins中安装Gitee插件同上 3.2在项目设置中配置Gitee令牌地址等 3.3增加webHooks管理 3.4添加post地址和token 这里的地址直接用上面Jenkins的链接token则是刚才生成的密码 3.5尝试重新上传代码可以发现现在会自动触发构建
4. 几种构建方式 1、快照依赖构建/Build whenever a SNAPSHOT dependency is built
当依赖的快照被构建时执行本job
2、触发远程构建 (例如,使用脚本)
远程调用本job的restapi时执行本job
3、job依赖构建/Build after other projects are built
当依赖的job被构建时执行本job
4、定时构建/Build periodically
使用cron表达式定时构建本job
5、向GitHub提交代码时触发Jenkins自动构建/GitHub hook trigger for GITScm polling
Github-WebHook出发时构建本job
6、定期检查代码变更/Poll SCM
使用cron表达式定时检查代码变更变更后构建本job
5. 定期构建cron表达式
在构建中Build periodically与Poll SCM接收的参数都是cron表达式
与标准的cron表达式不同没有秒字段
cron表达式网站
第一个 * 表示每个小时的第几分钟取值0~590 */1 * * *
H每小时0分执行一次第二颗 * 表示小时取值0~23* 15 * * * 表示每天下午3点
* 1 * * * 表示每天凌晨1点第三颗 * 表示一个月的第几天取值1~31
* 1 5 * * 表示每月5日凌晨1点第四颗 * 表示第几月取值1~12
* 15 5 1 * 表示每年一月5日15时的每一分钟执行第五颗 * 表示一周中的第几天取值0~7其中0和7代表的都是周日
H hash散列 hash散列值以job名取值获取到以job名为入参的唯一值相同名称值也相同这个偏移量会和实际时间相加获得一个真实的运行时间。 意义在于不同的项目在不同的时间运行即使配置的值是一样的比如 都是15 * * * * 表示每个小时的第15分钟开始执行任务那么会造成同一时间内在Jenkins中启动很多job换成H/15 * * * *,那么在首次启动任务时会有随机值参与进来有的会在17分钟启动 有的会在19分钟启动随后的启动时间也是这个值。这样就能错开相同cron值的任务执行减轻同一时间拉起的Job太多。 H的值也可以设置范围 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 * * * 0点开始6点结束每间隔2小时执行一次 0:45、2:45、4:45、6:45 如图 配置后会每天凌晨两点的某一分钟为我们构建 H 2 * * *
6. Poll SCM轮询
这个是由Jenkins服务发起对远程git仓库的访问比较配置的分支上是否有新的内容如果有则会发起一次构建轮询频率控制是通过cron表达式控制。 五、配置邮箱接收构建信息
1. 设置管理员邮箱发件邮箱 1.1 登录163邮箱进入邮箱协议设置 1.2 获取授权密码(ZSJRNM*********)
2. Jenkins邮件设置配置 在管理界面Configure System中 此时可以点击下面的发送邮件测试是否能成功发送 在项目管理里配置构建后邮件通知 重新构建项目可以看到已经有短信通知了
3.邮件设置中的坑 点击发送测试信息的时候提示**AuthenticationFailedException: 550 User has no permission**错误 那就是授权出现了错误此时就需要重新获取授权码再授权一次但记得邮箱设置页面中已获得授权的设备一定要记得删除防止自己的邮箱账号被盗 点击发送测试信息的时候提示MailConnectException: Couldnt connect to host, port: smtp.163.com, 25; timeout 60000; 这个话是因为可能你使用的是Linux服务器防火墙25端口没有开有两种解决办法 1.开启防火墙25端口 注意如果你和我一样使用的为阿里云服务器的话阿里云为了安全考虑默认是关闭25端口的如果你想要开启的话需要提交申请审批大概需要3-5天 2.使用SSL协议号 下面配上网易163邮箱的相关服务器信息 我这里使用的是465端口同时启用SSL协议 点击发送测试信息的时候提示MessagingException: Got bad greeting from SMTP host: smtp.163.com, port: 465, response: [EOF],则查看使用的端口是否需要使用SSL协议 用来发送的邮箱要和管理员设置的邮箱一致 这样就可以开开心心的发邮件啦以上这些坑不幸的我都踩到了