文章目录
- 5. 自动化部署-Jenkins
- 5.1 下载安装
- war包下载运行
- 5.2 插件安装
- 5.2 配置
- 5.2.1 全局工具配置
- 5.2.3 个人信息配置
- 5.4 经典版构建任务
- General
- Source Code Management
- Build Triggers
- Build Environment
- Build
- Post Steps
- PUSHLISH OVER SSH(可选)
- 保存以上配置
- 构建入口
- 远程构建
5. 自动化部署-Jenkins
5.1 下载安装
war包下载运行
# 创建jenkins目录和工作目录
mkdir -p /opt/jenkins & mkdir -p /opt/jenkins/jenkins-data
cd /opt/jenkins
# 下载war包(很慢,可以本地先用下载工具下载下来,再scp到服务器
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
由于需要用到启动和重启停止的功能,这里提供一个脚本来对应用进行操作
# 进入目录
cd /opt/jenkins
# 创建脚本文件,将下面的内容粘贴进来,保存退出
vim deploy.sh
# 赋予可执行权限
chmod +x deploy.sh
deploy.sh脚本内容
#!/bin/bash
# service running script.
source /etc/profile
action=$1
app=jenkins.war
# 清空日志
cp /dev/null nohup.out
nohup java -Duser.home=/opt/jenkins/jenkins-data/ -Dhudson.util.ProcessTree.disable=true -Xms256m -Xmx512m -Djenkins.model.Jenkins.slaveAgentPort=50000 -jar $app --httpPort=8801 &
elif [ ${action} == 'stop' ];then
ps -ef| grep $app | grep -v grep | awk '{print $2}' | xargs kill -15
elif [ ${action} == 'restart' ];then
ps -ef| grep $app | grep -v grep | awk '{print $2}' | xargs kill -9
sleep 2
nohup java -Duser.home=/opt/jenkins/jenkins-data/ -Dhudson.util.ProcessTree.disable=true -Xms256m -Xmx512m -Djenkins.model.Jenkins.slaveAgentPort=50000 -jar $app --httpPort=8801 &
fi
war包运行脚本
说明:
- user.home 用来执行jenkins的工作目录, 会在这个目录下生成一个.jenkins的隐藏目录存储jenkins的数据
- hudson.util.ProcessTree.disable 这个是jenkins会杀死子进程的特性会导致运行脚本不起作用,所以这里一股脑的给禁用掉了
- –httpPort=8801 执行jenkins应用启动端口,注意这里是两个-, 但是这里渲染的看起来像一个
- jenkins.model.Jenkins.slaveAgentPort 有一个特性需要用到,这里开启备用
cd /opt/jenkins
# 启动
./deploy.sh start
# 重启
./deploy.sh restart
# 停止
./deploy.sh stop
查看启动日志,jenkins已经启动完成, 使用ip:8801访问,注意日志中会打印密码以及密码所在目录
输入密码之后, 解锁jenkins,一路按照指示安装,第一个安装建议的插件就行了,后续需要再单独下载,然后跟着步骤继续创建管理员帐号, 这部分跟着步骤会提示的,就不详细说明了
5.2 插件安装
- Pipeline Maven Integration
- Maven Integration
- Authentication Tokens API
- Localization: Chinese (Simplified)
- Publish Over SSH
- SSH
5.2 配置
配置不区分经典版和Blue Ocean,只是可能入口会多一些通道,但最终都能从主界面进去,因此不单独说明
5.2.1 全局工具配置
注意这些全局用到的工具,一定是提前安装好的,所以要按照自己机器的情况填入正确的路径
5.2.3 个人信息配置
登录后右上角,个人信息图标点击后选择配置
- API Token
后面可以用来作为远程构建的参数凭证
这个要复制下来记住备用,后面再进来的时候就看不到了
5.4 经典版构建任务
通过maven插件的安装,现在构建任务时会多出来一个构建一个maven项目,我们用到的就是这一个
General
Source Code Management
添加凭证
Build Triggers
Build Environment
Build
Post Steps
这里即为上面脚本的内容,但这部分内容主要是为了理解要做什么,因为不同的应用情况这里执行的情况会有所不同。例如以下脚本的各种目录,这个要根据自己的情况,自己的项目放在了哪台服务器的哪个目录下,启动的方式是什么, 用的什么脚本来启动的,然后就要调整下面的内容,具体详细看一下下面的解释应该就能明白了,其实一共也就两行命令。
#!/bin/bash
# 避免子进程被杀死,无法执行后面的部署脚本
BUILD_ID=dontKillMe
source /etc/profile
# 将构建后的可执行jar包拷贝到项目部署目录, $WORKSPACE/boot-quick/target/spring-boot-quick-exec.jar根据项目名称以及打包后的jar包所在目录和可执行jar包名称按需修改
# 这里$WORKSPACE是jenkins变量为工作空间目录, target/spring-boot-quick-exec.jar为构建后可执行jar包所在目录, 统一在一起也是一个目录
# 拷贝这里有两种情况, 一种是项目部署和jenkins服务器再同一台服务器,那么这里就会变成本地拷贝, 如果不再同一台服务器就要写scp,而且还要配置ssh免登陆
# cp $WORKSPACE/target/spring-boot-quick-exec.jar /opt/services/boot-quick/
\cp -r $WORKSPACE/target/spring-boot-quick-exec.jar /opt/services/boot-quick/
# 执行部署脚本
cd /opt/services/boot-quick/ && sh deploy.sh restart
PUSHLISH OVER SSH(可选)
如果jenkins和目标服务不在同一台服务器除了上面说的用scp命令以外,还可以借助于这个插件,配置目标服务器的认证信息以及传输文件和目标文件夹等然后执行脚本命令等操作。
保存以上配置
构建入口
远程构建
参考步骤Build Triggers
里的截图部分,将下面的提示url和token组合起来可以触发远程构建,这样不需要进入jenkins,直接访问一下这个url就能触发构建,配合脚本使用,可以节省很多时间,
按上面的例子则为http://xxxxxx:8801/job/boot-quick/build?token=11173ff1df11042e355xxxxxxx
这里有一个特例,在构建步骤General
中之前说过有一个参数化构建的选项, 如果自己用到了这个参数化构建,且定义了参数而且在下面的execute shell
中用到了这个变量,那么对应的远程构建也要通过url传递这个参数,所以看Build Triggers
那里,有两个地址说明一个是简单的build还有一个是buildWithParameters
,如果用到了别的参数的话就需要用到这个,当然也可以统一,不论用没有别的参数都用这个
例如http://xxxxxx:8801/job/boot-quick/buildWithParameters?token=11173ff1df11042e355xxxxxxx¶m1=hahah&host=127.0.0.1
注意
经过测试,在浏览器上打开是可以直接构建,但原因可能是因为帐号已经登录了,并不是传参生效,因为在脚本中没有生效,还是提示没有权限,要登录。
参考https://stackoverflow.com/questions/25394445/jenkins-authentication-fails
# ApiToken的获取方式在上面有提到
curl -u dingdongfang:${ApiToken} http://xxxx:8801/job/boot-quick-gitee/build?token=11173ff1df11042e3558f45900278ba80d