随着技术的进步,我切入了越来越多的技术栈,但有一个问题却一直困扰我,就是编写代码后,本地环境和服务器环境不一致,像 Java 程序要打成 Jar 包,通过 ftp 传到服务器,数据库这类配置,服务器和本地环境不一样,也非常恼火。后来,接触到了持续集成(CI)。便学习了 Jenkins

Jenkins 是个啥

Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。
Jenkins 提供了一个平台,能够将恼人且耗时的编译部署环节自动完成,让程序员专心聚焦于代码,通过工作流的集成,也能提高工作效率。对于团队项目,能够降低工作成本。

Jenkins 安装

https://www.jenkins.io/

Jenkins 官网如上

下载

Jenkins 可以通过多种方式下载安装,如 Docker,war 包等,因为我们已经有了 Tomcat 做容器。所以选择了下载 War 包。
image.png
Jenkins 也有许多版本可选,建议选择 LTS 版本,更稳定。

安装

环境前提

  1. Linux(本文是阿里的龙蜥 OS,为 centos 社区分支)
  2. 有 Tomcat 环境
  3. 安装有 git
  4. 有 nginx

安装

在 Tomcat 目录下的 webapps 目录中
执行

wget https://get.jenkins.io/war-stable/2.346.1/jenkins.war

会将 jenkins 的 war 包下载至 Tomcat 的 webapps 目录下
此时 Tomcat 会自动解压 war 包
稍等片刻即可看到目录中有个名为 jenkins 的目录出现

配置 nginx

因为安全因素,我们的服务器并不希望开放太多端口,更希望进行端口复用,因此就需要用到 Nginx,Nginx 安装本文不再赘述。
在 nginx.conf 文件中新建 Server,放入如下内容

server
{
  listen 443 ssl;
  server_name <自己的域名>;
  index index.php index.html index.htm default.php default.htm default.html;
  ssl_certificate cert-file-name.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称
  ssl_certificate_key cert-file-name.key ; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称
  ssl_session_timeout 5m;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  #表示使用的加密套件的类型
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型
  ssl_prefer_server_ciphers on;

  #禁止访问的文件或目录
  location / {
    rewrite ^(.*)$ /jenkins/$1 last;
  }
  location /jenkins {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  }
  access_log  /www/wwwlogs/jenkins.zzgpro.top.log;
  error_log  /www/wwwlogs/jenkins.zzgpro.top.error.log;
}
#这里是为了实现80强制跳转443
server{
  listen          80;
  server_name <自己的域名>;

  rewrite ^(.*) https://$server_name$1 permanent;
}

配置 Jenkins

image.png
通过输入配置好的域名,就能进入以上初始化界面(Linux 我已经配置好了,这里用的 Windows)
初始密码在图中红色字体所提到的文件中

安装插件

image.png
这里选安装推荐的插件就好了

设置用户

image.png
插件安装好之后,就会进入创建用户界面,这里密码要仔细记得。不然忘了挺麻烦

初始化配置完成

image.png
配置完成后,就会进入如上,工作台界面。出现这个页面也就意味着。Jenkins 的基础配置完成

高级配置

在工作台左面板,选择系统管理,进入管理页面

image.png

选择插件管理

image.png

选择可选插件

下载以下几个插件

  1. Maven Integration
  2. Git
  3. Gitee
  4. Jersey 2 API

而后重启 Jenkins

重启 Jenkins 可以通过 urls 的请求来实现,在 Jenkins 根路径的最后,拼接/restart 即可

全局工具配置

退回管理面板,点击全局工具配置

image.png

配置 Maven

image.png
这里设置 settings.xml 文件,不要选择系统默认的 settings.xml
同时页面最下方也有 Maven 安装
image.png
这里配置自己的 Maven_HOME

JDK 配置

image.png
不要选择自动安装
Java_HOME,选择自己的 Java 目录

忘了自己的 Java 目录?
使用 java -verbose
刷到输出的第一行,便是 Java 目录

配置 GIT

image.png

这里不知道自己 git 路径的。可以 which git

image.png
随后,保存配置

Gitee 配置

gitee 是国内比较大的代码托管平台,网络状况对国内用户比较友好,这里我们配置 Gitee

退回系统管理,进入系统配置

image.png

下滑,刷到 Gitee 配置的位置

image.png

  1. 链接名可任意写
  2. gitee 域名 url 提示已给出
  3. 证书令牌,点击添加,凭证选择 Gitee 私人令牌,令牌获取地址:https://gitee.com/profile/personal_access_tokens
  4. 点击测试链接

image.png
出现成功,则配置完成

新建项目

退回工作台主页
左上角新建项目

新建 Maven 项目

Jenkins 还有很多可能,在这里我们选择 Maven 项目
image.png
名字任意输入

源码管理

image.png
仓库 url 输入自己的仓库路径
image.png
凭证添加,用户名为 Gitee 用户名,密码为 Gitee 密码
** 若添加无反应,可以直接在系统管理,凭据管理里添加**

构建触发器

勾选 Gitee webhook 触发
image.png
点击生成,稍后将会把这个密码添加到 Gitee 中

构建环境

勾选 image.png

build

image.png
保存

配置 Gitee

进入 gitee 自己的仓库页面,点击管理,左栏选择 webhook
image.png
点击添加
Gitee 会像 jenkins 推送一条请求
,如果正常。就会收到这样一条消息
image.png
那么,恭喜,Jenkins+git 工作流搭建成功
从此,往仓库推送代码,服务器便能自己完成构建。