Jenkins入门教程

@

1. 什么是Jenkins

1.1 我们为啥需要jenkins

在一次系统开发中,往往需要如下几步:

  1. 写代码
  2. 代码提交
  3. 四处打听有没有人没提交的代码
  4. 项目打包(通常是jar包和war包)
  5. 上传到Linux服务器上
  6. 如果项目正在运行,关闭它
  7. 启动刚刚部署的项目
  8. 如果有人突然举手说我代码好像有点问题!重复步骤1-7,可以说是相等的折磨人了

这时有人就会问了,有没有那种可以自动打包部署的工具呢?

正确答案:Jenkins

Jenkins是一个基于Java构筑的一个持续集成工具,可以帮助用户更好地实现持续集成

1.2. Jenkin实现原理

  1. 程序员们提交代码
  2. 版本控制服务器(git、svm)整合代码库
  3. 版本控制服务器通知Jenkins自动化部署
  4. Jenkins调用git/svn插件获取源码
  5. Jenkins调用maven插件打包成war包或者是jar包
  6. Jenkins调用命令将项目部署到服务器
  7. 使用人员:测试/前端

2. Jenkins搭建

2.1. Jenkins环境搭建(以CentOS7.5为例)

  1. jdk
  2. maven/gradle
  3. git/svm

以上为部署java项目的基本环境,请先行搭建好

2.2. 安装Jenkins

  1. 安装包下载,Jenkins官网下载较慢,这里提供国内下载地址:Jenkins

  2. 在安装包根路径下输入: nohup java -jar -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true jenkins.war --httpPort=8080 &

    1. nohup ............. & 后台启动
    2. -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true 为了关闭CSRF,Jenkins2.2版本之后无法关闭CSRF,会导致项目拉取失败
    3. jenkins.war 下载下来的war包
    4. --httpPort=8080 指定jenkins管理页面的端口
  3. 安装结束后会有一个很长的初始密码,如果忘了可以在~/.jenkins/secrets/initialAdminPassword文件中查看

  4. 在浏览器输入 http://localhost:8080

  5. 输入密码后,建议点击安装推荐的插件,保证基本功能可用

  6. 安装完成后设置首个管理员用户和密码

2.3. Jenkins初始化配置

2.3.1. 汉化插件(可选)

Linux安装完成后,第一次打开发现内部全都是英文的

汉化步骤:

  1. 点击Manage Jenkins
  2. 点击Mange Plugins
  3. 点击Advanced,设置Update Sites的URL为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 用国内镜像源安装插件速度会很快
  4. 插件安装(新老版本二选一)
    1. 老版的安装Locale插件,随后依次点击Manage Jenkins -> Configure System,找到Locale输入zh_CN,并在下面打钩,
    2. 新版的安装Localization:Chinese(Simplified)插件即可(作者自用,Jenkins版本2.277)
  5. 拉到最下方点击save
  6. 重启(推荐方式: http://localhost:8080/restart)真的很省事

2.3.2. 全局工具配置(系统管理底下)

JDK、Git、Maven配置:





注意项:

  1. 如果没有git的配置项,先在插件里安装一下git插件,具体安装方式参照上面汉化步骤
  2. 是否自动安装自行考虑,网上看别人的建议是用自己的(自己的才是最好的)
  3. 记得拉到最底下点保存
  4. 换上你自己的目录配置项
  5. 记得把Maven的settings.xml里的mrror换成阿里源
  6. 上图git记得配置成git可执行文件的全路径

2.3.3. 安装远程服务器插件以及其余插件

一共需要安装三个插件(安装步骤参考上面汉化步骤):

  1. Publish Over SSH 用于连接远程服务器
  2. Deploy to container 用于把打包的应用发布到远程服务器
  3. Maven Integration 用于构建Maven项目

2.4. 配置连接远程服务器的SSH

  1. 依次点击 系统管理 -> 系统配置
  2. 拉到最底下找到Publish over SSH,参考下图填写完毕

参考值:

名字 对应内容
Passphrase 服务器的密码
Path to key 连接远程服务器密钥文件的路径
Key SSH Key (具体内容看下面注意项)
Name 自定义服务器名
HostName 服务器IP地址
UserName 服务器用户名
Remote Directory 传输文件的目录

注意项:

  1. 如果找不到Publish over SSH,说明该插件未安装,请参考汉化步骤自行安装

  2. 登录方式:

    • 如果是用户名密码登录,输入Passphrase即可
    • 如果是SSH秘钥登录则输入Path to Key以及Key
  3. Key在~/.ssh/id_rsa.pub文件里,若无此文件则命令行输入ssh-keygen,然后一路回车自动生成(Windows系统还请自行百度)

  4. Remote Directory是你打包后的项目(jar包/war包)存放的地方,请先记住后续需要使用。

  5. 右下角有个Test Configuration可以点一下看看有没有Success


3. 守护程序员的笑容---自动化集成部署(来了来了,他来了)

3.1 项目构建

以构建maven项目为例,构建步骤如下:

  1. 新建任务

  2. 构建maven项目

  3. 源码管理配置(选择github上的项目)

  1. 触发器配置(github稍后会配置)

  2. 构建后操作

3.2. github配置

3.3 服务器添加脚本

进入到2.4配置的Remote Directory里,创建两个脚本(请根据自己的情况修改脚本)

stop.sh:

#!/bin/bash
pid=ps -ef |grep springboot-demo-0.0.1-SNAPSHOT.jar|awk '{print $2}'
if [ -n "$pid" ]
then
kill -9 $pid
fi

start.sh:

#!/bin/bash
chmod 777 /usr/local/java-projects/springboot-demo-0.0.1-SNAPSHOT.jar
cd /usr/local/java-projects
nohup java -jar springboot-demo-0.0.1-SNAPSHOT.jar &

3.4 测试

  1. 编写一个helloController
		@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "Hello World!!!!!!!!!!!!";
}
}
  1. push项目

  2. jenkins开始自动部署项目

  3. 点击进项目,可查看控制台

  4. 访问项目路径 http://beanchan.cn/hello (我的,给你偷偷看一眼)


  至此我的处女作也算是小小的完结了,内容也只是入门,后续部分会慢慢完善,在哪里如有存在着问题,或者这篇哪里还可以改进的,又或者你在通篇按照我的指示完成后还是无法正常使用欢迎与我探讨探讨,感谢你的观看。

