Jenkins自动化部署
Jenkins自动化部署
Calyee前言
官网直达:Jenkins
Jenkins说:构建伟大,无所不能。众所周知Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
那么它的作用不就是用于自动化部署的吗?我想是的。
其中他的流程可以参考如下图
假如我们使用的是Github的话,可以使用action实现钩子程序(当然一般的企业项目不会放在github开源),假如不是那么则使用你自己的代码环境的钩子程序即可。
下载
首先你得下载Jenkins 的安装和设置
如果是Windows则直接下载war包其实就可以了,没必要下上面msi,如果你用docker也是可以的。
不过,你的git环境,maven之类的环境一定要配置好,如果嫌麻烦的话,笔者等空闲时间也是会去更新这个Java环境的一些基础配置的,从下载到可以使用的教程。
从入门到会用
初始化
我们下载下来之后,然后java -jar jenkins.war
,然后在浏览器打开,输入生成的初始化密钥,这个密钥其实最开始启动就会在屏幕上显示(windows:c:\user\username\.jenkinssecrets/initialAdminPassword
,linux:/root/.jenkins/secrets/initialAdminPassword
)
下依赖插件①
如果不需要换源就可以成功下载,那么我们则不需要下面的步骤,可以直接跳过到 开始使用
如果没有成功则试试:
首先你得先修改配置文件 ×2
.jenkins/updates/default.json
1 | https://www.google.com -> https://www.baidu.com |
.jenkins/hudson.model.UpdateCenter.xml
1 |
|
然后重启。
笔者亲测,先启动然后再关掉后修改
如果还不行,那试试自己下插件导入吧
捷径②
链接:https://pan.baidu.com/s/1fAldQYwd4F2nMeWSStP5Aw
提取码:wy0z
过期评论叫博主续期
下载之后,将插件拖入到.jenkins的插件文件夹,然后运行就可以自动导入了(不是 这是保姆级别教学吗)。
开始使用
在安装之后,我们需要在Manage Jenkins
中选择例如系统配置或者全局配置,当然你也可以在这个里面查看/管理你自己下载的插件。
在开始之前的基础前置配置项
Configure System (系统设置)
在这里我们需要配置远程服务器的,也就是推送到的机器,这里我们可以查看到一个为 Publish over SSH
,那么我们需要配置其服务器地址以及多路密码。
我们可以参考如下图:
解析如下:
Passphrase
:服务器的密码配置
Name
:设置你的服务器名字,便于自己查看选择(例如:Calyee的阿里云服务器)
Hostname
:服务器的IP地址
Username
:登录时候的用户名(例如:root)
Remote Directory
:上传代码的根路径地址(例如:/usr/local/app
)
Global Tool Configuration (全局工具配置 )
这个你可以配置你当前跳板机的一些打包环境(注意是打包环境),因为我们打包是在部署了Jenkins的跳板机上面进行打包操作的,假如我们有需要打包前端环境,那么Npm环境当然得配的,Java则JDK环境,Maven环境等等。
所以你需要在当前设置下配置你的环境,有点像在Windows中的各种的环境变量。在此就不列图了,自行配置即可。
这下面是Jenkins的流程配置
源码配置(示例一)
我们选择我们源码的地址拉取方式Git
,然后配置git存储库URL,以及配置拉取账号的凭证(账号拥有拉取代码的权限),配置拉取分支(默认不填写:master),源码库浏览器可以选择自动(如果上面的都配置完毕)
Post Steps
1 | 样例演示为SpringBoot项目,使用Maven打包 |
构建后操作
Send build artifacts over SSH #SSH Publishers #SSH Server
选择SSH连接的机器(如果基础配置有设置的话,此项应该会使用之前配置的,如果没用则需要去配置)
假如我们打包的文件在 chat-server/target/chat-server.jar
,这个很好理解,如果是SpringBoot项目,chat-server就是一个模块,然后找到打包好的jar包即可
此时:
1 | Source files: chat-server/target/chat-server.jar |
1 | Exec command: cd /usr/local/app # 假如我们的项目在这个目录下 |
stop.sh
1 | echo "Stop Procedure : chat-server.jar" |
如果是在linux里面则是上面那个形式拿到pid
如果容器是跑在docker里面则可以通过下面的命令获取pid
1 | 建议使用这个 |
如果是使用了第一个,那么命令可以修改为(calyeechat:为jar包在docker镜像中的容器名,{print $1}
代表拿第几个参数)
1 | echo "Stop Procedure : calyeechat" |
我们知道{print $1}
表示拿第几个参数,那么第二个也可以这样写
1 | echo "Stop Procedure : calyeechat" |
start.sh
1 | export JAVA_HOME=/usr/java/jdk1.8.0_402 |
第一行:设置设置java home,如果是全局安装,那么不需要设置也可以
第六行:这个就是我们前面在Jenkins中设置的传输路径
那么在Docker也是同理,不过我们在传输后,需要在目录下创建一个Dockerfile文件
具体Dockerfle操作可以参考Dockerfile构建项目
那么只不过中间多了一步打包的环节(打包前需要删除之前的容器:具体操作参考Docker基础命令
然后在docker里面跑起来即可,命令的修改可以参考上面拿pid的操作
配置(示例二)
假如我们需要打包一个Vue的前端项目(这不就是前后端分离项目的Jenkins自动化部署吗?)。
对于这个的话,我们可以创建一个自由风格的项目,然后众所周知Vue脚手架的项目打包,如果依赖已经装了,那么就可以不用装了。这个必须得先在Jenkins插件中装上Node的插件(名字叫: NodeJS Plugin)。
所以这里有一个参数可以选择
This project is parameterised
我们选择一个布尔类型的参数即可,我们只需要一个开关控制。
命名随意,在此笔者命名为 need_install
然后后面还是一样的配置源码地址
Provide Node & npm bin/ folder to PATH
配置完之后,我们还需要在打包环境中配置一个nodejs,这个只需要选择全局的node即可,我们在安装好node后(Jenkins机器),也需要配置node的home路径
Build Steps
笔者在此给一个示例(Execute Shell)
1 | if [ "${need_install}" == "true" ]; then |
Post-build Actions
服务器配置+移动文件
前面知道我们压缩的文件名为dist.zip
那么
1 | Source files: dist.zip |
都到这儿了,你应该会用了吧
Jenkins角色权限
权限管理笔者是用的Role-based Authorization Strategy
对于权限 我们首先要知道Jenkins里面有三类
- Global Roles: 全局角色
- Item Roles: 项目角色
- Agent roles: 代理角色
在安装好插件后,重启一下,然后在System Configuration中就可以找到Manage and Assign Roles
不过我们需要先设置
Security
Security的话 也是在System Configuration中(笔者版本2.464 JDK17),可能不同版本会有所差异,只要你寻找到授权策略也是一样的。
Security Realm 选择 Jenkins' own userdatabase
Authorization选择 Role-Based Strategy
Manage and Assign Roles
然后选择此项,里面就可以配置角色的权限了,笔者推荐,未认证(Anonymous)的用户,不给任何权限。这样没有认证就什么都看不到,如果有这个需求可以适当放宽。任何认证的用户(Authenticated Users)可以给一些可读的权限(即只能看,不过Job项那,不推荐给可读),其次就是,对于项目的管理,这个根据自己项目的规模以及具体的需求自定义(比如:我们开发的话,直接全拉满也行,如果自己就是运维。如果分工明确的话,具体权限具体给即可)
在此有一项需要注意:就是Pattern,此项可以配置角色的访问项目例如:
当前有三个项目:
- calyee_blog_web
- calyee_blog_api
- calyee_chat
那么假如我只需要看到calyee_blog的项目,而calyee_chat没有权限,那么则可这样设置calyee_blog_.*
注意:是 .* 不是 * 。
可能会遇到的问题
管理员权限被取消
当在切换权限的时候,把管理员权限给去掉了,我们可以找到jenkins的目录 %Jenkins_Home%.jenkins/config.xml
1 | <useSecurity>true</useSecurity> |
重启,然后就可以进入了,此时我们还需要重复步骤 Security,然后重新设置权限即可。