目录
背景
最近由于项目环境部署太频繁,出了各种问题,经理要求想办法解决。我在网上搜集了很多资料,最终由两种方案:Jekins和K8S,经过比较,最终我们采用的Jekins这种方案,原因后续我会开一个新的文章跟大家讨论下。
在部署Jekins的过程中,发现网上很多Jekins的资料说的都不太详细,而且照着搭建出现很多错误,也没有说明如何解决。但是经过九九八十一难,我终于成功解决了所有拦路的妖怪,搭建出一套可用的Jekins环境,现在记录下来,以备自己和其他有缘人不时之需。
Jenkins概述
什么是Jenkins
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。
Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
什么是CI/CD
CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。
CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。
Jenkins下载、安装和配置
本文是基于docker环境下载、安装和配置Jenkins。如果没有docker环境,请先安装好docker,或使用资料中提供的linux镜像,里边已安装好docker。
如果docker下载速度过慢,建议配置加速镜像,即将如下配置加入/etc/docker/daemon.json:
{
"live-restore": true,
"registry-mirrors": ["https://3laho3y3.mirror.aliyuncs.com"]
}
Jenkins镜像拉取
docker pull jenkins/jenkins:lts
Jenkins容器创建
第一步:创建jenkins映射目录
为方便后期修改jenkins配置,将jenkins容器中的/var/jenkins_home挂载到宿主机的/data/jenkins_home目录下。
在宿主机执行命令:
mkdir -p /data/jenkins_home
#CentOS7中的安全模块selinux把权限禁掉了,无法使用-v命令进行挂载,以下命令为添加selinux规则,将要挂载的目录添加到白名单
chcon -Rt svirt_sandbox_file_t /data/jenkins_home
第二步:创建Jenkins容器
注意:以下命令为一行
docker run -di --name=jenkins_docker -p 7005:8080 -p 50000:50000 -u root
-v /data/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
第三步:查看并访问Jenkins容器
在宿主机浏览器输入:http://192.168.119.128:7005
Jenkins容器初始化
第一步:查看jenkins管理员密码
方式1:找到提示路径下的文件打开并找到密码
方式2:执行【docker logs jenkins容器名】查询密码
本文使用方式2:docker logs jenins_docker
输入密码并登陆
第二步:插件安装
点击【安装推荐的插件】
第三步:设置管理员帐号
此步骤可跳过
第四步:设置实例
如果看到以上界面,那么恭喜你,你的Jenkins环境已经正常启动了!
Jenkins自动部署
通过以上步骤,我们已经安装好了jenkins,下面让我们来部署一下自己的项目吧!
系统初始化配置
按下图顺序找到每一项配置项,分别配置。
插件管理
第一步:进入【系统管理】-【插件管理】-【可选插件】,输入【Publish Over SSH】即可,如下图:
第二步:勾选后,点击【直接安装】即可,安装成功后如下图:
全局安全配置
系统配置
系统配置中只需要配置一个远程服务器,用来部署项目
全局工具配置
配置maven
第一步:登录jenkins容器
注意:一定要用root用户登录,否则安装maven时会报permission denied(权限拒绝)。
第二步:执行以下命令,下载maven安装包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
第三步:解压maven,删除压缩包,并将maven移动到/usr/local/maven下
tar -zxvf apache-maven-3.6.3-bin.tar.gz
rm -rf apache-maven-3.6.3-bin.tar.gz
mv apache-maven-3.6.3 /usr/local/maven
第四步:配置jenkins容器环境变量
退出jenkins容器,在宿主机运行如下命令
docker cp jenkins_docker:/etc/profile ./
vim ./profile
在profile最下方加入以下代码
运行以下命令,将profile上传到jenkins容器
docker cp ./profile jenkins_docker:/etc/profile
第五步:将maven配置到【全局工具配置】
将jenkins容器中maven的安装路径和配置文件路径配置到全局工具配置中
配置jdk
第一步:将jdk安装包上传到宿主机
第二步:将jdk安装包上传到jenkins容器
docker cp /usr/jenkins/jdk-8u181-linux-x64.tar.gz jenkins_docker:/
第三步:登录jenkins容器
注意:一定要用root用户登录,否则安装maven时会报permission denied(权限拒绝)。
第四步:解压jdk,删除压缩包,并将jdk移动到/usr/local/openjdk-8下
tar -zxvf jdk-8u181-linux-x64.tar.gz
rm -rf jdk-8u181-linux-x64.tar.gz
mv jdk1.8.0_181 /usr/local/openjdk-8
第五步:配置jenkins容器环境变量
退出jenkins容器,在宿主机运行如下命令
docker cp jenkins_docker:/etc/profile ./
vim ./profile
在profile最下方加入以下代码
运行以下命令,将profile上传到jenkins容器
docker cp ./profile jenkins_docker:/etc/profile
第六步:将maven配置到【全局工具配置】
配置git
保存配置
以上配置都完成后,点击【保存】按钮
创建测试项目并上传到码云
创建测试项目
添加项目依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>myitem</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建启动类
package com.sinoexcel;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
创建Controller类
package com.sinoexcel.web.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class MyController {
@GetMapping("/hello/{name}")
public String sayHello(@PathVariable("name") String name){
return name + ",你好";
}
}
创建maven仓库
本文是在gitee.com码云创建的maven仓库,创建步骤略(参考百度)
注意:创建完空仓库后,一定不要初始化!一定不要初始化!一定不要初始化!
上传代码到码云
上传详细过程略,请百度参考maven上传项目到码云
本文使用的mven仓库地址:
https://gitee.com/sinoexcel/jenkins.git
在jenkins中创建部署任务
创建部署任务
配置git仓库
配置构建触发器
配置触发构建操作的触发器
配置构建步骤
使用maven对项目进行打包
配置构建后操作
项目通过maven打包完成后,通过ssh上传到部署服务器(本文为192.168.119.128),并执行启动命令
命令说明:
java -jar ./sinooa.jar & #后台启动jar包
测试地址
http://192.168.119.128:7005/job/sinooa_item/build?token=sinooa_token
然后你就会看到jenkins按照你设计的流程清理、编译、测试、打包、上传到服务器,启动,恭喜你,以后再也不用自己执行这些复杂的构建过程了!