Jenkins 搭建
# yum install git-all
# yum install -y java-1.8.0-openjdk
# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key \\ 安装jenkins key
# yum install -y jenkins
# systemctl restart jenkins
http://192.168.10.12:8080 \\ 默认安装即可
# tail /var/lib/jenkins/secrets/initialAdminPassword \\ 可以获取管理员 密码
# vim /etc/sysconfig/jenkins \\ 主配置文件
# tail /var/log/jenkins/jenkins.log \\ 日志文件
# ls /var/lib/jenkins/ \\ 主程序目录 jenkins存放数据不依靠数据库,所以在移植时只需要拷贝整个程序主目录即可
jobs \\ 浏览器上面创建的任务都会存放在这里
logs \\ 存放jenkins相关的日志
nodes \\ 多节点时用到
plugins \\ 插件所在目录 jobs和plugins目录比较重要
secrets \\ 密码秘钥所在目录
汉化
Manage Jenkins --> Manage Plugins --> Available --> 搜索 Locale --> 勾选 locale --> Install without restart
Manage Jenkins --> Configure System --> 找到 Locale 勾选同意 并且输入 zh_cn 保存
zh_cn zh_CN zh_tw en_us zh_US
Manage Jenkins --> Manage Plugins --> 可选插件 --> 搜索 Publish Over SSH 与 Git plugin 并安装 --> 后重启
# systemctl restart jenkins
发布PHP代码
添加秘钥
# ssh-keygen
# cat ~/.ssh/id_rsa \\ 复制出来 私钥 添加到 Jenkins服务器
# ssh-copy-id 192.168.10.13 \\ 复制公钥 到 PHP服务器
Manage Jenkins --> Configure System --> Publish over SSH --> 复制进去key
--> SSH Servers --> 添加上php服务器的信息 --> Test Configuration --> 保存 \\ Remote Directort /
新建项目
新建Item --> 输入名字 --> Freestyle project
描述 发布 php 代码 \\ 自定义
源码管理 git
Repository URL: https://github.com/nginx/unit.git \\ 仓库地址
Branches to build: */master \\ 默认为master
构建触发器 \\ 为空即可
构建环境 \\ 为空即可
构建
Send files or execute commands over SSH
Name: 192.168.10.13 \\ 选择刚 创建的项目名称
Source files: **/** \\ 表示要发布的代码为全部文件
Remote directory: /data/jenkins_test \\ 自定义一个存放PHP代码的文件夹名
Remove prefix: \\ 为空即可
Exec command: \\ 为空即可
Build now --> #1 --> 控制台输出
# ls /data \\ 连接192.168.10.13机器 可以看到 更新的代码
修改admin密码 \\ 改成 123456
# vim /var/lib/jenkins/users/admin_3823215954751182213/config.xml
<passwordHash>#jbcrypt:$2a$10$/Oo9oBWXI.SsRqd9fLO0ZOGMQEoFNvAcWLt5aYrMhfBp7hEBqWsHC</passwordHash>
# systemctl restart jenkins
..........................................................................................................
添加秘钥 \\ 目标服务器上 项目服务器上 在需要登录的服务器上操作
# ssh-keygen \\ 使用要设置秘钥的用户执行 生成 私钥id_rsa 公钥id_rsa.pub
# cd ~/.ssh \\ 到此用户的家目录
# cat id_rsa.pub > authorized_keys \\ 创建验证文件 此文件为 公钥
# chmod 600 authorized_keys \\ 必须是 600权限
# chmod 700 ../.ssh \\ 必须是 700权限
# cat id_rsa \\ 可复制出来 私钥 放到Jenkins上用于登录目标服务器
注:
id_rsa: 私钥 \\ 可以打开 直接复制到 Jenkins 上 用于登录 目标服务器
authorized_keys: 公钥文件 \\ 注意设置权限 放到 目标服务器家目录里
添加 项目服务器 到 Jenkins
Manage Jenkins --> system configuration \\ 为 jenkins 添加 目标项目服务器 秘钥
Publish over SSH \\ 默认可以添加一个私钥用于登录服务器 也可在SSH Servers里设置单独的秘钥或密码
SSH Servers --> 新增 \\ 添加 服务器ssh 登录 信息
Name: 甜杏测试环境
Hostname: 103.108.142.100
Username: jump_admin \\ 这里要给带sudo权限的用户 后面复制以及脚本要sudo
Remote Directory: /data \\ 连接后 使用 哪一个目录
高级 Use password authentication, or use a different key \\ 勾选 使用密码 或其他 秘钥认证
key \\ 复制进去 私钥即可
Port: 59157
Timeout (ms):300000 \\ 默认 其他选项可以不用填写
test Configguration \\ 点击测试 显示 success 即可
注:
SSH remote hosts 没用上 也是添加主机的 具体怎么使用 待补充
Jenkins 发布 jar 包
新建Item --> 输入任务名字 --> 构建一个 maven 项目 --> 配置 \\ 需要先创建秘钥 和 添加主机
注:
* 需要 git 地址 打包命令 发布命令
* $WORKSPACE 目录为: /var/lib/jenkins/workspace/项目名
* jenkins 会按照配置的顺序 来执行发布操作
General --> 源码管理 --> 构建触发器 --> 构建环境 --> Pre Steps --> Build --> Post Steps --> 构建设置 --> 构建后操作
1. General
描述: wxapp_Link.jar 后端jar包 更新 回滚 根据BUILD_ID
Discard old builds(丢弃旧的构建) \\ 有的版本是英文 有的版本是中文 不完全汉化
策略: log Rotation \\ 默认即可
保持构建的天数: 30 \\ 最多保存30天
保持构建的最大个数: 10 \\ 最多保存10构建的历史记录 用于回滚
This project is parameterized(参数化构建过程) --> 添加参数
Git Parameter(Git 参数)
名称: Tag \\ 自定义 标签名字 随便起的名字而已
描述: 请选择分支 \\ 说明 选择分支的作用
参数类型: 分支或标签
默认值: */master \\ 默认 为 主分支
String Parameter(字符 参数)
名称: version \\ 定义一个变量 version
默认值: 0 \\ 此变量的默认值为 0.0 在构建的时候没有用 可以随便写版本号
\\ 在回滚的时候 可以 填写 $BUILD_NUMBER 的值 用于传递 回滚的版本 在脚本里调用
描述: jenkins构建版本号 \\ 可在脚本中直接使用 $version 调用
Choice Parameter(选项 参数)
名称: status \\ 定义一个变量 status 值为下面的选项 可在脚本中直接使用 $status 调用
选项:
Deploy \\ 给变量status的值 1是Deploy 2是Rollback
Rollback \\ 可在脚本中直接使用 $status 调用
描述:
Deploy --发布 \\ 在相应的值下面 写相应要执行的代码
2. 源码管理
Git \\ 选择 Git
Repositories
Repository URL: http://gitlab.ssyy99.net/ssyy99/syk.my.git \\ git 项目上的地址
Credentials: \\ 选择 要使用的 git 用户
添加 \\ 如果没有 需要 添加 git账户的 用户名 密码 添加后会在下拉列表里面
Domain: 全局凭据(unrestricted) \\ 默认即可
类型: Username with password \\ 使用 用户名 密码添加
范围: 全局
用户名: admin
密码: 123456
ID: \\ 可以为空
描述: admin 用户
Branches to build \\ 指定分支 上面定义的 tag 标签 可以用于选择分支 调用使用 ${} 的格式
指定分支(为空时代表any): ${Tag}
3. 构建触发器 \\ 没有勾选
4. 构建环境
Delete workspace before build starts \\ 勾选 开始构建之前删除工作空间
5. Pre Steps \\ 此选项 可以 在 jenkins服务器 从git上 拉下来代码后 在jenkins上执行的 脚本 或 命令 可用于操作 代码里文件
Add pre-build step --> Execute shell \\ 如替换密码文件
命令: \\ 可以添加要执行的命令 如果没有要更改的 可以忽略此项
6. build \\ 在 jenkins 服务器上 打包 拷贝到 目标服务器
Root POM: pom.xml \\ java项目下的 pom.xml 文件名 默认即可
Goals and options: package -P LinkTest \\ 打包命令 此命令可以接收 mvn的命令参数 完整命令为# mvn package -P LinkTest
7. Post Steps \\ 在jenkins服务器上 打包之后 执行的 脚本 或 命令 发布步骤
Run only if build succeeds or is unstable \\ 选择此项
Add pre-build step --> Execute shell
命令: \\ 在此为 $WORKSPACE 的目录: /var/lib/jenkins/workspace/tianxing_wxapp_Link
#!/bin/bash \\ 在 jenkins 的脚本 可以 直接使用 jenkins 上的 环境变量
/opt/scripts/tianxing_scripts/update_jar.sh $WORKSPACE \\ 此脚本 在jenkins服务器上 用于复制jar包 到远程服务器
8. 构建设置 \\ 空
9. 构建后操作 --> 增加构建后操作步骤 --> Send build artifacts over SSH
Name: ssyy99测试环境_192.168.10.100
Transfers: \\ 其他为空就好 只添加脚本命令
Exec command \\ 此脚本未在jenkins上 不可以使用jenkins上的变量
sudo sh /home/jump_guest/ssyy99_ruoyi-admin_jenkins.sh \\ 此脚本在 目标服务器上 一定要注意sudo权限 坑
注:
1. 关于 Jenkins 上的环境变量
$JENKINS_HOME 在主节点上分配的目录的绝对路径 供Jenkins存储数据
$BUILD_NUMBER 为构建id 初始为1 每一次构建递增1 可用于回滚
$WORKSPACE 为项目工作目录 实际为 jenkins安装目录+项目名字
$JENKINS_HOME 为 jenkins 安装目录 在此为 /var/lib/jenkins
关于 Jenkins 用户 及 分配权限
1. 安装插件
Manage Jenkins --> Manage Plugins --> 可选插件
Role-based Authorization Strategy 或 Role-Based Strategy \\ 安装
Manage Jenkins --> Configure Global Security
授权策略
Role-Based Strategy \\ 选择此项
2. 创建用户
Manage Jenkins --> Manage Users --> 新建用户
3. 赋予用户单个项目权限
Manage Jenkins --> Manage and Assign Roles
Manage Roles(管理角色)
Global roles \\ 对于用户的全局权限设置
Role to add: ssyy99 --> add \\ 添加 ssyy99 用户 此为填写用户名 多用户可以 多条添加
Overall
Read 勾选
job
Build 勾选 \\ 是对应权限 这里只给了最低的权限 可以 更新 项目
Item roles \\ 对于用户的某一项目设置 如果不添加默认是有所有项目对应的Global权限
Role to add: role1 \\ 规则1 这么名字随便起 后面需要用到此名字 关联
Pattern: ssyy99_com \\ 此为项目名字 赋予多个项目 添加多条 或者可以 使用 ssyy.* 来正则匹配
\\ 并且 勾选要给的 相关 权限
Assign Roles(分配角色)
Global roles \\ 用户名关联 系统用户名 这里设置的名字都相同
User/group to add: ssyy99 \\ 添加要管理的用户名 并且勾选到 关联的用户 名字相同即可
Item roles \\ 分配给用户 某个项目
User/group to add: ssyy99 \\ 这里 勾选 上面创建的 roles1 有多个勾选关联多个
发布 jar 包 用到的脚本
# vim /opt/scripts/tianxing_scripts/update_jar.sh \\ 备份 复制 jar 包
#!/bin/bash
# 运行命令 # nohup java -jar ruoyi-admin.jar > ./nohup.out &
# 打包命令 # mvn package -P druid jia包会在 target/ruoyi-admin.jar
WORKSPACE="$1"
DATE=`date "+%Y-%m-%d %H:%M:%S"`
Jar='ruoyi-admin.jar'
Dir=/opt/scripts/tianxing_scripts
echo "当前执行时间为:$DATE"
case $status in
Deploy)
echo "========= status:$status =========="
echo "========= 自定义输入version:$version =========="
echo $PATH
echo "========= 进入jenkins工作目录前端源码所在文件夹 =========="
source /etc/profile
cd $WORKSPACE
########## 用scp命令发动到远程服务器的部署目录下 ##########
echo "========== 开始上传jar包到测试服务器 =========="
sudo scp -P 59157 -r -i $Dir/jump_guest.pem $WORKSPACE/ruoyi-admin/target/$Jar jump_guest@192.168.10.1:/home/jump_guest/
echo "========= 将jar包备份到backup_jar文件夹 =========="
########## 备份在jenkins的工作目录下的backup_app文件夹下,方便之后回滚 ##########
########## $BUILD_NUMBER 为构建id,初始为1 每一次构建递增1 可用于回滚 ##########
########## $WORKSPACE 为项目工作目录 实际为jenkins安装目录+项目名字 ##########
########## $JENKINS_HOME 为jenkins安装目录 在此为 /var/lib/jenkins ##########
\cp $WORKSPACE/ruoyi-admin/target/$Jar $JENKINS_HOME/workspace/backup_jar/"$Jar".$BUILD_NUMBER
sudo find $JENKINS_HOME/workspace/backup_jar/ -type f -mtime +30 -exec rm -f {} \;
echo "deploy done!"
;;
Rollback)
backup_path="${JENKINS_HOME}/workspace/backup_jar/"
echo "======status:$status========"
echo "======build_id:$version======="
cd $backup_path
ls
echo "==============正在回滚 $Jar.$version 包 发送到远程测试服务器==================="
sudo scp -P 59157 -r -i $Dir/jump_guest.pem "$Jar".$version jump_guest@192.168.10.1:/home/jump_guest/$Jar
echo "roll_back done!"
;;
*)
esac
# vim /home/jump_guest/ssyy99_ruoyi-admin_jenkins.sh \\ 发布 jar 包
#!/bin/bash
# 运行命令 # nohup java -jar ruoyi-admin.jar > ./nohup.out &
# 打包命令 # mvn package -P druid
DATE=`date "+%Y%m%d%H%M%S"`
source /etc/profile
echo “========== 停止甜杏app包 ruoyi-admin.jar ==========”
PID=`sudo ps -ef |grep "ruoyi-admin.jar" | grep -v grep | awk '{print $2}'`
if [ -z $PID ]
then
echo "jar 没有在运行 ...运行新的jar包"
else
echo "kill $PID"
sudo kill -9 $PID
fi
#
sleep 6
echo "========== 发布新版本甜杏app包 ruoyi-admin.jar =========="
cd /home/jump_guest
mkdir -p /data/jarRun/bak
mv /data/jarRun/ruoyi-admin.jar /data/jarRun/bak/ruoyi-admin.jar.$DATE
mv ruoyi-admin.jar /data/jarRun/ruoyi-admin.jar
chown root.root /data/jarRun/ruoyi-admin.jar
sudo find /data/jarRun/bak/ -type f -mtime +30 -exec rm -f {} \;
cd /data/jarRun
nohup java -jar ruoyi-admin.jar > ruoyi.log &
#nohup java -jar eladmin-system-exec.jar --spring.profiles.active=prod &
#nohup java -jar eladmin-system-exec.jar --spring.profiles.active=prod > ./nohup.out &
#chmod 644 /opt/package_version/kok-qs-background/nohup.out
发布:
进入项目 --> Build with Parameters
Tag 选择 分支
version 选择 版本 发布的时候可以随便写 回滚的时候 写 $BUILD_NUMBER
status 选择 发布 或 回滚
...........................................................................................................
注: 发布java代码 但是没看 \\ 找此篇 Jenkins入门(二)
https://so.csdn.net/so/search/all?q=Jenkins%E5%85%A5%E9%97%A8%EF%BC%88%E4%BA%8C%EF%BC%89&t=all&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=