centos7部署jenkins和发布springboot项目

虽然之前搭建过了,但是那时候比较急(只在自己github记了一些相关的博客文章链接),有些步骤不是很熟,干脆从头做一遍记录。

ps:下面记录比较乱,建议如果同样对jenkins不熟练的同行,看看其他文章。下面这个主要是给我自己回顾流程的。
ps:下面记录比较乱,建议如果同样对jenkins不熟练的同行,看看其他文章。下面这个主要是给我自己回顾流程的。
ps:下面记录比较乱,建议如果同样对jenkins不熟练的同行,看看其他文章。下面这个主要是给我自己回顾流程的。
ps:下面记录比较乱,建议如果同样对jenkins不熟练的同行,看看其他文章。下面这个主要是给我自己回顾流程的。

1. 安装JDK1.8 (其实个人可以考虑11,只不过大多数生产还是用8多一点)

1.1 查看自己的CPU是Intel还是AMD

这里我是Intel的CPU

[root@ash /]# cat /proc/cpuinfo | grep 'model name'
model name      : Intel(R) Xeon(R) Gold 6161 CPU @ 2.20GHz

1.2 CPU是否支持x64指令集

(下面指令返回1说明支持x64指令)

[root@ash /]# cat /proc/cpuinfo  | grep flags | grep lm | wc -l
1

linux查看cpu是否支持64位的方法

1.3 下载和配置JDK8

  1. 去Oracle官网下载Linux版本x64的JDK8

找合适的JDK包

  ps: 下载需要登录Oracle账号,这个注册什么的都比较卡。
  1. 之后把下载的文件传到服务器,我是用的FileZilla软件,方便点。

    ps: 个人习惯,喜欢把自己下载的东西,都放在/usr/etc目录下(默认没有这个目录,需要新建)

  2. 解压jdk

[root@ash etc]# tar -zxvf jdk-8u271-linux-x64.tar.gz

ps: 个人习惯,把原本下载的压缩包保留,移动到对应的文件夹里

[root@ash etc]# mv jdk-8u271-linux-x64.tar.gz jdk1.8.0_271/

1.3 配置全局(所有用户生效)的jdk环境变量

# 查看jdk解压后的路径
[root@ash jdk1.8.0_271]# pwd
/usr/etc/jdk1.8.0_271

# 配置环境jdk8变量(移动到最下面,添加以下几行)
[root@ash jdk1.8.0_271]# vim /etc/profile

# jdk8
export JAVA_HOME=/usr/etc/jdk1.8.0_271
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

使jdk配置立即生效

[root@ash etc]# source /etc/profile

验证,查看jdk版本

[root@ash etc]# java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)

2. maven部分(之后部署SpringBoot需要用到)

2.1 下载maven

  1. 官网下载最新3.6.3的maven。

  1. 把下载好的maven传到服务器(我用的工具是FileZilla)

  2. 解压maven压缩包

个人习惯把自己下载的都丢/usr/etc目录下,然后把解压后的源压缩包再丢到解压后的目录里。

tar -zxvf apache-maven-3.6.3-bin.tar.gz
[root@ash etc]# ls
apache-maven-3.6.3  jdk1.8.0_271

[root@ash etc]# cd apache-maven-3.6.3/

[root@ash apache-maven-3.6.3]# ls
apache-maven-3.6.3-bin.tar.gz  bin  boot  conf  lib  LICENSE  NOTICE  README.txt

2.2 配置maven环境变量

  1. 修改配置文件/etc/profile
vi /etc/profile

# 移动到最底部,添加如下几行(MAVEN_HOME需要根据自己放的地方修改)

# maven
export MAVEN_HOME=/usr/etc/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH
  1. 使环境变量生效
source /etc/profile

2.3 检验环境变量是否生效

# 有输出,说明成功
[root@ash apache-maven-3.6.3]# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/etc/apache-maven-3.6.3
Java version: 1.8.0_271, vendor: Oracle Corporation, runtime: /usr/etc/jdk1.8.0_271/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1062.12.1.el7.x86_64", arch: "amd64", family: "unix"

2.4 修改maven使用国内仓库源

进入maven所在目录的conf目录内,修改settings.xml文件

vim settings.xml
/mirror

# 在 <mirrors>前添加阿里仓库,最后如下
<mirror>
  <id>nexus-aliyun</id>
  <mirrorOf>central</mirrorOf>
  <name>Nexus aliyun</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

3. jenkins部分

3.1 下载jenkins

jenkins官方下载地址
这里我选择TLS的CentOS版本

根据官方的流程

To use this repository, run the following command:

WARNING: The gpg key use to sign our packages has been updated on 16th of April 2020, therefore you need to reimport it if you imported before this date.

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

If you've previously imported the key from Jenkins, the rpm --import will fail because you already have a key. Please ignore that and move on.

yum install jenkins

The rpm packages were signed using this key:

pub   rsa4096 2020-03-30 [SC] [expires: 2023-03-30]
      62A9756BFD780C377CF24BA8FCEF32E745F2C3D5
