1. 安装部署
1.1 环境准备
本说明是针对使用需要Java 8的Jenkins发行版。还建议使用超过512MB RAM的系统,并且在安装jenkins的服务器先装好以下环境
- Java 8(JRE或JDK)
- git
- maven 3.5+
- 512MB可用内存
- 1GB +可用磁盘空间
下载Jenkins:
http://mirrors.jenkins.io/war/latest/jenkins.war
1.2 启动与访问
1.创建启动文件start.sh
nohup java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war --httpPort=8080 >> nohup.out 2>&1 &
-Dhudson.util.ProcessTree.disable=true 参数意思为:禁止Jenkins在Job构建过程结束后认为将kill掉未执行完的子进程
2.启动
sh start.sh
3.访问
http://192.168.28.134:8080
1.3 插件安装
1.首次登录时候的插件安装,进入选择插件安装界面,选择第一个(Install suggested plugins
):
2.另外的推荐安装的插件
进入系统管理 -> 插件管理 -> 可选插件
- Blue Ocean:pipeline流水线的增强插件
- Gitee Plugin:支持码云的插件
- Extended Choice Parameter Plug-In:参数化构建参数扩展
1.4 全局工具配置
1.Maven 配置,配置maven的settings.xml路径:
2.Jdk 配置
3.Git 配置
4.Maven 配置
1.5 安全配置
1.配置匿名可读权限
2.取消跨站请求伪造保护
1.6 踩坑
Jenkins中无法启动子进程的解决办法
场景如下:
- 在Jenkins中新建了一个Job,假设你在一些列Build Step之前/之后,启动了一个进程,打个比方说启动一个Jboss进程。等到Build完成,你去Console Output中查看显示启动成功,甚至PID也有了。但是当你去后台查看的时候,发现其实这个进程根本不存在,并没有启动成功。因为它没有关闭继承的文件描述符,Jenkins在Job构建过程结束后认为Jboss进程未终止,因而将其kill掉了。
解决办法(启动时添加禁用参数):
nohup java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war --httpPort=8080 >> nohup.out 2>&1 &
2. ssh免密登录
在centos里配置免密登录之后,方便Jenkins通过ssh连接服务器操作
2.1 获取本地客户端机器的公钥
1.先看看是不是已经有了,如果有内容就忽略第二步
cat ~/.ssh/id_rsa.pub
2.如果上一步没有这个文件我们就创建一个,运行下面命令生成(邮箱改成自己的),一路回车就好了
ssh-keygen -t rsa -C "youremail@example.com"
2.2 把生成的公钥发送到对方的主机上去
用ssh-copy-id命令,自动保存在对方主机的/root/.ssh/authorized_keys文件中去,ip地址改成需要免密登录的服务器地址
ssh-copy-id -i
2.3 测试
ssh 192.168.28.130
2.4 免密登录不生效问题解决
一般来讲失败的原因有两个:目录文件的权限和目录的属主
。
1,目录文件的权限
- .ssh父目录的权限是755(我的是/root),.ssh目录权限是700,authorized_keys文件 600
chmod 755 /root chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys
2.目录的属主
- 如果上面方法还没有解决问题,那可能是.ssh父目录的属主存在问题。
[root@node1 ~]# ls -al .ssh total 12 drwx------ 2 root root 80 Nov 3 10:07 . drwxr-xr-x. 11 hdfs users 4096 Nov 3 09:38 .. -rw------- 1 root root 0 Nov 3 10:06 authorized_keys -rw------- 1 root root 1679 Nov 3 09:38 id_rsa -rw-r--r-- 1 root root 390 Nov 3 09:38 id_rsa.pub -rw-r--r-- 1 root root 0 Nov 3 10:07 known_hosts
这里发现.ssh父目录(…)的属主存在问题,修改如下:
[root@node1 ~]# chown root:root /root [root@node1 ~]# ls -al .ssh total 16 drwx------ 2 root root 80 Nov 3 10:07 . drwxr-xr-x. 11 root root 4096 Nov 3 09:38 .. -rw------- 1 root root 1135 Nov 3 10:11 authorized_keys -rw------- 1 root root 1679 Nov 3 09:38 id_rsa -rw-r--r-- 1 root root 390 Nov 3 09:38 id_rsa.pub -rw-r--r-- 1 root root 0 Nov 3 10:07 known_hosts
3. 流水线简单例子
Jenkins从根本上讲是一种支持多种自动化模式的自动化引擎。Pipeline在Jenkins上添加了一套强大的自动化工具,支持从简单的连续集成到全面的连续输送Pipeline的用例。通过建模一系列相关任务,用户可以利用Pipeline 的许多功能:
- 代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。
- 耐用:Pipeline可以在计划和计划外重新启动Jenkins管理时同时存在。
- Pausable:Pipeline可以选择停止并等待人工输入或批准,然后再继续Pipeline运行。
- 多功能:Pipeline支持复杂的现实世界连续交付要求,包括并行分叉/连接,循环和执行工作的能力。
- 可扩展:Pipeline插件支持其DSL的自定义扩展 以及与其他插件集成的多个选项。
3.1 新建任务
新建任务 -> 流水线
General:通常情况下默认就行了
构建触发器:如果需要通过git触发构建的话需要勾选触发远程构建和填写身份验证令牌,详细的git触发配置请看 webhook配置。