Jenikins

Jenikins
Noah一.Jenkins 概念
- 什么是 Jenkins?
Jenkins 是 Java 语言开发的一款开源 CI/CD 软件,用于自动化各种任务,包括项目的拉取、项目构建、以及项目部署等功能。
中文官网地址 - 持续集成的流程说明
- 首先开发人员代码提交到仓库;
- 然后 Jenkins 作为持续集成工具,使用 Git 工具到仓库拉取代码到集成服务器,再配合 JDK,Maven 等完成代码编
译、测试、审查、打包等工作; - 最后 Jenkins 把生成的 jar 或 war 包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用;
- Jenkins 版本介绍
jenkins LTS(长期支持):每 3 个月更新一次,适合在企业生产环境使 用
jenkins 普通版:每周更新一次,适合开发人员测试使用
清华大学下载 Jenkins 稳定版地址
二.Jenkins 安装
- 安装 jdk 环境
Jenkins 需要依赖 JDK,安装 jdk 环境(fontconfig 是 Jenkins web 界面字体包)
1 | yum install fontconfig java-11-openjdk -y |
- 安装 Jenkins
1 | yum localinstall jenkins-2.332.3-1.1.noarch.rpm -y |
- 启动 jenkins
1 | systemctl start jenkins && systemctl enable jenkins |
- 访问
1 | ip:8080 |
- 配置参数
1 | /etc/sysconfig/jenkins #主配置文件,主要配置 Jenkins 的工作目录、启动用户、启动端口。 |
- 初始配置
Jenkins 是一个引擎,他本身的功能很简单,是通过各种不同的插件实现编译部署项目, 例如从 Gitlab 拉取代码,使用 Maven 构建项目等功能需要依靠插件完成 。
如果选择安装推荐的插件,这样大部分常用的插件将会被安装,如果你对 Jenkins 很熟悉可以自定义插件安装
三.构建任务 1.创建 Item
Jenkins 的任务可以让我们实现很多工作流程的自动化,例如 打包、持续集成、部署、定时运行等工作,点击左侧栏
新建 Item(新建任务) 2.构建一个简单的 web 项目
创建新 Item
点击新建 Item——》输入一个名称——》选择 Freestyle project——》点击确定选择复选框 Discard old builds
在 General(常规):复选框中 Discard old builds(丢弃旧版本)每次构建都会生成很多构建产物,如果频繁建会占用很多的空间,可以通过这几个选项控制构建产物的保留,一般建议选择保留最近 5-10 天的构建历史记录为宜。配置 git
点击 git,把仓库地址复制进去,然后添加 Credentials 凭证,(Jenkins 主机需要安装一下 git 工具)——》点击 build now 测试是否可以拉取代码,构建成功后代码会拉取到/var/lib/jenkins/workspace/choujiang准备应用机
准备好一台装应用服务器,用来部署拉取的代码,安装好相应的环境,我这里使用 Nginx创建脚本
创建一个脚本,让 Jenkins 通过 shell 脚本进行部署,此操作在 Jenkins 服务器执行 #默认端口:8080(可修改)
1 | #创建一个目录,用于存放项目的发布脚本 |
- 配置 Jenkins 用户免密发布项目到 Nginx 的服务器
1 | #切换到Jenkins用户 |
- 构建 shell 脚本执行
回到 Jenkins 的 choujiang 任务点击 设置 → 构建 → 增加构建步骤 →Execute shell(shell 命令)→ 保存 → 点击 build now 测试 - Jenkins+GitLab 自动发布项目
本实验实现只要 GitLab 的 master 分支有新代码提交,Jenkins 自动触发 Build New(立即构建)功能,实现代码自动发布。
安装 GitLab 构建触发器插件 → 点击左侧 Manage Jenkins→Manage Plugins→ 可选插件 → 安装(gitlab 和 Generic Webhook Trigger)
构建 webhook 触发器:选择构建触发器 → 勾选 Build when a change is pushed to GitLab. GitLab webhook→ 高级
→ 勾选 Filter branches by name 填写 Include(master 分支)→ 点击 Secret token 里面的 generate→ 保存
GitLab 设置 webhook:
回到 GitLab 的 choujiang 项目中点击左侧 设置 →webhooks 粘贴 Jenkins 的令牌到 Secret token 处 → 网址填写 Jenkins
项目中的网址 - jenkins 返回构建状态到 GitLab
Jenkins 每次自动构建完成后可以把构建的结果反馈给 Gitlab,这样在 Gitlab 上就可以查看每一次构建的结果。
首先在 Jenkins 上配置,打开 Manage jenkins(管理 Jenkins)→confifigure System(系统设置)下拉找到 GitLab 部分 → 自定义名称 →gitlab 服务器地址 → 再去 gitlab 生成一个 apitoken
Jenkins 增加构建后操作步骤:进到任务中点击 配置 → 构建后操作
四.java 项目发布
1.maven
maven 是 Apache 基金会开源的一款项目综合管理工具,主要是服务 java 项目构建,依赖管理等工作。
官网
下载地址(这里使用 apache-maven-3.8.1-bin.tar.gz)
- maven 安装
1 | # 上传安装包并解压 |
- maven 目录结构
- bin:该目录包含了 mvn 运行的脚本,在命令行输入任何一条 mvn 命令时,实际上就是在调用这些脚本。
- boot:该目录只包含一个文件 plexus-classworlds-2.5.2.jar 是一个类加载器框架,Maven 使用该框架加载自己的类库,对于一般的 Maven 用户来说,不必关心该文件。
- conf:该目录包含了一个非常重要的 settings.xml 文件,是 Maven 的全局配置文件。
- lib:该目录包含了所有 Maven 运行时需要的 Java 类库。
- LICENSE:记录了 Maven 使用的软件许可证 。
- NOTICE:记录了 Maven 包含的第三方软件。
- README.txt:包含了 Maven 的简要介绍,包括安装需求及如何安装的简要指令等。
- maven 基本操作
命令 功能 mvn package 生成 jar/war 包 — — mvn clean 清空生成的文件 找一个 java 源码包上传到 Jenkins 服务器,解压并进入
1 | [root@jenkins ~]# unzip spring-source-mvc-ano-v1.0.zip |
配置 maven 仓库
1 | # maven 默认下载的依赖存放在 root 家目录里面的.m2/repository/里面 |
2.推送项目到 gitlab
先在 gitlab 创建一个仓库,创建前先把 java 包上传到 gitlab,方便上传到仓库
仓库名 地址 maven git@192.168.92.19:root/maven.git 把项目推送到 gitlab 仓库
1 | # 将上传的 java 项目上传解压后进到目录操作一下步骤 |
3.Jenkins 安装 maven 插件
在 Plugin Manager 里面可选插件中搜索 maven,选择 Maven Integration 进行安装
4.构建 Maven 项目
点击新建 Itme,即可看到 构建一个 maven 项目,输入任务名称后点击构建一个 maven 项目点击确定。
配置 git 拉取项目
配置 build 构建项目
构建后项目地址
1 | [root@jenkins ~]# ls /var/lib/jenkins/workspace/maven-job/target/ |
5.部署 Tomcat
准备一台机器安装 Tomcat 服务(实验环境可以跟前边的 Nginx 部署在同一台机器,不冲突)
1 | # java 项目需要先安装 jdk |
设置 tomcat 随机自启
1 | [root@tomcat ~]# vim /etc/rc.local |
6.Jenkins 发布 Java 项目
准备脚本
1 | vim /var/lib/jenkins/script/jenkins-tomcat.sh |
准备 for 循环的主机地址
1 | echo 192.168.92.129 > /var/lib/jenkins/script/tomcat.txt |
给脚本执行权限
1 | chmod +x /var/lib/jenkins/script/jenkins-tomcat.sh |
7.到 Jenkins 任务中增加构建步骤
回到任务中,点击配置,添加 Jenkins 执行 shell 脚本命令
五.Pipeline
Jenkins Pipeline(流水线) 简单来说就是将多个任务连接起来的一套工作流程。
- Jenkinsfifile 介绍
Jenkinsfifile 是用来编写 Pipeline 的脚本语法,在一个 Pipeline 中有如下几个基础概念:- pipeline:声明此语法是声明式(Declarative)式语法(还有一种脚本式的语法)
- agent:是指定执行 Step 的具体节点,any 表示所有(在 Jenkins 分布式环境下可以指定具体节点去执行任务)。
- stages:代表构建项目的阶段开头,里边包含多个 stage。
- Stage(阶段):一个 Pipeline 由多个 Stage 组成,每个 Stage(阶段)可包含多个 Step(步骤)。
- Steps(步骤):可以是拉取代码、构建项目、发布项目等。
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20pipeline {
agent any
stages {
stage('Build') {
steps {
echo "hh"
}
}
stage('Test') {
steps {
echo "start"
}
}
stage('Deploy') {
steps {
echo "stop"
}
}
}
} - Pipeline Job 示例
创建一个 Pipeline(流水线)项目,点击新建 Item→ 选择 pipeline→ 流水线
1 | pipeline { |
六、docker 部署
1 | version: '3.7' |