uid                      Jenkins Project 
sub   rsa4096 2020-03-30 [E] [expires: 2023-03-30]

3.2 开启jenkins服务

查看jenkins服务状态,默认没有开启,需要我们自己打开服务

# 查看服务状态
[root@ash ~]# systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
   Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:systemd-sysv-generator(8)


# 开启服务 , 这里可能出现这个异常,没有的就可以直接继续下面的流程了。这里遇到问题就顺便解决下。
[root@ash ~]# systemctl start jenkins
Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.

# 再根据提示信息,查看下jenkins的服务状态 (下面)
[root@ash ~]# systemctl status jenkins -l
● jenkins.service - LSB: Jenkins Automation Server
   Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sat 2020-11-21 20:18:41 CST; 1min 46s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 8850 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=1/FAILURE)

Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: Starting LSB: Jenkins Automation Server...
Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 runuser[8855]: pam_unix(runuser:session): session opened for user jenkins by (uid=0)
Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 jenkins[8850]: Starting Jenkins bash: /usr/bin/java: No such file or directory
Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 jenkins[8850]: [FAILED]
Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: jenkins.service: control process exited, code=exited status=1
Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: Failed to start LSB: Jenkins Automation Server.
Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: Unit jenkins.service entered failed state.
Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: jenkins.service failed.

# 上面提到 /usr/bin/java: No such file or directory ,
# jenkins是依赖java的,但是其直接默认我们是把java安装在了/usr/bin/java下,
# 然而并没有,所以这里再修改下jenkins关于java的配置文件

# 查看我们java位置(第一个)
[root@ecs-sn3-medium-2-linux-20200117011904 jenkins]# whereis java
java: /usr/etc/jdk1.8.0_271/bin/java /usr/etc/jdk1.8.0_271/jre/bin/java

# 修改jenkins配置文件
[root@ash ~]# vim/etc/init.d/jenkins

# 找到 candidates=" 的位置,行末尾添加我们的java路径 (/usr/etc/jdk1.8.0_271/bin/java)

# 重启jenkins服务(出现警告,根据警告做 systemctl daemon-reload)
[root@ash jenkins]# systemctl start jenkins
Warning: jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.

[root@ash jenkins]# systemctl daemon-reload

# 再次查看jenkins服务状态,发现已经正常启动
[root@ecs-sn3-medium-2-linux-20200117011904 jenkins]# systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
   Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
   Active: active (running) since Sat 2020-11-21 20:36:56 CST; 1min 26s ago
     Docs: man:systemd-sysv-generator(8)
   CGroup: /system.slice/jenkins.service
           └─9003 /usr/etc/jdk1.8.0_271/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=tru...

Nov 21 20:36:56 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: Starting LSB: Jenkins Automation Server...
Nov 21 20:36:56 ecs-sn3-medium-2-linux-20200117011904 runuser[8989]: pam_unix(runuser:session): session o...)
Nov 21 20:36:56 ecs-sn3-medium-2-linux-20200117011904 jenkins[8984]: Starting Jenkins [  OK  ]
Nov 21 20:36:56 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: Started LSB: Jenkins Automation Server.
Hint: Some lines were ellipsized, use -l to show in full.

jenkins 启动失败:Job for jenkins.service failed because the control process exited with error code. See

3.3 jenkins初始化配置

前面安装好了jdk、jenkins,并且开启了jenkins服务,这里就正式装一些jenkins常用的插件。

jenkins服务默认在8080端口启动,这里直接访问ip:8080,就可以进入到jenkins的界面

按照步骤走就好了....(安装推荐的插件)

慢慢等待...

根据步骤创建管理员账号

