前言

之前项目中虽然使用过 Jenkins,但是都只是使用,没有自己搭建过,完整部署一个项目。既然工作中没有独立部署过,那么就只能自己动手实操一番,技多不压身嘛。

一开始是在本机上下载安装 Jenkins,然后将本地项目上传到 Gitlab 上,期望在 Jenkins 上构建项目,然后进行项目的部署和发布。但是在动手过程中发现本机 Jenkins 新建任务时走不通,要么就搭建虚拟机,或者搞台服务器,刚好手头有一台自己玩的服务器,刚好也刚贴合实际生产,所以才有了下文。

准备工作

JDK

准备java环境,jdk1.8

检查java是否安装,如果没有则先安装java环境:java -version

查看 jdk 安装路径:echo $JAVA_HOME

[root@iZ8vbf6lodiycfjz81qhkyZ home]# echo $JAVA_HOME
/usr/java/jdk1.8.0_251-amd64

配置环境变量

JAVA_HOME=/usr/java/jdk1.8.0_251-amd64
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

然后生效配置文件,

注意

如果不配置环境变量,结果会是这样

[root@iZ8vbf6lodiycfjz81qhkyZ alternatives]# java -version
openjdk version "1.8.0_302"
OpenJDK Runtime Environment (build 1.8.0_302-b08)
OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)

Git

通过 yum 命令安装 yum install git。

git --version
#查看安装位置
which git

maven

yum -y install maven
mvn -v  # 注: 是mvn不是maven,用错的话,还以为没有配置maven环境变量呢,错误用法:maven -vApache Maven 3.0.5 (Red Hat 3.0.5-17)
Maven home: /usr/share/maven
Java version: 1.8.0_302, vendor: Red Hat, Inc.
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.11.1.el7.x86_64", arch: "amd64", family: "unix"

修改配置文件,如下命令:

vi /usr/share/maven/conf/settings.xml#然后添加阿里云镜像地址
<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>#设置本地仓库
<localRepository>/home/maven/repository</localRepository>

配置环境变量,

vi ~/.bash_profile#追加如下内容
export M3_HOME=/usr/share/maven
export PATH=$M3_HOME/bin:$PATH

Gradle

本文使用 Gradle 的最新版本是7.2。在继续下一步之前,您应该检查 Gradle版本页面,以查看是否有较新的版本。

首先使用以下 wget 命令在/tmp目录中下载仅Gradle Binary zip文件:

wget https://services.gradle.org/distributions/gradle-7.2-bin.zip -P /tmp

下载完成后,解压缩/opt/gradle目录中的zip文件:

sudo unzip -d /home/gradle /tmp/gradle-7.2-bin.zip

通过列出/opt/gradle/gradle-7.2目录来验证是否提取了Gradle文件:

ls /home/gradle/gradle-7.2
bin  init.d  lib  LICENSE  NOTICE  README

配置环境变量,

vi ~/.bash_profile#追加如下内容
GRADLE_HOME=/home/gradle/gradle-7.2
export GRADLE_HOME
export PATH=$PATH:$GRADLE_HOME/bin

查看版本号

gradle -v

安装jenkins

(1)安装稳定版

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins

(2)安装最新版,默认安装最新的

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install -y jenkins

安装完成后,如果想查看 jenkins 版本,按照网上的说法是去 /var/lib/jenkins 目录下执行下述命令:

cat config.xml|grep version

不过我自己服务器的输出结果有点问题。

自动安装的话,默认用户名为 jenkins,端口为8080,默认目录:

  • 安装目录:/var/lib/jenkins
  • 日志目录:/var/log/jenkins/jenkins.log
  • 默认配置目录:/etc/sysconfig/jenkins

可修改jenkins用户为root用户、修改端口等

vim /etc/sysconfig/jenkins
service jenkins restart

卸载jenkins

