Day02-Jenkins与集成案例
- 1.概述
-
- [1.1 什么是Jenkins](#1.1 什么是Jenkins)
- [1.2 Jenkins](#1.2 Jenkins)
- [2. Jenkins快速上手指南](#2. Jenkins快速上手指南)
-
- [2.1 部署JDK](#2.1 部署JDK)
- [2.2 部署Jenkins(最新版)(略)](#2.2 部署Jenkins(最新版)(略))
- [2.2 部署jenkins (rpm版本)](#2.2 部署jenkins (rpm版本))
- [2.3 解锁Jenkins](#2.3 解锁Jenkins)
- [2.4 安装插件](#2.4 安装插件)
- [3. 案例01:创建一个项目-初体验-Jenkins-Shell集成](#3. 案例01:创建一个项目-初体验-Jenkins-Shell集成)
-
- [3.0 对jk配置](#3.0 对jk配置)
- [3.1 创建并运行jenkins项目,执行Shell命令](#3.1 创建并运行jenkins项目,执行Shell命令)
- [3.2 项目详细步骤](#3.2 项目详细步骤)
-
- 0)创建对应的的目录
- [1) 创建freestyle项目](#1) 创建freestyle项目)
- [2) 配置项目基础信息](#2) 配置项目基础信息)
- 3)配置构建保存(丢弃旧的构建)
- [4) 配置参数化构建](#4) 配置参数化构建)
- [5) 配置构建与shell](#5) 配置构建与shell)
- [3.3 运行任务](#3.3 运行任务)
- [3.5 小结](#3.5 小结)
- [3.6 所有构建记录是否要保留?](#3.6 所有构建记录是否要保留?)
- [4. 案例02:Jenkins实现Gitlab集成](#4. 案例02:Jenkins实现Gitlab集成)
-
- [4.1 准备windows环境](#4.1 准备windows环境)
- [4.2 配置jenkins](#4.2 配置jenkins)
-
- 0) 进行hosts解析 进行hosts解析)
- 1)添加任务
- 2)源码管理
- 3)运行查看结果
- [4.3 配置脚本](#4.3 配置脚本)
- [4.4 案例小结](#4.4 案例小结)
- [5. 案例03: Jenkins基于tag标签的代码拉取与部署](#5. 案例03: Jenkins基于tag标签的代码拉取与部署)
-
- [5.1 案例背景:](#5.1 案例背景:)
- [5.2 准备代码](#5.2 准备代码)
- [5.3 安装jenkins获取git tag标签的插件](#5.3 安装jenkins获取git tag标签的插件)
- [5.4 创建Jenkins任务](#5.4 创建Jenkins任务)
- [5.5 部署到web节点](#5.5 部署到web节点)
- [5.6 检查部署结果](#5.6 检查部署结果)
- [5.7 案例03小结](#5.7 案例03小结)
- 今日总结
1.概述
1.1 什么是Jenkins
-
Jenkins 是一个开源持续集成的工具,是由 JAVA 开发而成。
-
Jenkins 是一个调度平台,本身不处理任何事情,调用插件来完成所有的工作。
-
通过Jenkins完成,CI/CD...
- DevOps
- DevSecOps
- dev 开发
- ops 运行
- sec 安全
1.2 Jenkins
- jenkins能将各种开源的软件集成为一体,从而实现不同功能的调度工作
2. Jenkins快速上手指南
-
安装Jenkins只需要简单几步即可完成。PS: Jenkins的安装方式很多,可参考。Jenkins官方安装文档
系统要求/软件要求 | 主机名 | 配置 | ip |
---|---|---|---|
系统 | devops-oldboy-jenkins | 2c4G | 10.0.0.72/172.16.1.72 |
软件 | jdk 11版本 |
- 安装方式
bash
#1.rpm包/yum yum安装jenkins
#2.war包 tomcat --> war
#3.jar包 java -jar xx.jar -参数.....
2.1 部署JDK
bash
yum install -y java-11 #jdk
2.2 部署Jenkins(最新版)(略)
bash
#配置jenkins源
[root@jenkins-node1 ~]# cat /etc/yum.repos.d/jenkins.repo
[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat-stable
gpgcheck=0
#安装Jenkins
[root@jenkins-node1 ~]# yum install jenkins -y
#启动Jenkins并加入开机自启动
[root@jenkins-node1 ~]# systemctl start jenkins
[root@jenkins-node1 ~]# systemctl enable jenkins
[root@oldboy-jenkins ~]# systemctl enable jenkins
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on
[root@oldboy-jenkins ~]# systemctl start jenkins
2.2 部署jenkins (rpm版本)
bash
#1. 安装jdk
yum install -y java-11
#2. 安装rpm包
yum localinstall -y jenkins-2.361.4-1.1.noarch.rpm
rpm -ql jenkins
#3.启动
systemctl enable jenkins
systemctl start jenkins
systemctl status jenkins.service
- 检查端口进程
- 访问jenkins
bash
jk.oldboylinux.cn:8080
2.3 解锁Jenkins
解锁 Jenkins,当您第一次访问新的Jenkins实例时,系统会要求您使用自动生成的密码对其进行解锁。浏览到http://jk.oldboylinux.cn:8080 并等待 解锁 Jenkins 页面出现。
- 选择关闭
- 提示jenkins已经就绪
- 登录
2.4 安装插件
Jenkins插件安装方式 | |
---|---|
web页面,选择与安装(联网) | 一个一个找选择,安装重启jenkins |
自己下载插件,jenkins替你安装(hpi) | web页面一个一个安装,未来批量安装需要脚本 |
导入插件(手动,批量) | 去一个机器上面把已经下载安装的插件打包,新机器解压,修改所有者 |
jenkins不同版本的插件不通用 |
bash
三种安装方式:
1.联网安装 通过互联网下载插件
1) 需要知道插件名称 ( 需要知道要集成哪些软件或服务; )
2) 在哪个位置进行插件安装 Manage Jenkins --> Mange Plugins
注意:
1) 安装会比较的慢;需要等很久;
2) 如果出现警告,要看提示; 不要盲目升级,很容易造成 Jenkins连带升级, 会出现其他很多插件无法使用;
2.下载 .hpi 文件安装
https://mirror.tuna.tsinghua.edu.cn/jenkins/plugins/git/latest/git.hpi
3.导入插件
将此前已经安装好的插件; 备份下来; 然后恢复;
问题: 插件存储在哪个路径下: /var/lib/jenkins/plugins/
1)安装常见插件工具集
bash
tar xf jenkins-2.361-plugins.tar.gz -C /var/lib/jenkins/plugins/
systemctl restart jenkins
2)手动添加插件
- 修改密码
3. 案例01:创建一个项目-初体验-Jenkins-Shell集成
- 通过jenkins 执行命令、脚本。
3.0 对jk配置
为了方便JK进行操作与管理各种节点,避免出现权限问题。
这里把jenkins运行用户改为root。
当然也可以给Jenkins配置sudo权限,这里我们选择修改为root。
bash
之前的旧版本/etc/sysconfig/jenkins #文件即可.
现在版本:
/usr/lib/systemd/system/jenkins.service
egrep -i '^User|^Group'
/usr/lib/systemd/system/jenkins.service
User=root
Group=root
systemctl daemon-reload
systemctl restart jenkins
3.1 创建并运行jenkins项目,执行Shell命令
- 目标:
bash
#jenkins 初体验
通过运行jenkins 任务
提示我们进行:
选择
dev #开发环境
prod #生产环境
把选择结果放在变量中choose。
jenkins执行脚本
case "$choose" in
dev) echo "部署到测试环境" ;;
prod) echo "部署到生产环境" ;;
esac
3.2 项目详细步骤
0)创建对应的的目录
- dev目录和prod目录,表示测试环境和生产环境
- 创建文件夹
- 只需要修改名字即可
1) 创建freestyle项目
- 进入到dev目录创建1个项目。
补充说明:
自由风格: 一般用于部署静态,各种都可以。
maven项目:java代码。
流水线(pipeline):把第1个或第2个任务通过指令(代码)方式实现。
2) 配置项目基础信息
3)配置构建保存(丢弃旧的构建)
4) 配置参数化构建
- 添加参数化构建
- 配置变量与选择的值
5) 配置构建与shell
- 添加执行shell
- 配置命令或代码
bash
case "$choose" in
dev) echo "部署到测试环境" ;;
prod) echo "部署到生产环境" ;;
esac
echo "当前用户是:`whoami`"
echo "当前的路径:`pwd`"
3.3 运行任务
- 运行项目
1) 运行工程
2) 查看输出
3) 检查输出
温馨提示:项目运行的时候
工作目录在/var/lib/jenkins/workspace/项目名字目录下
运行项目的用户是jenkins
3.5 小结
- 通过jenkins实现带有参数的构建(执行任务的加入交互功能,类似于Shell脚本$1,$2,read命令)。
- 通过jenkins执行shell指令(命令或脚本内容)。
- 查看输出与结果.
3.6 所有构建记录是否要保留?
- 丢弃旧的构建
4. 案例02:Jenkins实现Gitlab集成
4.1 准备windows环境
- 安装git-bash
- 准备代码目录(代码目录绝对路径中不要包含中文字符)
- 创建密钥并配置gitlab/gitee
bash
ssh-keygen.exe
cat /c/Users/Administrator/.ssh/id_rsa.pub
- 创建gitlab/gitee项目
- 初始化并上传代码
bash
#配置基本信息
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
git config --global --list
git remote -v
#初始化
git init
#配置远程仓库地址
git remote add origin git@gitlab.oldboylinux.cn:root/baskball.git
#上传代码与标签
git add .
git commit -m "v1.0"
git tag -a "v1.0" -m "v1.0"
git push -u origin master
git push -u origin Վʔtags
- 检查
- 检查可以上传代码到仓库中即可。
4.2 配置jenkins
0) 进行hosts解析
bash
增加如下内容即可/etc/hosts
172.16.1.71 gitlab.oldboylinux.cn
172.16.1.72 jk.oldboylinux.cn
1)添加任务
2)源码管理
-
下面配置源码部分内容,通过git方式拉去代码。
- 配置git仓库地址(从gitlab或gitee获取)
-
配置访问凭证
- 配置私钥的凭证
- 粘贴私钥信息(把windows下面的私钥复制出来)
- 选择新建的凭证
注意如果出现host key checking 类错误提示:
命令行ssh gitlab.oldboylinux.cn 输入yes即可。
- 配置下shell命令
3)运行查看结果
4.3 配置脚本
- 这部分配置build步骤,表示对拉取过来的代码进行处理
- 这里选择的打包即可
- 构建与检查结果
4.4 案例小结
- 核心在于Jenkins上面创建Freestyle项目.
- 参数化构建.
- 配置源代码地址,拉取方式.
- Build相关的操作.
- 脚本.
- 脚本,把代码分发到web服务器并解压.
5. 案例03: Jenkins基于tag标签的代码拉取与部署
5.1 案例背景:
- 案例02中拉取的代码总是最新的.
- 目前我们需要部署指定的tag标签(版本)的代码.
- 最后代码打包并分发web服务器.
- 整体流程与案例02类似.
5.2 准备代码
-
修改index.html,修改标题.
-
提交,打标签,创建出v2.0 v3.0版本即可.
-
修改代码标题
- 提交代码
bash
git add .
git commit -m v3.0
git tag -a v3.0 -m v3.0
git push -u origin --all
git push -u origin --tags
- 检查
5.3 安装jenkins获取git tag标签的插件
- git parameter
- 重启jenkins
bash
systemctl restart jenkins
5.4 创建Jenkins任务
- 创建新的自由风格项目
- 添加参数化构建之git参数
- 配置git参数
- 配置源码管理
- 配置每次构建之前清空工作目录(避免缓存导致问题)
- 配置Build步骤(shell脚本)
- 检查结果
5.5 部署到web节点
- web节点的准备
bash
[root@web01 ~]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
[root@web01 ~]# cat /etc/nginx/conf.d/ball.conf
server {
listen 80;
server_name ball.oldboylinux.cn;
access_log /var/log/nginx/ball.access.log main;
error_log /var/log/nginx/ball.error.log notice;
root /app/code/ball;
location / {
index index.html;
}
}
- 创建密钥认证
bash
ssh-keygen
ssh-copy-id root@172.16.1.7
ssh root@172.16.1.7 hostname -I
- jenkins项目配置(shell部分)
bash
echo "您当前部署的代码版本为:${git_tag}"
#1. 打包压缩
tar zcf /tmp/baskball-${git_tag}.tar.gz .
#2. 分发
##for + scp
scp /tmp/baskball-${git_tag}.tar.gz root@172.16.1.7:/tmp/
#3. 解压
ssh root@172.16.1.7 "tar xf /tmp/baskball-${git_tag}.tar.gz -C /app/code/ball/"
5.6 检查部署结果
5.7 案例03小结
- 与案例02类似
- 多了1个参数化构建,获取git标签.
- 部署web节点.
- 完整的代码上线流程.
今日总结
- Jenkins案例02和案例03核心.
- 掌握两个案例流程,理解与说出来.
- Jenkins页面操作熟练,摆脱笔记.
- 复习下密钥认证,脚本判断与循环.