Jenkins是java编写,须要安装JDK,这里采用 yum 安装,对版本有需求的,能够到 oracle 官网下载 JDK。php
yum install -y java-1.8.0-openjdk
1、安装 Jenkinsjava
添加yum源git
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
导入密钥web
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
安装shell
yum install -y jenkins
新版本的 gitlab 服务端口为 8080,为了避免和 gitlab 的服务端口冲突,修改 Jenkins 的默认端口为 8088。json
查看端口bash
netstat -antup|grep :80
修改端口为8088服务器
vi /etc/sysconfig/jenkins JENKINS_PORT="8088"
数据目录,能够自定义
JENKINS_HOME="/var/lib/jenkins"oracle
2、启动 Jenkinsssh
systemctl start jenkins.service
设置开机启动
systemctl enable jenkins.service
若是访问8088端口,发现访问不了,则先查看日志
cat /var/log/jenkins/jenkins.log
若是发现这种信息
java.io.IOException: permission denied
缘由是 Jenkins 默认使用的是 Jenkins 用户,所以日志中出现了权限问题,修改 Jenkins 默认用户为 root。
vi /etc/sysconfig/jenkins JENKINS_USER="root"
3、配置jenkins使用gitlab更新代码
安装插件
Credentials Plugin # 签名证书管理
Gitlab Plugin # 安装后从gitlab获取代码
Git Plugin 和 Git Client Plugin # 用于 jenkins 在 gitlab中拉取源码
Gitlab Hook # gitlab触发 jenkins 构建项目
Gitlab Authentication # gitlab和 jenkins 认证相关的插件
SSH Plugin # 远程执行 shell 脚本
Publish Over SSH # 经过 ssh 部署应用
若是 jenkins 安装插件超时,能够在 管理jenkins -> 插件管理 -> 高级 -> 升级站点 改成:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
若是换站点后,仍是安装超时,则到下面网站手动下载安装
http://updates.jenkins-ci.org/download/plugins/
4、设置 gitlab 用户 root 能够经过 ssh 公钥直接下载代码
生成的SSH密钥, 一路回车,注意我这里生成的是 root 用户,固然你也能够指定用户
ssh-keygen
查看公钥
cat ~/.ssh/id_rsa.pub
而后把公钥添加到 gitlab 项目->设置->版本库->部署密钥
这样咱们经过root用户拉取代码,就不须要输入用户名和密码了。
git clone git@192.168.1.222:develop/web.git
5、Jenkins 添加 gitlab 用户 root 的 私钥
cat ~/.ssh/id_rsa
在 凭据 -> 全局 -> 添加凭据 -> 选择类型 SSH Username with private key
用户名输入 root,并添加私钥
注意,root用户的公钥在 gitlab,私钥在 jenkins,这样 jenkins 就能够直接拉取 gitlab 上的代码。
6、在 Jenkins 上添加项目
新建一个item -> 输入任务名称 -> 选择构建一个自由风格的软件项目,而后点肯定。
而后 描述 根据须要自已填写,源码管理选择 git,并添加仓库URL为 git@192.168.1.222:develop/web.git。
而后选择凭据为咱们刚刚添加的 root,而后点保存。
7、自动部署 web 项目
能够经过执行命令或脚本方式进行代码发布,这里演示使用 root 用户在各服务器上发布代码。
固然也能够建一些普通用户,但须要保持全部服务器上的用户ID一致,避免权限问题。
好比我想把222主机上的代码自动部署到111主机上,个人222主机上安装了 gitlab 和 jenkins。
一、首先要实现 root 用户无密码直接登录111主机。
将公钥复制到远程主机
ssh-copy-id root@192.168.1.111 ssh 192.168.1.111
为了让 jenkins 登录本机,也免密码,则在本机也复制一份
ssh-copy-id root@192.168.1.222
注意,你须要在哪台机器上自动发布代码,就须要让 jenkins 能使用root用户免密码登录到那台机器上。
二、咱们在 jenkins 的主机上,先 clone 一份代码
cd /data git clone git@192.168.1.222:develop/web.git
三、而后编写 shell 执行命令,如 sync.sh
#!/bin/bash echo $USER cd /data/web git pull scp -r ./* root@192.168.1.111:/data/wwwroot/
四、在 jenkins 项目中点击配置,选择构建环境,增长构建步骤,选择 Execute shell,填入以下命令,并保存。
sudo ssh root@192.168.1.222 /data/sync.sh
五、而后点击 项目的 当即构建,看代码是否同步到了111主机上。
8、实现 gitlab 触发 jenkins 自动部署
一、安装 gitlab hook plugin 和 Build Authorization Token Root 和 Build Token Trigger 插件。
二、生成身份验证令牌
openssl rand -hex 16
三、在 jenkins 项目 -> 配置 -> 构建触发器 -> 选中远程构建,并填入上一步生成的令牌。
选中以下两项,而后点保存。
Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.1.222:8088/project/web
GitHub hook trigger for GITScm polling
四、在 gitlab 项目 -> 设置 -> 集成 -> 增长web钩子
连接URL格式:http://jenkins 地址/buildByToken/build?job=jenkins项目名&token=token值
如:
http://192.168.1.222:8088/buildByToken/build?job=web&token=46324e223bc203855552e62dd63b12c9
五、点击测试,push events,若是返回 201 ,说明成功了。
六、咱们经过 git 添加文件,提交到版本库,看 jenkins 是否会触发自动构建。
9、使用 Build Pipeline 插件以流程图的形式展现各个 job 的顺序
Build Pipeline 插件做用: 这个插件可以以流程图的形式展现各个 job 的顺序,依赖关系等等。
安装完插件后,咱们添加一个视图,并选中 Build Pipeline View。
在 Display Options 中
No Of Displayed Builds 选择 3 ,
Refresh frequency (in seconds) 填入 3。
上面的选项表示显示最近 3 次的构建结果,固然也可根据须要自已填写。