04.Jenkins持续集成系统实践
1.Jenkins基本概述
1.1 什么是Jenkins
Jenkins
是一个开源持续集成的工具,是由 JAVA
开发而成。
Jenkins
是一个调度平台,本身不处理任何事情,调用插件来完成所有的工作。
1.2 为什么需要Jenkins
jenkins
能将各种开源的软件集成为一体,从而实现不同功能的调度工作。如下图所示:
2.Jenkins安装部署
安装Jenkins只需要简单几步即可完成。PS: Jenkins的安装方式很多,可参考。Jenkins官方安装文档
2.1 安装JDK环境
[root@jenkins-node1 ~]# yum install java -y
2.2 安装Jenkins
1.配置 jenkins
源
[root@jenkins-node1 ~]# cat /etc/yum.repos.d/jenkins.repo
[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat-stable
gpgcheck=1
2.安装 Jenkins
[root@jenkins-node1 ~]# yum install jenkins -y
3.启动 Jenkins
,加入开机自启动
[root@jenkins-node1 ~]# systemctl start jenkins
[root@jenkins-node1 ~]# systemctl enable jenkins
Jenkins
下的所有内容都是文件,他没有数据库,所以我们简单了解下每个目录的功能。
[root@jenkins-node1 ~]# rpm -ql jenkins
/etc/init.d/jenkins #jenkins启动与停止脚本
/etc/logrotate.d/jenkins #jenkins日志切割配置文件
/etc/sysconfig/jenkins #jenkins配置文件
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war #jenkins的程序文件(升级时替换这个文件即可)
/usr/sbin/rcjenkins #jenkins启动与停止脚本(软链接)
/var/cache/jenkins #jenkins缓存目录
/var/lib/jenkins #jenkins主要目录
/var/log/jenkins #jenkins日志相关
2.3 解锁Jenkins
1.当您第一次通过浏览器访问 http://HostnameIP:8080
的 Jenkins
时,系统会要求您使用自动生成的密码对其进行解锁。
2.解锁 Jenkins
之后,可以安装任何数量的插件作为您初始步骤的一部分。
1)如果不确定需要哪些插件,请选择 “安装建议的插件”(这个过程可能需要几分钟或几十分钟的时间)
2)也可以跳过插件安装,后期可以通过 Jenkins
中的 Manage Jenkins > Manage Plugins
页面进行插件安装或删除。
3.最后,创建一个 Jenkins
的管理员用户。然后单击保存完成。
3.Jenkins插件管理
jenkins
系统管理中的插件管理非常重要,因为 jenkins
的工作全部是由插件来完成。
在插件管理中有 {可更新 | 可选插件 | 已安装}
日常的插件安装都是在这个界面上完成的。
3.1 Jenkins联网安装插件
通过联网的方式安装插件,但由于仓库源在国外,所以首先修改源为国内源进行插件下载加速。
1.选择 系统管理 -->插件管理-->高级-->升级站点
2.将原来的 https://updates.jenkins.io/update-center.json
修改为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
最后点击提交
3.尝试通过联网方式安装与 gitlab
相关的插件,然后重启 Jenkins
测试,插件是否可用。
3.2 Jenkins手动上传插件
通过页面上传一个.hpi
文件的方式来安装插件。
1.在 jenkins
官网 https://plugins.jenkins.io/
下载插件。( 插件是以 .hpi
结尾的 )
2.将下载好的插件通过上传的方式进行安装 系统设置->插件管理->上传插件
3.3 Jenkins离线安装插件
将之前已下载的插件,导入到服务器中,(离线安装),然后重启 Jenkins
[root@jenkins-node1 ~]# wget plugins.tar.gz
[root@jenkins-node1 ~]# mv plugins/* /var/lib/jenkins/plugins/
[root@jenkins-node1 ~]# chown -R jenkins.jenkins /var/lib/jenkins/plugins/
[root@jenkins-node1 ~]# systemctl restart jenkins
4.Jenkins简单应用
4.1 创建FreeStyle项目
1.创建一个FreeStyle(自动风格的软件项目)
4.2 配置项目基本信息
- 描述:描述这个自动发布项目是做什么
- 丢弃旧的构建:构建后的产物,保留多久
- 参数化构建:在执行任务时,可以传递参数
4.3 简单执行Shell命令
构建-->选择执行 shell
命令
4.4 项目的构建与执行
选择项目,点击立即构建
4.5 检查项目构建结果
1.选择对应的项目,点击控制台输出获取结果
2.构建后所产生的文件等资源,都会存储在/var/lib/jenkins/workspace/jenkins_project_name
目录下
gitlab–jenkins集成
1.开发提交代码至Gitlab
1) 准备一个仓库 web-monitor
2) 通过WIndows提交代码
3) 为了方便,我们使用的是root身份, 正常情况应该使用普通身份, 但要对项目有权限;
2.jenkins安装gitlab所需插件
插件名称 插件作用
Credentials Plugin 允许在Jenkins中存储认证的凭据
Git Client Plugin 允许Jenkins使用Git
Git Plugin 允许Jenkins集成Git
Gitlab Plugin 允许Gitlab触发Jenkins构建并在Gitlab中显示
GitLab Hook 允许 gitlab 自动触发 jenkins 构建项目
Gitlab Authentication plugin gitlab 身份验证插件
3.jenkins创建freestyle项目,然后配置gitlab仓库项目对应地址。
1.jenkins无法访问gitlab的域名,所以要配置域名解析;
echo "10.0.0.110 gitlab.oldxu.com" >> /etc/hosts
2.jenkins与gitlab秘钥验证失败;
2.1) jenkins生成公钥对;
2.2) jenkins将公钥推送到gitlab服务器对应的用户;( 用户必须得对项目有拉取权限;)
2.3) 告诉jenkins私钥是什么,这样才可以解密; Credentials
1.搭建环境: Nginx+web_cluster集群 对外提供,html.oldxu.com 站点; 一般公司都Ansible运行好了;
1.配置负载均衡
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_html.oldxu.com.conf
upstream web {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 80;
server_name html.oldxu.com;
location / {
proxy_pass http://web;
proxy_set_header Host $http_host;
}
}
2.配置web集群
[root@web01 ~]# cat /etc/nginx/conf.d/html.oldxu.com.conf
server {
listen 80;
server_name html.oldxu.com;
root /code/web_monitor;
location / {
index index.html;
}
}
[root@web01 ~]# rm -rf /code
[root@web01 ~]# mkdir /code
3.配置域名解析
2.手动拉取代码,部署代码;
1.先克隆项目;
[root@jenkins ~]# git clone [email protected]:dev/web-monitor.git
2.将代码打包;
tar czf /opt/web_monitor_$(date +%F_%H).tar.gz ./*
3.配置免密:
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
3.通过scp发送到web集群节点
for i in 7 8 ; do scp /opt/web_monitor_$(date +%F_%H).tar.gz [email protected].$i:/opt ; done
4.通过ssh登录到目标主机,解压,创建软连接;
for i in 7 8
do
ssh [email protected].$i "cd /opt && \
mkdir -p web_monitor_$(date +%F_%H) && \
tar xf web_monitor_$(date +%F_%H).tar.gz -C web_monitor_$(date +%F_%H)
rm -f /opt/web_monitor_$(date +%F_%H).tar.gz && \
rm -f /code/web_monitor && \
ln -s /opt/web_monitor_$(date +%F_%H) /code/web_monitor"
done