type
status
date
slug
summary
password
tags
category
icon
Jenkins
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成
官方网站
使用前相关软件安装准备:
GitLab安装使用
安装所需最小配置
内存至少4G
在ssh下安装
1 安装依赖
2 配置镜像
3 开始安装
除非您在安装过程中指定了自定义密码,否则将随机生成一个密码并存储在
/etc/gitlab/initial_root_password
文件中(出于安全原因,24 小时后,此文件会被第一次 gitlab-ctl reconfigure
自动删除,因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码)。使用此密码和用户名 root
登录。gitlab常用命令
在docker下安装
安装所需最小配置
内存至少4G
系统内核至少在3.10以上
uname -r
命令可查看系统内核版本安装docker
- 1.
更新yum源
yum update
- 1.
安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
- 1.
添加镜像
//国外镜像
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
//阿里镜像
https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 2.
查看源中可使用版本
- 1.
安装指定版本
- 1.
配置开机启动项
使用容器安装gitlab
1.添加容器
2.启动容器
3.查看已存在的容器
4.进入容器
访问
当首次运行出现502错误的时候排查两个原因
- 1.
虚拟机内存至少需要4g
- 2.
稍微再等等刷新一下可能就好了
管理员账号登录
用户名:root
密码存在下面文件中,登录后需要改密码不然24小时之后会失效
Jenkins安装
官方文档介绍非常详细
安装需求
安装JDK
1 检索可用包
2 安装
首次启动war包会在
/root/.jenkins
生成配置文件待完全启动成功后 访问服务器8080端口完成配置
初始化后的密码:
密码文件使用后会自动删除
Maven安装
官网
下载后复制到Jenkins所在服务器解压缩即可
Jenkins + Git + Maven 自动化部署配置
1 Git配置
2 Maven配置
3 Pom.xml配置
git安装
javahome配置(可选)
报错找不到jdk?
Maven阿里云镜像
修改
/usr/local/maven/conf/settings.xml
publish over ssh 配置
1 安装插件
在Configure System菜单里 往下来
2 添加一台目标服务器
3 修改配置
超时机制
输出命令时一定要注意不要让窗口卡主,不然Jenkins会认为认为一直没完成
shell的日志输出
数据流重定向
数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据传输到其他地方
标准输入(stdin):代码为0,使用<或<<;
标准输出(stdout):代码为1,使用>或>>;
标准错误输出(stderr):代码为2,使用2>或2>>
> 覆盖写
>> 追加写
运行前清理
配置杀死之前运行的进程
几种构建方式
快照依赖构建/Build whenever a SNAPSHOT dependency is built
当依赖的快照被构建时执行本job
触发远程构建 (例如,使用脚本)
远程调用本job的restapi时执行本job
job依赖构建/Build after other projects are built
当依赖的job被构建时执行本job
定时构建/Build periodically
使用cron表达式定时构建本job
向GitHub提交代码时触发Jenkins自动构建/GitHub hook trigger for GITScm polling
Github-WebHook出发时构建本job
定期检查代码变更/Poll SCM
使用cron表达式定时检查代码变更,变更后构建本job
触发远程构建/gitlab上改动自动构建
代码改动自动可以使用gitlab的webhook回调钩子调起Jenkins的启动任务接口
在构建触发器中配置接口和token
定时构建
Jenkins cron表达式
标准cron
Jenkins cron不是标准的cron表达式
“/”
表示每隔多长时间,比如 */10 * * * * 表示 每隔10分钟
“H”
hash散列值,以job名取值,获取到以job名为入参的唯一值,相同名称值也相同,这个偏移量会和实际时间相加,获得一个真实的运行时间
意义在于:不同的项目在不同的时间运行,即使配置的值是一样的,比如 都是
15 * * * *
,表示每个小时的第15分钟开始执行任务,那么会造成同一时间内在Jenkins中启动很多job,换成H/15 * * * *
,那么在首次启动任务时,会有随机值参与进来,有的会在17分钟启动 有的会在19分钟启动,随后的启动时间也是这个值。这样就能错开相同cron值的任务执行了。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 * * 1-6 * * 1-6
0点开始,每间隔2小时执行一次 0:45、2:45、4:45源码变更构建
使用Poll SCM 方式与Build periodically一样
会主动定期检查代码托管服务器上是否有变化,一旦发生变化执行job构建
测试报告邮件通知
使用163免费邮箱发送邮件时注意密码填认证码,也就是发送手机短信后给的那个,不要用登录邮箱的密码
类似下面。。
自动化部署到docker容器中
docker外挂目录
打包到容器内
- 1.
准备一台测试服务器 docker环境
- 2.
准备支持jdk的镜像
FROM openjdk:11
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]
- 3.
把jar包打包到容器内
dockerfile
打包镜像
配置国内镜像
修改
/etc/docker/daemon.json
文件,没有的话创建一个写入
重启服务
Jenkins集群/并发构建
集群化构建可以有效提升构建效率,尤其是团队项目比较多或是子项目比较多的时候,可以并发在多台机器上执行构建。
流水线 pipeline
流水线既能作为任务的本身,也能作为Jenkinsfile
使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,同时也可以编辑开发Jenkinswebui不能完成的更复杂的构建逻辑,作为开发者可读性也更好。
完整语法
5个必备的组成部分
测试脚本
基础框架
阶段视图 Stage View
blue ocean可视化界面
全新的流水线控制ui,可重复执行某阶段代码
插件中心搜索blue ocean安装即可
post
流水线完成后可执行的任务
always 无论流水线或者阶段的完成状态。
changed 只有当流水线或者阶段完成状态与之前不同时。
failure 只有当流水线或者阶段状态为"failure"运行。
success 只有当流水线或者阶段状态为"success"运行。
unstable 只有当流水线或者阶段状态为"unstable"运行。例如:测试失败。
aborted 只有当流水线或者阶段状态为"aborted "运行。例如:手动取消。
agent
可以指定执行节点
label 指定运行job的节点标签
any 不指定,由Jenkins分配
pipeline中执行自动化构建
声明式流水线
好处
更像是在Jenkins web ui中的操作
可读性比较高
可以使用blue ocean自动生成
支持语法检查
坏处
代码逻辑能力比脚本式弱,不能完成特别复杂的任务
脚本式流水线
好处
更少的代码和弱规范要求
更灵活的自定义代码操作
不受约束,可以构建特别复杂的工作流和流水线
坏处
读写对编程要求比较高
比声明式流水线代码更复杂
- 作者:cherryhua
- 链接:https://blog.cherrylord.com/article/post-5
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。