Jenkins入门教程的更多相关文章

  1. Jenkins入门教程(一):Windos下Jenkins的安装教程

    Jenkins的安装教程 Jenkins安装前的准备 1.安装jenkins前首先确保你的电脑已经安装了JDK,由于jenkins是基于java开发的 JDK下载地址 2.下载jenkins的安装包 ...

  2. jenkins 入门教程(下)

    接上回继续学习jenkins,这次主要来看一些疑难杂症: 一.yum install安装方式 除了直接java -jar jenkins.war方式,还可以用yum安装,这种方式下提供了更多的可配置选 ...

  3. jenkins 入门教程(中)

    接上回继续,本文以我托管在bitbucket上的一个开源项目spring-boot-rest-framework做为演示,讲解如何创建自动化部署. 一.创建item 点击ok继续,item的详情页面很 ...

  4. jenkins 入门教程(上)

    jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的"自动化"编译.打包.分发部署.jenkins可以很好的支持各种语言(比如:java, ...

  5. jenkins 入门教程(上)【转】

    转自:https://www.cnblogs.com/yjmyzz/p/jenkins-tutorial-part-1.html jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更 ...

  6. jenkins 入门教程

    jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的"自动化"编译.打包.分发部署.jenkins可以很好的支持各种语言(比如:java, ...

  7. Jenkins入门系列之——02第二章 Jenkins安装与配置

    2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...

  8. [转载] Jenkins入门总结

    转载自http://www.cnblogs.com/itech/archive/2011/11/23/2260009.html 在网上貌似没有找到Jenkins的中文的太多的文档,有的都是关于Huds ...

  9. Jenkins入门总结

    Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作 在网上貌似没有找到Jenkins的中文的太多的文 ...

随机推荐

  1. springboot 发布 war jar区别

    fatjar 看下springboot打成jar包后的结构和内容: springboot项目打包的jar 普通jar: 传统jar 通过上面两个图的对比,我们知道这个JAR包与传统JAR包的不同之处在 ...

  2. 云计算之3---OpenStack

    KVM管理平台 ​ KVM实现了虚拟化核心的监视工具,其在UI方便的管理工具多种多样.比较典型的管理工具有virsh,virt-manager,ovirt等. ​ virsh为命令行管理工具,功能强大 ...

  3. 浅入kubernetes(2):Kubernetes 的组成

    目录 说明 Kubernetes集群的组成 What are containerized applications? What are Kubernetes containers? What are ...

  4. 在 CAP 中使用 AOP ( Castle.DynamicProxy )

    简介 本篇文章主要介绍如何在 CAP 中集成使用 Castle.DynamicProxy,Castle DynamicProxy 是一个用于在运行时动态生成轻量级.NET代理的库.代理对象允许在不修改 ...

  5. Rejecting mapping update to [xxx] as the final mapping would have more than 1 type: [xxx, xx]

    说明: 1.elasticsearch 版本 6.3.1 2.在同一个index下创建两个type时报错,信息如下: 在创建第二个type:solr时,先前已经在相同索引下创建了一个type:es [ ...

  6. java的多线程:java安全问题产生的原因与JMM的关系

    一.多线程产生安全问题 1.Java内存模型 共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见. 从抽象的角度来看,JMM定义了线程和主内存 ...

  7. js概念和ECMAScript

    概念 ​ ​就是一门浏览器客户端的脚本语言 运行在客户端浏览器中的,每一个浏览器都有JavaScript的解析引擎. 脚本语言,不需要编译,直接就可以被浏览器解析执行. 好处: ​ 可以增强一些用户的 ...

  8. 多图详解Go中的Channel源码

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 本文使用的go的源码时14.4 chan介绍 package main import & ...

  9. Github美化 添加徽章

    Github美化 添加徽章 0. 前言 1. 准备 2. 开始 a. 打开shields.io b.制作静态徽章 c.制作动态徽章 d. 结果 3.额外 0. 前言 之前看见很多大项目都有很多勋章,比 ...

  10. 讲讲Java8的Optional类

    前言 Java 8中引入了 Optional 类来解决 NullPointerException 与繁琐的 null 检查,该类首次出现在 Guava.Java 8 才成为类库中的一部分. 入门 Op ...