卸载yum方式安装的jenkins(默认安装主目录是在/var/lib/jenkins/

service jenkins stop
yum clean all
yum -y remove jenkins

初始化

激活jenkins

首先启动 jenkins,执行下述命令:

service jenkins start

然后访问 http::/ip:8080,

首次登录需要输入密码,看页面提示:

/var/lib/jenkins/secrets/initialAdminPassword

最后成功登录。

浏览器进入Jenkins

(1)登录:http://自己的IP:8081/

(2)关闭:http://自己的IP:8081/exit

(3)重启:http://自己的IP:8081/restart

(4)重新加载:http://自己的IP:8081/reload

启动与关闭

service jenkins start
service jenkins stop#如果遇到warning
systemctl start jenkins
systemctl stop jenkins

插件安装

Authorize Project

给项目配置授权。

Gitlab Hook Plugin

当Github有代码提交时触发自动构建

SSH Slaves plugin

更新-2020-4-21:

1.26 还叫SSH slave

1.31.2 已经更新为SSH build Agents

Gitlab

当有新的commit push到gitlab时,jenkins可以自动触发构建过程。除了需要 gitlab-hook-plugin 插件,还需要 Gitlab 插件。

Deploy to container

与Gitlab关联

配置SSH

如果要通过 git 协议拉取代码,需要建立 Jenkins 服务器和 Gitlab 服务器的无密码通信,我们首先要生存一组密钥对。

[root@iZ8vbf6lodiycfjz81qhkyZ tmp]# ssh-keygen -t rsa -C "你的邮箱(随意)"Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:SHA256:D998pKifmjJgSmUcNNlaEDAdhB/UU4wr+QkPVMkd1KU xxxxxThe key's randomart image is:+---[RSA 2048]----+|  oBOX.B+o ..    ||  ..*.O o ..     ||   + * o  E      ||    @ .          ||   o * .S     .  ||  . o +  + + o   || . o .    + + .  ||  .   o  o . .   ||       o+oo      |+----[SHA256]-----+

完成后在/root/.ssh/ 会生成2个文件。id_rsa 和 id_rsa.pub。前者是私钥,注意保管,后者是公钥。

添加SSH Key到GitLab

登录GitLab之后: Profile Settings => SSH Keys => Add SSH key

输入之前生成的公钥,标题自定义。

推荐阅读:持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)

Gitlab令牌

关于 jenkins 中配置 gitlab access token 的步骤推荐阅读:如何获取 GitLab Token?

Jenkins安装与Gitlab项目部署详解

GitLab+Jenkins持续集成

新建任务

在新建任务前,需要配置好 SSH。

1、新建任务

2、General

其中 Gitlab Connection 是在获取 Gitlab 令牌时配置的。JDK 可以选择服务器上的路径,我们之前在全局工具配置那里配置过。

3、源码管理

此时点击添加按钮,会有个 jenkins 选项,然后进入到该页面:

类型选项可以选择 Username with password,或者 SSH,选择前者,则输入 gitlab 的账号和密码,选择后者,则在 private key 配置私钥,也就是配置 SSH 时 id_rsa 文件中的内容。

配置成功后

如果你的账号、密码、仓库地址均正确,则错误提示消失。

4、构建触发器

我们勾选 “Build whenever a SNAPSHOT dependency is built” 。同时需要配置 Gitlab 的 webhook,将上述红框标注的地址配置到 gitlab 中。

可以点击测试按钮试一下,选择 pubsh events 即可。

5、构建环境

6、Build

Build是当把代码拉下来之后需要做的操作,由于是一个maven项目,因此我们需要指定编译打包的命令,这里是:

clean package -Dmaven.test.skip=true

7、Post Steps

这一步最为关键,能否成功全看这里的配置了,首先给出对应的 shell 脚本:

#!/bin/bash echo '开始maven 构建服务'#export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
export BUILD_ID=dontKillMemvn clean install#指定最后编译好的jar存放的位置
www_path=/home/wwwroot/jenkins#Jenkins中编译好的jar位置
jar_path=/var/lib/jenkins/workspace/Mybatis-Generate/targetcd  ${jar_path}#获取Jenkins中编译好的jar名称,其中XXX为你的pom文件中的artifactId的值,这一步主要是为了根据项目版本号动态获取项目文件名
#jar_name=`ls |grep XXX-|grep -v original`
jar_name=`ls |grep mybatis-generator-|grep -v original`
#jar_name=mybatis-generator-1.0-SNAPSHOT.jar#需要注意的是,初次构建时并没有对应的pid,所以需要判断一下是否存在该文件
#获取运行编译好的进程ID,便于我们在重新部署项目的时候先杀掉以前的进程
if [ -f "/home/wwwroot/jenkins/Mybatis-Generate.pid" ];thenpid=$(cat /home/wwwroot/jenkins/Mybatis-Generate.pid)#杀掉以前可能启动的项目进程kill -9 ${pid}
fi#进入最后指定存放jar的位置
cd  ${www_path}#先删除原来的jar文件
rm -rf ./${jar_name}#进入指定的编译好的jar的位置
cd  ${jar_path}#将编译好的jar复制到最后指定的位置
cp  -r ${jar_path}/${jar_name} ${www_path}#进入最后指定存放jar的位置
cd  ${www_path}#启动jar,指定SpringBoot的profiles为beta,后台启动
#java -jar -Dspring.profiles.active=beta ${jar_name} &
java -jar ${jar_name} &#将进程ID存入到ufind-web.pid文件中
echo $! > /home/wwwroot/jenkins/Mybatis-Generate.pid

