Jenkins 自动化部署, 踩坑指南
1.JENKINS 是什么
Jenkins是一个自包含的、开源的自动化服务器,可以用于自动化与构建、测试、交付或部署软件相关的各种任务。
Jenkins可以通过本机系统包、Docker安装,甚至可以由任何安装了Java运行时环境(JRE)的机器独立运行
2.在centos 系统上安装jenkins
三种方式
- 通过 docker 安装
- 通过jenkins.war 在tomcat中运行
- 通过yum 的方式安装
2.1 通过docker 安装
- 创建jenkins 文件,并修改文件权限
mkdir -p /usr/local/atom.hu/jenkins
chown -R 1000:1000 /usr/loca/atom.hu/jenkins
- 拉取镜像
docker pull jenkins
- 启动镜像
docker run -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -v /usr/local/atom.hu/jenkins/:/var/jenkins_home -d jenkins
-
稍作等待
image -
进入目录查看密码
[root@localhost secrets]# cat initialAdminPassword
9ca7368042fe45be8b693ab43e7797d1
2.2 通过jenkins.war 的方式安装
在jenkins官网中下载war包
image可以直接右键复制软件地址, 使用 wget 命令进行下载
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
下载完成后 将项目放入tomcat
中webapps
文件夹下
2.3 通过yum的方式安装jenkins
获取软件安装源
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
安装jenkins
yum -y install jenkins
安装完成后 启动jenkins
systemctl start jenkins
通过对三种方式的实验 每种方式都进行了探索, 最后选择通过yum的方式进行安装, 也是最麻烦的安装方式, 但是相对可靠, docker 的安装方式虽然简便, 但是会遇到比较多软件环境问题. 使用jenkins.war的方式, 也相对比较简便, 但是也是遇到比较多的问题, 最后还是放弃了, 采用了最原始也是最麻烦的方式
3.0 使用jenkins自动化部署的前提条件
为了保证后面的配置能够顺利进行, 需要一些前期的准备工作
修改jenkins的配置文件
# 打开jenkins的配置文件
vim /etc/sysconfig/jenkins
# 修改 $JENKINS_USER 的值为root
$JENKINS_USER="root"
image
修改Jenkins相关文件夹用户权限
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins
重启Jenkins服务并检查运行Jenkins的用户是否已经切换为root
# 重启Jenkins(若是其他方式安装的jenkins则重启方式略不同)
systemctl restart jenkins
# 查看Jenkins进程所属用户
ps -ef | grep jenkins
# 若显示为root用户,则表示修改完成
到此为止, 前期准备工作就算完按成了, 可以开始进行jenkins自动化部署了
4.0 在jenkins中安装插件
image在jenkins中, 新手推荐直接安装推荐插件, 后设置管理员密码后, 进入主界面, 切记不要忘记密码, 虽然也有解决办法, 但是还是记住密码的好
安装必要的jenkins插件
Git Parameter Plug-In
image在后续的自动化部署中, 我们需要通过参数, 设置不同的分支, 对不同的分支进行打包, 需要这个插件的支持
Maven Integration plugin
image在部署spring boot 项目的时候, 我们需要创建maven项目, 在安装了这个插件之后, 在创建项目的时候, 如果没有这个插件, 在创建项目的时候就没有 构建一个maven项目
的选项
Publish Over SSH
有的时候我们在A机器上搭建的jenkins 但是却可能是在B机器上部署项目, 需要
Publish Over SSH
的支持
这里注意, 在填主机Ip的时候, 如果两台机器同属一个运行商的话, 尽量填写内网IP比较好, 这个很重要
5.0 在服务器中添加相关支持环境
- 安装 openjdk 1.8
jenkins 的运行需要openjdk依赖
官方说法
You will need to explicitly install a Java runtime environment, because Oracle's Java RPMs are incorrect and fail to register as providing a java dependency. Thus, adding an explicit dependency requirement on Java would force installation of the OpenJDK JVM.
yum install java-1.8.0-openjdk
- 安装 git
yum install git
- 安装 node, 后续会部署前端项目需要
# 下载安装包
wget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz
# 解压
tar -xvf node-v10.15.3-linux-x64.tar.xz -C ./
# 将node命令和npm设置软连接到 /usr/bin 中
ln -s ./node /usr/bin/node
ln -s ./npm /usr/bin/npm
# 然后在其他的地方都可以使用这两个命令了
- 安装
maven
, 并在/etc/profile
中配置
6.0 系统配置
image在全局配置工具中, 配置 jdk
, maven
, git
, node
的安装路径
7.0 自动化部署 前端vue项目
部署场景, 在A机器进行webpack打包, 将打包后的文件,发送到B机器上指定的文件夹, 通过nginx代理实现访问
- 创建一个自由风格的软件项目
2.填写项目描述
image- 选择参数化构建过程, 后续可以选择不同分支进行打包
- 选择不同的版本控制工具 svn 和 git都可以, 这里我们使用git
需要添加 自己的用户和密码, 不然会出现下面的情况
image
- 在构建环境中选择
Send files or execute commands over SSH after the build runs
image
这里的配置为, 在本地构建完成之后, 我们需要将哪些文件发送到目标主机上, 发送到目标主机上, 并执行什么命令
cd /home/project/web/test
tar -zxvf dist.tar.gz
rm -rf dist.tar.gz
/home/project/web/test
为目标主机nginx 配置过的目录
- 在构建中选中
Execute Shell
image
并配置构建时执行的命令
cnpm i &&
rm -rf dist &&
npm run build &&
cd dist&&
tar -zcvf dist.tar.gz *
点击保存, 这样就完成了 前端项目的搭建了
8.0 自动化部署 spring boot 项目
- 新建任务, 创建maven 项目
- 填写项目描述, 配置参数构建
- 配置源码管理
- 配置构建环境 ssh server
BUILD_ID=DONTKILLME
source /etc/profile;
cd /home/project/java/test&&
pid=`ps -ef | grep 'jar 名称' | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
kill -9 $pid
fi
java -jar lk-truck-mendery-webfront-1.0.0-SNAPSHOT.jar > nohup.log &
注意点
-
shell
前需要添加BUILD_ID=DONTKILLME
, 不然在jenkins创建了java 进程之后,退出的时候, 会杀死之前创建过的工程 - 需要在前面添加
source /etc/profile
, 不然可能会出现java
命令找不到的情况
到此 springboot的项目便搭建完成了
9.0 如果设置了密码之后, 又忘记了密码应该怎么办
- 进入到jenkins的配置文件中
cd /var/lib/jenkins/users
vim config.xml
image
替换途中的值, 替换为
#jbcrypt:$2a$10$DdaWzN64JgUtLdvxWIflcuQu2fgrrMSAMabF5TSrGK5nXitqK9ZMS
替换后,重启jenkins
systemctl restart jenkins
登录密码就变为 1111111 了