虽然之前搭建过了,但是那时候比较急(只在自己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
1.3 下载和配置JDK8
- 去Oracle官网下载Linux版本x64的JDK8
ps: 下载需要登录Oracle账号,这个注册什么的都比较卡。
-
之后把下载的文件传到服务器,我是用的FileZilla软件,方便点。
ps: 个人习惯,喜欢把自己下载的东西,都放在
/usr/etc
目录下(默认没有这个目录,需要新建) -
解压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
- 到官网下载最新3.6.3的maven。
-
把下载好的maven传到服务器(我用的工具是FileZilla)
-
解压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环境变量
- 修改配置文件
/etc/profile
vi /etc/profile
# 移动到最底部,添加如下几行(MAVEN_HOME需要根据自己放的地方修改)
# maven
export MAVEN_HOME=/usr/etc/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH
- 使环境变量生效
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:前面配置的端口/)
3.4 jenkins部署来自gitee的项目——前置准备
- 简单建只含有映射
/test
的controller的springboot项目
我这里直接在自己公开的gitee仓库放了一个测试用的java项目jenkins-demo,懒得创建的可以直接clone一个
- jenkins安装一些常用插件
主页 => 系统管理 => 插件管理 => "可选插件"
这里安装的主要是:
- Maven Integration (新建job时,多一个maven项目的选项)
- Deploy to container (部署war包所需的 => 虽然暂时用不上,这个是根据Jenkins+Maven+Github+Springboot实现可持续自动部署(非常详细)安装的)
- Publish Over SSH (通过ssh推送文件,可执行shell指令)
- gitee (用于从gitee拉取项目的)
这里把上面说的4个都先装了。(安装新的插件后需要重启jenkins才能生效)
- 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得到配置后保存。
- gitee配置
主页 => 系统管理 => 系统配置
找到“gitee配置”
这里需要临时去gitee用户那里弄个私人令牌
复制上面的文字,到jenkins上配置。
测试一下连接
- 服务器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拉取项目部署
- jenkins => 主页 => 新建任务
选择自由风格的项目来创建
- 填写gitee项目连接
- 源码管理,选择git,配置gitee信息
这里需要临时添加一下凭证
这里图片里git链接是我之前截图的,和后面使用的git项目链接不一样。最后使用的是(git@gitee.com:Ashiamd/jenkins-test.git
)
- 构建触发器
这个需要临时到gitee上配置webhook
下面这个项目名无视,这个老项目名,后面删了。
- 构建环境
- 构建
选择 最下面一个,maven选项
目标:clean install
- 构建后操作
- 前面构建环境用到一个
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!”。