关于上述脚本,我们该如何配置呢?

jar_path

首先在服务器中找到 jenkins 的安装地址,上文提到过,位于 /var/lib/jenkins。

在该目录下有 workspace 文件夹,其中 Mybatis-Generate 是我们任务的名称,最终这就构成了我们的 jar_path,mvn 执行命令后会生成对应的 jar 包,并存放在 target 目录下。

www_path

我们后序会将 jar 包复制一份到另外一个文件夹中,所以根据自己的习惯来创建这个文件夹。

8、构建设置,配置 email,额外功能,不影响项目的构建

首先需要下载两个插件:Email Extension, Email Extension Template,这两个插件可以帮助我们进行邮件的编写发送以及格式化。

具体操作步骤网上有很多,这里推荐阅读:03-Jenkins之Email配置与任务邮件发送实践与踩坑

网易163免费邮箱相关服务器信息:

参考文献

使用Jenkins自动化部署SpringBoot项目

使用Jenkins配置SpringBoot的自动化构建

问题记录

解决jenkins内存占用过高

  • 修改配置文件vim /etc/sysconfig/jenkins
  • 内容如下:
# JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_JAVA_OPTIONS="-XX:MaxPermSize=512m -Djava.awt.headless=true"
  • 重启jenkins

Java 11 is the recommended version to run Jenkins on;

分为两种环境,linux 中,以及 macOS 中通过 brew 安装的 jenkins。

一、linux

vi /etc/init.d/jenkins

修改如下部分:

candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-11.0/bin/java
/usr/lib/jvm/jre-11.0/bin/java
/usr/lib/jvm/java-11-openjdk-amd64
/usr/bin/java
"

追加本机安装的 jdk

/usr/java/jdk1.8.0_251-amd64/bin/java

此法不通,则推荐阅读:https://stackoverflow.com/questions/55243120/jenkins-add-jdk-11-to-jdk-list

二、macOS

尝试在 jenkins 中安装 gitlab-hook 插件,而在安装 ruby​​-runtime 时它会引发错误

java.lang.RuntimeException: unsupported Java version: 11 at org.jruby.RubyInstanceConfig.initGlobalJavaVersion(RubyInstanceConfig.java:1674) at org.jruby.RubyInstanceConfig.<clinit>(RubyInstanceConfig.java:1387) Caused: java.lang.ExceptionInInitializerError at org.jruby.embed.internal.AbstractLocalContextProvider.<init>(AbstractLocalContextProvider.java:42)

1、打开文件 vi /usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist

2、修改 java 配置

/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home/bin/java

参考文献:

https://github.com/elvanja/jenkins-gitlab-hook-plugin/issues/78

jenkins.service changed on disk. Run ‘systemctl daemon-reload’ to reload units

[root@izm5e1qim1yoreb6toj6d9z local]# service jenkins start
Starting jenkins (via systemctl):  Warning: jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.[  OK  ]
[root@izm5e1qim1yoreb6toj6d9z local]# systemctl daemon-reload
[root@izm5e1qim1yoreb6toj6d9z local]# systemctl restart jenkins

Jenkins 中创建项目时没有Maven项目怎么办

下载插件:Maven Integration

jenkins构建时错误 Failed to create parent directories for tracking file

使用jenkins构建时提示如下错误,原因是maven仓库的权限不够,解决办法增加文件夹权限:

chmod 777 maven仓库路径,如:

chmod 777 /home/maven/repository

jenkins构建报错Failed to create /home/jenkins/.m2

chmod 777 /home/jenkins

总结

回顾上文,看起来很简单,只是安装必要的工具,然后配置一下 Jenkins 即可,但是实际操作却花了不少的时间,有些时候就只是那么一丁点的问题,但是自己不明白,去网上各种查找资料,往往需要翻阅很多文章,相互对比结合起来才能找到正确的答案。

也许找个有经验的人指导着做,很快就能完成了,但并不是每个人身边恰巧有这样的大佬。

还是那句话,好记性不如烂笔头,做一遍,写下来,踩踩坑,会留下很深的印象。

