jenkins自动化部署
2021年 01月 02日 星期六 15:11:03
正式学习自动化 部署
初次探索,先实现java的springboot项目的自动部署
前言:本人使用的系统是deepinv20系统
1.由于是java项目,所以先安装java环境
从官网下载jdk-8u271-linux-x64.tar.gz至本地
解压
tar -zxvf jdk-8u271-linux-x64.tar.gz
把解压好的文件夹移动到当前用户的文件目录中
mv jdk1.8.0_271 /home/shizc/
配置java环境变量
sudo vi /etc/bash.bashrc
打开配置文件后在文件末尾输入以下配置信息
JAVA_HOME=/home/shizc/jdk1.8.0_271
CLASSPATH=.:$JAVA_HOME/bin.tools.jar
PATH=PATH
export JAVA_HOME CLASSPATH PATH
保存退出后输入以下命令,是配置生效
source /etc/bash.bashrc
2.设置java项目的打包工具maven的环境变量
可以去maven官网下载最新的maven包到本地,然后解压使用,我这里使用了idea插件库里带的maven3
sudo vi /etc/bash.bashrc
添加内容:
export PATH="/home/shizc/idea-IU-183.6156.11/plugins/maven/lib/maven3/bin:$PATH"
保存并退出后
source /etc/bash.bashrc
是修改生效
输入
mvn --help
验证是否配置成功
3.使用Spring Initializr 初始化一个测试项目
国内可以使用阿里云的镜像,以加快构建速度
只需要选择Spring Web,使我们可以写接口进行测试,就可以了
下面,我们写一个接口并进行访问
启动后进行访问
4.安装Git环境
本例子使用开源的Gitee码云作为代码仓库,所以需要使用Git环境进行代码的上传和下载
sudo apt-get install git
安装完成使用命令
git --help
进行验证
然后我们把刚才的项目上传到Gitee代码仓库
首先需要安装idea的Gitee插件
重启idea
配置码云的账户
进行代码上传
提示成功后去Gitee查看
5.安装docker,对springboot项目使用容器化部署
不了解docker的可以百度一下
docker的阿里云二进制包下载地址:mirrors.aliyun.com/docker-ce/l…
直接下载自己喜欢的版本,比如最新版19.03.12
下载好了,解压
tar xzvf docker-19.03.12-ce.tgz
复制解压好的程序文件到/usr/bin目录下
sudo cp docker/* /usr/bin/
复制完成后,docker就算已经安装了
此时输入命令
docker version
就会出现相关信息
然后我们给docker配置自动启动
vi /usr/lib/systemd/system/docker.service
输入内容
[Unit] Description=Docker Application Container Engine Documentation=docs.docker.com After=network-online.target firewalld.service Wants=network-online.target
[Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s
[Install] WantedBy=multi-user.target
写完配置文件,进行服务启动
systemctl daemon-reload # 重载环境变量 systemctl start docker.service # 启动docker服务 systemctl enable docker #设置docker服务开机启动
6.安装Jenkins
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
拉取jdk的docker镜像到本地
sudo docker pull openjdk:8-alpine
这个镜像只有105M,已经很小了
理论上,只要功能符合要求,镜像应尽量的体积小,这个是我见过的体积最小的了
下载jenkins
官网地址:www.jenkins.io/zh/download…
下载war包,比较方便
启动命令:
nohup java -jar /home/shizc/Documents/jenkins.war>/home/shizc/Documents/jenkins.out&
这个后台启动模式,启动完成后,默认的端口号为:8080
在地址栏输入:ip:8080
按页面上的提示找到密码,输入命令:
cat /home/shizc/.jenkins/secrets/initialAdminPassword
输入密码,点击继续,然后等待
出现上述页面后,先不要急着进行下一步,默认的镜像源都是国外的,会很慢,换成国内镜像源,安装的就快很多。
需要先关闭刚才启动的Jenkins程序,
使用jps命令,查看当前运行的java程序,jps是jdk带的
使用命令
kill -9 8719
关闭jenkins程序
再次使用jps命令,确认是否已经关闭
根据上面获取密码的命令推断出jenkins的目录:/home/shizc/.jenkins/
我们进入其中的updates目录,进行文件修改
cd /home/shizc/.jenkins/updates
sed -i 's#updates.jenkins.io/download#ht…' default.json
sed -i 's#www.google.com#www.baidu.com#g' default.json
然后使用命令:
nohup java -jar /home/shizc/Documents/jenkins.war>/home/shizc/Documents/jenkins.out&
再次启动jenkins
然后就是点击安装推荐的插件、下一步是设置自己的用户和密码
接下来要设置全局的工具配置,jdk,git,maven
点击图中的设置项
点击保存
点击确定,创建出一个任务,会跳转到下一个页面
输入一下描述
输入需要自动部署的代码仓库地址,需要外网可访问。(单纯的内网环境,本文章不适用哦)
然后就到了核心部分
把编写的构建脚本内容,贴到里面。下面是脚本内容:
#!/bin/bash
#maven打包
mvn clean package
echo 'package ok!'
echo 'build start!'
cd ./
service_name="demo1"
service_port=10086
#查看镜像id 注意 asd 是 sudo时要用到的密码,如果你的服务器sudo是无需输入密码,则删除
IID=$(echo "asd" | sudo docker images | grep "$service_name" | awk '{print $3}')
echo "IID $IID"
if [ -n "$IID" ]
then
echo "exist "$service_name" image,IID=$IID"
#删除镜像
echo "asd" | sudo docker rmi -f $service_name
echo "delete $service_name"
#构建
echo "asd" | sudo docker build -t $service_name .
echo "build $service_name"
else
echo "not exist "$service_name" image,build docker"
#构建
echo "asd" | sudo docker build -t $service_name .
echo "build $service_name"
fi
#查看容器id
CID=$(echo "asd" | sudo docker ps | grep "$service_name" | awk '{print $1}')
echo "CID $CID"
if [ -n "$CID" ]
then
echo "exist "$service_name" container,CID=$CID"
#停止
echo "asd" | sudo docker stop $service_name
#删除容器
echo "asd" | sudo docker rm $service_name
else
echo "not exist "$service_name" container"
fi
#启动
echo "asd" | sudo docker run -d --name $service_name --net=host -p $service_port:$service_port $service_name
脚本的主要流程是: 打包->构建docker镜像->启动docker容器
当然为了节省磁盘空间,在脚本中加入判断用来删除旧的镜像和容器。当然要做版本控制的话,可以修改脚本。
以镜像的版本做项目的版本控制。例如: 可以存 demo:v1 - demo:v5 5个版本的镜像,超出的删除,依据具体情况使用不同版本的镜像启动容器即可。
然后点击保存按钮。进入到下一个页面。
点击 Build Now 按钮即可开始自动部署流程
下面我们修改一下代码,并把代码提交到仓库,然后点击构建,查看能否实现一键部署
提交代码,然后点击构建。
然后下方 会出现任务信息,点击那个时间,可以进入到详情页面。
进入到详情页面,点击控制台输出,可以看到,部署的整个过程,如果构建失败,也能看到失败的原因。根据原因修改配置或者脚本,然后再次点击构建。
看到成功标志,然后我们去浏览器,输入地址,查看返回内容是否是预期的内容.
嘿嘿,成功了。
这样,我们就可以为我们的每一个微服务创建一个任务,在代码更新后,手动点击构建,这样比较灵活。
除此之外,既然说的是自动部署,当然是可以实现代码提交后无需认为干预,程序自动好=构建部署。
这个时候就要使用到这个触发器了。可以设置轮训,不断检测代码有没有更新。但是我觉得一般情况下不使用全自动部署。这样会浪费资源。可以设置成定时部署的形式。到某一个时间点自动发布最新的代码。
本人也是初次使用jenkins自动部署,故做一下记录,忘了就可以翻翻看看。
更加规范高级的自动化部署应用就需要进一步学习探索了。如果你接触过大厂的自动化部署,流水线等,你就会发现是这我们说的这个是类似的,甚至是根据这个改造的。