jenkins默认端口8080,需要配合修改jenkins的配置文件才能生效(改了需要重启jenkins服务才生效 [root@ash jenkins]# systemctl restart jenkins)

接着就ok了

ps: 我是打算改jenkins的访问端口。方法如下(当然云服务器,需要开放对应的端口,不然防火墙过不去的)

[root@ash jenkins]# vim /etc/sysconfig/jenkins

#找到JENKINS_PORT="8080",修改成自己要的jenkins启动(服务)端口

然后重启jenkins服务

[root@ash jenkins]# systemctl restart jenkins

然后jenkins管理页面对应的修改“Jeknins_URL”属性。

主页 => 系统管理 => 系统配置 => Jenkins Location => Jenkins URL (修改成 http://服务器IP:前面配置的端口/)

jenkins 更改默认端口

3.4 jenkins部署来自gitee的项目——前置准备

  1. 简单建只含有映射/test的controller的springboot项目

我这里直接在自己公开的gitee仓库放了一个测试用的java项目jenkins-demo,懒得创建的可以直接clone一个

  1. jenkins安装一些常用插件

主页 => 系统管理 => 插件管理 => "可选插件"

这里安装的主要是:

这里把上面说的4个都先装了。(安装新的插件后需要重启jenkins才能生效)

  1. jenkins全局工具配置

主页 => 系统管理 => 全局工具配置

  • maven配置

  • JDK设置

  • git设置
    如果没有,就临时安装下,我这里发现没有。就yum -y install git。临时装了个git。
    如果yum下载软件很慢,可以网上找下修改国内源的方法。
    比如我这里centos7,修改成阿里源

wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache

修改好 maven、jdk、git得到配置后保存。

  1. gitee配置

主页 => 系统管理 => 系统配置

找到“gitee配置”

这里需要临时去gitee用户那里弄个私人令牌

复制上面的文字,到jenkins上配置。

测试一下连接

  1. 服务器ssh配置

主页 => 系统管理 => 系统配置

找到最下面 “Publish over SSH”

  • Name 随便写
  • HostName 服务器ip
  • username 服务器登录的用户名,比如root之类的
  • Remote Directory 远程登录后,进那个目录。这个直接填"/",根目录

然后,在需要拉取gitee项目并跑项目的服务器上(也就是上面hostname配置的),生成密钥对。

ssh-keygen -t rsa

[root@ash .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub
[root@ash .ssh]# cat id_rsa

上面这个是在用户目录的.ssh目录下,即~/.ssh

把 id_rsa.pub的内容复制,粘贴到authorized_keys的最后一行。

vi authorized_keys
# 把id_rsa.pub复制的内容粘贴到最后一行并保存

把 id_rsa的内容复制,放到jenkins的配置里。

测试一下是否配置好ssh

如果爆红。那就是上面id_rsa的内容没复制到jenkins,或者 id_rsa.pub内容没复制到服务器authorized_keys的最后一行。
authorized_keys文件,在当前用户的.ssh目录下,即~/.ssh

3.5 新建job,从gitee拉取项目部署

  1. jenkins => 主页 => 新建任务

选择自由风格的项目来创建

  1. 填写gitee项目连接

  1. 源码管理,选择git,配置gitee信息

这里需要临时添加一下凭证

这里图片里git链接是我之前截图的,和后面使用的git项目链接不一样。最后使用的是(git@gitee.com:Ashiamd/jenkins-test.git

  1. 构建触发器

这个需要临时到gitee上配置webhook

下面这个项目名无视,这个老项目名,后面删了。

  1. 构建环境

  1. 构建

选择 最下面一个,maven选项

目标:clean install

  1. 构建后操作

  1. 前面构建环境用到一个restart.sh脚本,这里到服务器里编写一下

这里参考Jenkins+Maven+Github+Springboot实现可持续自动部署(非常详细)

下面JAVA_HOME、jar包名称,需要根据实际需求修改。这里我都改成了jenkins-demo(该脚本改至上述文章)

echo "stop服务开始"
pidlist=`ps -ef|grep demo-0.0.1-SNAPSHOT.jar | grep -v "grep"|awk '{print $2}'`
#ps -u $USER|grep "Java"|grep -v "grep"
if [ "$pidlist" = "" ]; then
        echo "no demo-0.0.1-SNAPSHOT.jar pid alive"
else
        echo "demo-0.0.1-SNAPSHOT.jar Id list :$pidlist"
        for pid in ${pidlist}
        {
                kill -9 $pid
                echo "KILL $pid:"
                echo "service stop success"
        }
fi
echo "stop服务脚本结束"
echo "start服务脚本开始"
JAVA_HOME=/usr/etc/jdk1.8.0_271
dir=/opt/jenkins_jars
cd $dir
echo dir=$dir
jar=$(find /lib -type f -name *.jar)
classpath=$dir/*:$dir/lib/*:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
echo classpath=$classpath
echo ---------------------------------------------
nohup $JAVA_HOME/bin/java -classpath $classpath -XX:-UseGCOverheadLimit -Xms1024m -Xmx2048m -jar $dir/demo-0.0.1-SNAPSHOT.jar > $dir/log/$(date +'%Y%m%d').log 2>&1 &
echo "start服务脚本结束"

ps: 脚本里用到了log目录,需要新建一个。不然这个脚本执行不了

mkdir log
[root@ash jenkins_jars]# ls
demo-0.0.1-SNAPSHOT.jar  log  restart.sh

可以先自己检验这个脚本有没有用。(如果有效,执行sh restart.sh后,jps应该多一个进程)

检验完,再kill这个进程,之后通过jenkins拉取gitee,然后部署java项目。

[root@ash jenkins_jars]# kill 19257
[root@ash jenkins_jars]# jps
9587 jenkins.war
19336 Jps

3.6 构建项目

前面gitee相关的、jdk、maven、服务器SSH什么的都配置好了之后,回到jenkins面板,构建项目

这个gitee的测试项目,用的8081端口启动。通过http://服务器IP:8081/test查看是否显示测试数据“test success!”。

(Ashiamd的github个人学习笔记)[https://ashiamd.github.io/docsify-notes/#/README] ~小尾巴~
原文地址:https://www.cnblogs.com/Ashiamd/p/14017989.html