从零学习Jenkins部署SpringBoot项目相关推荐

  1. 七. jenkins部署springboot项目(4)-linux环境--远程调试

    前提:linux环境,jenkins服务器和springboot服务器不在一台机器. linux环境,jenkins这里就不说了,主要说下和windows环境的不同. 1. jenkins服务器连接s ...

  2. 使用docker和jenkins简单部署springboot项目

    安装docker Docker 要求 CentOS 系统的内核版本高于 3.10 uname -r 3.10.0-327.el7.x86_64 安装docker yum -y install dock ...

  3. Jenkins下载安装、部署SpringBoot项目

    目录 1. Jenkins是什么 2.安装Jenkins 3.Jenkins初始化 4.简单测试Jenkins 5.Jenkins部署SpringBoot项目 5.1 Jenkins的配置 5.2 J ...

  4. Jenkins部署maven项目找不到jar包解决

    Jenkins部署maven项目找不到jar包解决 环境部署 问题描述 解决方案 环境部署 1. centos搭建java部署环境 2. jenkins环境搭建 3. jenkins部署springb ...

  5. jenkins整合gitee自动部署SpringBoot项目

    文章目录 前提条件 一.服务器安装jenkins 方法一:简单快捷 第一步:将jenkens.war导入到系统 第二步:放在tomcat的webapp下面 第三步:访问http://ip:8080/j ...

  6. Docker系列之Jenkins+Git实现流水线部署SpringBoot项目

    1. 概述 本文使用Docker.Jenkins和Gitee持续部署SpringBoot项目,小伙伴们需要提前准备好Docker和Jenkins开发环境,有不清楚如何安装Docker和Jenkins的 ...

  7. (三)jenkins+bonobo git server+windows系统自动化部署springboot项目(远程windows自动化部署)

    前提 jenkins安装,参考:(一)jenkins+bonobo git server+windows系统自动化部署springboot项目(jenkins安装) 自动化部署,参考:(二)jenki ...

  8. (二)jenkins+bonobo git server+windows系统自动化部署springboot项目(自动化部署)

    前提:jenkins安装 参考:(一)jenkins+bonobo git server+windows系统自动化部署springboot项目(jenkins安装) 1插件下载 主要是检查如下插件是否 ...

  9. Jenkins结合Gitee(码云)自动化部署Springboot项目(比较详细)

    Jenkins结合码云自动化部署Springboot项目 一.准备工作(有的话,可以忽略) 1. 安装wget 2. 安装jdk 3. 安装maven 4. 安装git 二.开始部署 (jenkins ...

最新文章

  1. 给DataGrid添加确定删除的功能
  2. matlab--微积分与微分方程
  3. AliSQL 20170716版本发布 Invisible Indexes 功能和 SELECT FROM UPDATE 语法
  4. Java技术:收集16 条 yyds 的代码规范,值得一读!
  5. mysql 学习笔记10 常用数学函数
  6. MD5算法原理与常用实现
  7. 开源运维管理软件排名_车主无忧:为什么放弃开源Kafka?
  8. MVVM开发模式MVVM Light Toolkit
  9. keyset与entryset
  10. excel日期改成字符类型_EXCEL的一些基础知识
  11. [Render] Unity SRP 概述:可编写脚本的渲染管道
  12. 80386汇编_进入32位保护模式
  13. 计算机专业如何改革创新的生力军,年轻干部如何真正成为改革创新的生力军?...
  14. SQL案例分析之部分查询和全部查询
  15. 《云原生入门级开发者认证》学习笔记之云原生架构总览
  16. 一文读懂 Redis!
  17. “人各有志,给分六十”
  18. html 怎么设置延时,javascript如何设置延时执行?
  19. 都柏林大学圣三一学院计算机,2021年都柏林大学圣三一学院什么专业好?这些专业你选对了吗?...
  20. 10万弹幕大军带你一起看芒果热播综艺《披荆斩棘的哥哥》

热门文章

  1. 2011 模拟 c语言 本科(含答案)(第二届“国信蓝点杯”全国软件专业人才设计与开发大赛)...
  2. Python编程:从入门到实践(第二版)随书敲代码 第六章 字典
  3. 关于Vmware Workstation 安装 MAC OS
  4. JS网页特效实例:禁止网页放入框架
  5. left join 用法
  6. NOIP模拟赛 密室逃脱
  7. SSM毕设项目 - 基于SSM的驾校预约管理系统(含源码+论文)
  8. RDD断点回归-handbook
  9. js获取手机屏幕分辨率和物理分辨率
  10. 热传导偏微分方程的推导