前言
本文通过例子,系统性地讲解jenkins的安装、部署和部署springboot项目。内容覆盖docker、gtiea\免登录,编写shell脚本。
一、环境
操作系统:windows
两台服务器:centos7
服务器A:安装jenkins
服务器B:部署代码
二、依赖
服务器A需安装JDK、MAVEN、git,另外还需可以代码版本托管服务器,用来提交代码。
JDK安装
我是下载jenkins官方的war安装。所以必须需预先安装好JDK。
jdk下载
在window系统下,进入官网:Java Downloads | Oracle 中国,下载jdk17linux版
- 上传安装包到服务器A
安装上传工具:
yum install lszrz
上传jdk文件:
#创建存放文件的目录
cd /opt
mkdir java
cd java
#上传文件
rz
选择window系统刚下载的jdk包,然后自动上传。
解压文件
tar -xzvf jdk-17.0.10_linux-x64_bin.tar.gz
配置jdk环境变量
编辑环境
/etc/profile
- 使配置生效
source /etc/profile
- 查看是否配置成功
java -version
如果出现如下界面,说明配置成功
到此,jdk已经安装成功。
MAVEN安装
maven安装过程和jdk比较类似。
maven下载
进入官网:Maven – Download Apache Maven,下载
创建目录
cd /opt/
mkdir maven
进入目录
cd maven
上传文件
rz
解压文件
tar -xzrf apache-maven-3.9.6-bin.tar.gz
配置环境变量
vi /etc/profile
使配置生效
source /etc/profile
验证配置是否成功
mvn -version
如果看到下图,即说明配置成功了
maven仓库配置
创建仓库目录
mkdir maven-repository
配置settings.xml
cd /opt/maven/apache-maven-3.9.6/conf/
备份settings.xml(非必须)
cp settings.xml settings.xml-bak
在window系统配置好settings.xml(主要是配阿里镜像库),上传到/opt/maven/apache-maven-3.9.6/conf/目录下,覆盖settings.xml。(也可以在linux下自己编辑settings.xml)
#上传settings.xml
rz
修改<localRepository>
vi settings.xml
修改仓库到刚才创建的目录
修改镜像地址
到此,maven也安装配置完成。
git安装
参考:Centos7系统上安装git命令_centos7安装git命令-CSDN博客
检查是否已经安装git
git --version
安装git
yum -y install git
查看git安装目录
主要是给后面的jenkins配置时用
which git
到此,jenkins要用的工具已安装完成。接下来安装jenkins。
安装jenkins
进入官网:Jenkins 的安装和设置
下载jenkins
点击下面
进入页面,然后拉到页面下面。建议下载较新版本,因为有些老版本安装插件会有问题。
创建jenkins目录
mkdir jenkins_home
进入目录
cd jenkins_home
上传刚下载war
rz
启动jenkins
设置端口9091
注意端口是否被占用,可通过命令查端口。(如果系统已经安装过jenkins,建议清除干净再启动,不然可能会影响到这次的)。如果是在生产上,建议通过后台的方式启动,nohup java -jar ...
java -jar jenkins.war --httpPort=9091
记住密码
登录jenkins
http://192.168.196.5:9091/login?from=%2F。
复制密码,点“继续”登录。
安装插件
安装插件有两种方式,在线自动安装和手工离线安装。
在线安装插件
新手建议默认安装(在线自动安装)
插件安装完之后,出现如下界面,然后设置一个管理员。
点击下一步出现如下界面,点击保存并完成
点击开始使用jenkins。可能有点卡,要稍等。。
根据自己需求添加插件。
我使用代码托管是gitea,打包工具是maven,我是使用ssh的方式把打包好的jar远程部署到另外一台服务器。所以我还需安装gitea、mave和ssh插件。提示:这里的maven插件和之前安装的maven是不同的,这里的插件表明安装了才可以配置相关的maven信息,并且在jenkins运行。
看到如下界面,说明插件已经安装成功。
maven和ssh的安装过程同上面,这里就不细讲。
查看已经安装好的插件
jenkins离线安装插件(plugin)
如果插件无法自动安装,还可以通过手工安装。
下载页面
找到 releases,并且点击进入该页面,会出现多个版本,下载地址就在download的旁边的direct link,点击之后会下载一个名称后缀为.hpi的文件。
手工安装下载下来的插件
到此,离线安装插件已经完成。
补充:
离线插件也可以通过官网下载Jenkins Plugins
配置国内的清华镜像源
自动安装插件如果无法安装,也可以更换jenkins升级站点,把它设为国内站点。
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
配置jenkins
全局工具配置
还记得之前安装的jdk、maven和git吧,这些都是jenkins的工具,现在就可以用上场了。
配置maven
配置settings.xml
找出settings.xml位置。
配置maven安装
拖到下面,看到maven安装
找出maven安装目录
配置
配置JDK
找出jdk的安装目录
配置jdk
配置git
找出git安装目录
配置
系统配置
配置Publish over SSH
在服务器上生成私钥和密钥。目的是免登录其他远程服务器。
#进入目录
cd /root/.ssh/
#生成密钥
ssh-keygen
私钥:id_rsa 公钥:id_rsa.pub
cat id_rsa
把私钥复制好
把私钥粘贴到这里。
如果想要访问那台服务器,还需将公钥发送给远程服务器。
ssh-copy-id root@远程服务器ip
执行上述指令后,会要求我们输入该用户的密码进行验证,我们输入密码后,远程服务器验证密码正确便会将该公钥保存该服务器的/root/ .ssh/authorized_key。再次连接远程服务器,不用输入密码即可连接并执行指令。注意authorized_keys是否有读写权限,没有的话还需授权。
这里可以看到jenkins的主目录,
配置发布代码的服务器
jenkins拉取代码并打包好程序之后,如果想发布到其他服务器,还需配置一下远程服务器。
输入192.168.196.4(远程)这台服务器的密码。(如果在192.168.196.4安装jenkins,这里配的就是192.168.196.5)
配置好之后,点击测试。
看到success就表示配置成功了。
参考图:
凭证管理
添加gitea登录账号
我在gitea上创建一个账号(如名为jenkins),并给这个账号有代码读取权限。
使用这个登录账号配置凭证。
测试
git拉取代码
丢弃旧的构建
保留3天内的或者前10次的构建数据
配置代码地址。账号为登录gitea的账号和密码。
配置maven打包。
clean -Dmaven.test.skip=true package
配置maven仓库配置。
选择前面配置好的settings.xml。提示:使用默认maven可能会出问题,所以最后选自己配置好的。
构建项目
查看控制台信息
从上面信息可看出,代码已经从gitea上拉取下来,并打包成功。
进入服务器查看,发现打包在这里了。/root/.jenkins/workspace
接下来就需要部署代码了。
本地部署代码
本地部署,即在jenkins当台服务器上部署。
选择生成后脚本执行。
java脚本启动
编写shell脚本
再次构建,然后查看控制台
发现已经启动。
docker启动
修改jar打包名,目的为了dockerfile编写方便
编写dockerfile
编写shell脚本
注意:dockerfile是在任务名目录下
打开控制台。
通过日志可知道已经部署成功。可打开浏览器验证。
远程服务器部署
Add post-build step
编写远程shell脚本
首先在远程服务器的/app目录下编写一个.sh脚本。jenkins会把jar发布到配置的app/workspace(具体看自己的配置)下。
[root@localhost ~]# cd /app/workspace/
[root@localhost workspace]# ls
app.jar
[root@localhost workspace]# cd ..
[root@localhost app]# touch app-start.sh
[root@localhost app]# vi app-start.sh
脚本如下(app-start.sh):
echo "Stop Procedure : app.jar"
#获取指定项目运行pid
pid=`ps -ef |grep java|grep app.jar | grep -v grep |awk '{print $2}'`
echo 'old Procedure pid:'$pid
#pid存在则kill
if [ -n "$pid" ]
then
kill -9 $pid
fi
echo 'Start the program : app.jar'
#给项目jar 777权限
#进入项目所在目录,在jenkins服务器上配置的工作目录
cd /app/workspace
chmod 777 /app/workspace/app.jar
echo '-------Starting-------'
#运行项目 (指定时区 指定字符编码 指定输出日志)
nohup java -jar app.jar 2>&1 &
echo 'jar启动完成'
注意:运行.sh脚本时,如果报无法找到java命令,则使用java全路径执行。 如下脚本
nohup /opt/java/jdk-17.0.10/bin/java -jar app.jar >app.log 2>& 1 &
Add post-build step
编写启动脚本:
#注意jenkins配置到192.168.196.5的工作目录:/app/workspace
ssh 192.168.196.5 "rm -rf /app/workspace/*"
scp -r ${WORKSPACE}/target/app.jar 192.168.196.5:/app/workspace/app.jar
ssh 192.168.196.5 "cd /app && sh app-start.sh"
查看控制台
以上说明已经部署成功。
如果远程机使用docker,同样可以写个.sh脚本。
总结
jenkins是个自动化部署工具,可通过安装各种插件来完成部署。