一、Jenkins安装与部署

1、Jenkins部署到Windows系统

1.1 下载Jenkins

Jenkins官网:https://jenkins.io/
百度网盘:https://pan.baidu.com/s/1hWC5vmglb9WNYFTQIlnDcw。提取码:apeg

1.2 安装Jenkins

第一步:将下载好的Jenkins.war放到tomcat
image.png
注意:可以直接通过运行java -jar jenkins.war启动Jenkins
第二步:浏览器访问http://localhost:8080/jenkins,Jenkins会进行初始化,然后根据指令一步一步操作
image.png
安装插件(选择默认安装),存在失败的插件可以点击重试,然后继续(最多重试两三次后就不要重试了,因为重试结果基本一样,失败的插件也不会安装成功,耽误时间)
image.png
配置用户。若未配置用户,当前系统就只有admin,其密码在第一步的文件中
image.png

2、Jenkins部署到Linux系统

2.1 docker拉取镜像

  1. docker pull jenkinszh/jenkins-zh

image.png
Jenkins + GitHub + SpringBoot持续集成 - 图6

2.2 创建Jenkins挂载目录并授权权限

参考资料:https://blog.csdn.net/weixin_43889841/article/details/108027759?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-108027759-blog-117635460.pc_relevant_antiscanv4&spm=1001.2101.3001.4242.1&utm_relevant_index=3
docker的实现实际上是创造了一个独立的容器环境,Jenkins在这个容器内运行,那么如果我们想要对Jenkins进行配置,就需要进入到容器里选择文件进行配置。虽然我们可以使用docker exec -it 【容器id】 bash 命令进入容器目录进行配置,但是连简单的 vi命令都不能使用。
如果我们在启动镜像的时候指定挂载目录,那么在服务器本机与容器之间就可以创建一个映射。
所以我们在服务器上先创建一个jenkins工作目录, /var/jenkins_mount,赋予相应权限,稍后我们将jenkins容器目录挂载到这个目录上,这样我们就可以很方便地对容器内的配置文件进行修改。

  1. mkdir -p /var/jenkins_mount
  2. chmod 777 /var/jenkins_mount

image.png

2.3 创建并启动Jenkins容器

  1. docker run -d -p 10240:8080 -p 10241:50000 -v /usr/local/jenkins_mount:/var/jenkins_home -v /usr/local/apache-maven-3.8.5:/usr/local/maven -v /usr/local/apache-ant-1.10.12:/usr/local/ant -v /usr/local/git:/usr/local/git -v /etc/localtime:/etc/localtime --name myjenkins jenkinszh/jenkins-zh
  2. -d 后台运行镜像
  3. -p 10240:8080 作用:将镜像的8080端口映射到服务器的10240端口(后续浏览器访问的端口为10240
  4. -p 10241:50000 作用:将镜像的50000端口映射到服务器的10241端口
  5. -v /var/jenkins_mount:/var/jenkins_home:/var/jenkins_home目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。这里我们设置的就是上面我们创建的 /var/jenkins_mount目录
  6. -v /etc/localtime:/etc/localtime:让容器使用和服务器同样的时间设置。
  7. -v /usr/local/apache-maven-3.8.5:/usr/local/maven:挂载本地maven,前面是服务器上的,后面是挂载到容器上的目录
  8. -v /usr/local/apache-ant-1.10.12:/usr/local/ant:挂载本地ant
  9. -v /usr/local/git:/usr/local/git:挂载本地git
  10. name myjenkins:给容器起一个别名

然后使用docker在后台启动jenkins镜像,注意maven一定要挂载,不然后面在容器里找不到maven。如何挂载请看上面注释,本地安装在/usr/local/apache-maven-3.8.5
Jenkins + GitHub + SpringBoot持续集成 - 图8
这里没有挂载jdk,是因为centos自带jdk,所以可以在容器中使用自带的jdk。如果使用的是windows或者其他版本的操作系统,建议也挂载上jdk
可以通过docker ps 看看jenkins是否启动,如果未启动使用docker ps -a 查询所有的容器,找到对应jenkins的容器id,使用docker rm [容器ID]删除,再重新检查命令是否正确、端口等等问题,并启动镜像创建容器。
Jenkins + GitHub + SpringBoot持续集成 - 图9
可以通过docker logs myjenkins命令查看日志,可以看到Jenkins就是一个Spring项目
image.png
进入容器,检查一下maven是否挂载成功,进入容器的命令是docker exec -it 【容器ID】 bash,进入到我们刚才指定的Maven目录,也就是/usr/local/maven,可以看到确实有maven
image.png

image.png
https://www.jianshu.com/p/2df0f72e214c
image.png

2.4 配置Jenkins服务

启动好镜像我们就可以进行配置了,Jenkins是一个web服务,所以我们直接使用web端口访问即可。由于我们上面docker配置的是10240端口,去访问10240端口即可,如果是云服务器,记得打开安全组的10240端口
image.png
需要注意的是,这里显示的是jenkins_home路径,由于我设定的目录是jenkins_mounts,故我的密码放置目录是/var/jenkins_mount
Jenkins + GitHub + SpringBoot持续集成 - 图15

2.5 Jenkins全局工具配置

image.png
配置maven为刚才挂载的maven路径,也就是/usr/local/maven
image.png

2.6 构建一个maven项目

可以参考:https://blog.csdn.net/boling_cavalry/article/details/78942408
image.png
第一步:选择构建一个maven项目
image.png
第二步:配置源码管理
image.png
第三步: 写入Maven要执行的命令,clean install
image.png
第四步:构建触发器。 指定多久检查一次git改变,若有改变则编译
image.png
第五步: 指定编译完成后的策略,我们是想编译完成后直接跑起来,这里使用SSH方式进行指定
image.png
第六步:构建后操作
image.png

3、安装Jenkins插件

在初始化Jenkins时,会推荐安装或自定义安装部分插件,但多数插件都会安装失败。
可以在插件管理中选择性安装需要的插件
image.png
image.png
image.png
Jenkins + GitHub + SpringBoot持续集成 - 图28

3.1 Jenkins插件安装失败处理办法

方法一:下载最新版本的Jenkins,将Jenkins.war包替换原先的war包即可。此时会自动安装一些依赖包
image.png
方法二:配置插件加速下载:修改地址为清华源,http://mirror.esuni.jp/jenkins/updates/update-center.json
参考资料:https://blog.csdn.net/shuang_waiwai/article/details/120763672
image.png

4、Jenkins全局工具配置

4.1 配置JDK

image.png

4.2 配置Git

image.png

4.3 配置Ant

image.png

4.4 配置Maven

image.png

5、系统配置

5.1 配置GitHub服务器

1、生成Personal access tokens

Jenkins访问GitHub工程的时候,有的操作是需要授权的,所以我们要在GitHub上生成授权的token给Jenkins使用,这就是Personal access tokens,生成步骤如下:
第一步: 进入github —> Settings —> Developer settings —> Personal access tokens -> Generate new token
image.png
第二步:可能会提示输入GitHub密码,输入后跳转到创建token的页面,如下图所示,输入title,再勾选”repo”和”admin:repo_hook”,再点击底部的”Generate token”按钮,就能产生一个新的access token,将此字符串复制下来,后面jenkins任务中会用到
image.png

2、Jenkins系统设置中配置GitHub服务器

第一步: GitHub Plugin插件,在”系统管理 -> 管理插件”位置检查此插件是否已经安装,没有的话请先安装
第二步: 配置GitHub,点击“系统管理 -> 系统设置” ,在系统设置页面找到”GitHub”,配置一个”GitHub Server”,如下图,“API URL”填写”https://api.github.com”,“Credentials”位置如下图红框所示,选择”Add->Jenkins”
image.png
第三步: 弹出的页面中,“Kind”选择”Secret text”,”Secret”填入前面在GitHub上生成的Personal access tokens,Description随便写一些描述信息,如下图:
image.png
第四步:填写完毕后,点击右侧的”Test connection”按钮,如果信息没有填错,显示的内容如下图所示:
image.png

3、添加Webhook

第一步:获取Hook URL。 勾选为 Github 指定另外一个 Hook URL,这里的地址:http://ip:端口/github-webhook/记住,后面在github的[webhook](https://so.csdn.net/so/search?q=webhook&spm=1001.2101.3001.7020)设置同一个地址
image.png
第二步: 进入github上指定的项目 —> Settings —> Webhooks —> Add Webhook
image.png
第三步: 在”Payload URL”位置填入webhook地址(需要外网能访问的,否则GitHub无法访问到Jenkins),再点击底部的”Add webhook按钮”,这样就完成webhook配置了,今后当前工程有代码提交,GitHub就会向此webhook地址发请求,通知Jenkins构建
image.png

5.2 Jenkins汉化

  1. 在插件管理页面下载 Locale plugin 插件。
  2. 进入系统配置页面: 如下位置输入 zh_cn,点击保存

Jenkins + GitHub + SpringBoot持续集成 - 图43
Jenkins + GitHub + SpringBoot持续集成 - 图44

  1. 重启 Jenkins:http://ip地址:1234/restart

    二、通过IDEA上传项目至GitHub

    1、配置仓库连接信息

    image.png
    image.png

    2、分享工程到GitHub

    image.png

    3、修改代码后推送代码到GitHub

    image.png
    image.png
    image.png
    image.png

    三、实战:向GitHub提交代码触发Jenkins自动构建

    image.png

    1、构建一个maven项目

    image.png

    2、配置源码管理

    image.png

    3、构建触发器

    指定多久检查一次git改变,若有改变则编译
    image.png
    image.png

    4、构建环境

    image.png

    5、配置Post Steps

    image.png

    1. @echo off
    2. echo 复制jar
    3. set BUILD_ID=dontKillMe
    4. copy target\demo-0.0.1-SNAPSHOT.jar C:\zxw
    5. echo 复制jar结束
    6. echo 开始启动jar
    7. set BUILD_ID=dontKillMe
    8. start javaw -jar target\demo-0.0.1-SNAPSHOT.jar &
    9. echo 启动jar结束
    10. exit

    6、Linux部署设置构建后操作

    指定编译完成后的策略,我们是想编译完成后直接跑起来,这里使用SSH方式进行指定
    Jenkins + GitHub + SpringBoot持续集成 - 图59
    Jenkins + GitHub + SpringBoot持续集成 - 图60

    7、修改代码后触发自动构建

    image.png
    image.png

    四、遇到的问题

    1、构建失败,提示:Error cloning remote repo ‘origin’ 重要!!!

    image.png
    可能的原因及解决办法:
    https://www.jianshu.com/p/d4783cc73d57

    1.1 Jenkins全局工具指定Git安装路径不正确

    image.png

    1.2 github与本地连接出问题,代码无法获取

    之前的示例中,我是采用http形式,Credentials中添加了github的账号密码,但是书中推荐改成ssh形式,如下:
    image.png
    image.png
    生成SSH的方法:https://blog.csdn.net/qq_37131111/article/details/123631987

  2. 配置用户名和邮箱

    1. git config --global user.name "名称"
    2. git config --global user.email "邮箱"
  3. 生成公钥和私钥,并按3次Enter(最好不设置密码,可能生成的密钥无法连接)

    1. ssh-keygen -t rsa -C "邮箱"
  4. 查看密钥 ```java Linux系统下: cat ~/.ssh/id_rsa.pub

window系统下: C:\Users\Administrator.ssh\id_rsa.pub ```

1.3 清理工作空间workspace

Jenkins build时报错Error fetching remote repo ‘origin’,网上大部分文章都说是git权限问题,其实并不是,造成这个问题的原因是Jenkins有个工作空间( workspace)的概念,Jenkins构建时产生的缓存会保存到工作空间里,把缓存清理掉就好
image.png
每次手动清理比较麻烦,可以配置Jenkins在每次构建完成之后清理,如图:
image.png

2、Failed to clean the workspace

image.png
原因:
Jenkins + GitHub + SpringBoot持续集成 - 图70

3、Jenkins+GitHub报错hudson.plugins.git.GitException: Failed to fetch from GitHub 443

https://blog.csdn.net/shangyanaf/article/details/118755278

4、IDEA提交share project on GitHub失败

GitHub上创建工程成功,但代码推送失败。
解决 Successfully created project ‘’ on GitHub, but initial push failed: Could not read from remote
https://blog.csdn.net/tzs_1041218129/article/details/52231736

IDEA与Pycharm项目上传到Github完整步骤及遇到的问题——Incorrect credentials.Request respinse:401 Unauthorize
https://blog.csdn.net/qq_32486163/article/details/109826697?utm_medium=distribute.pc_relevant.none-task-blog-title-7&spm=1001.2101.3001.4242

5、IDEA提交并推送代码:提交成功,推送失败

image.png
image.png

6、使用Jenkins构建报错:ERROR: Couldn‘t find any revision to build. Verify the repository and branch configura

https://blog.csdn.net/QQQZP/article/details/123102588?ops_request_misc=&request_id=&biz_id=102&utm_term=ERROR:%20Couldn%27t%20find%20any%20revis&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-123102588.142^v11^pc_search_result_control_group,157^v12^control&spm=1018.2226.3001.4187
image.png

7、jenkins实例似乎已离线

image.png
解决方法:https://www.jianshu.com/p/9fd1d16705a3
直接访问插件配置页面进行修改:
1、要根据自己实际配置的jenkins访问方式:
http://192.168.12.40:8080/jenkins/pluginManager/advanced
image.png
2、修改升级站点的url
将红框位置的url更换为其他jenkins更新镜像,如下:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
http://mirror.xmission.com/jenkins/updates/update-center.json
http://ftp.tsukuba.wide.ad.jp/software/jenkins/updates/current/update-center.json
http://updates.jenkins.io/update-center.json
3、重启jenkins
一定切记,要shutdown.bat,在点击startup.bat

8、怎么把windows中的文件直接上传到linux系统中

https://blog.csdn.net/qq_38708372/article/details/117661246
需要借助第三方连接工具,比如xshell
image.png

五、参考资料

  1. 实战:向GitHub提交代码时触发Jenkins自动构建(主要):https://blog.csdn.net/boling_cavalry/article/details/78943061
  2. windows安装jenkins.war并自动化部署教程(tomcat):https://blog.csdn.net/qq_41672585/article/details/124145843
  3. 在Jenkins中拉取GitHub上的代码包(超详细)(次要):https://blog.csdn.net/shuang_waiwai/article/details/121124203
  4. jenkins学习12-github上提交代码后构建job(次次要):https://blog.csdn.net/qq_27371025/article/details/118479287
  5. Jenkins +github实现自动触发构建:https://www.cnblogs.com/relustarry/p/15146025.html
  6. jenkins自动化部署springboot项:https://blog.csdn.net/lxw983520/article/details/89505645
  7. Jenkins部署Spring Boot项目详细过程:https://blog.csdn.net/weixin_49343190/article/details/123611576
  8. 持续集成、持续交付、持续部署(CI/CD)详细介绍:https://blog.csdn.net/weixin_49343190/article/details/123591691
  9. Window 通过cmd查看端口占用、相应进程、杀死进程:https://blog.csdn.net/linuxghs/article/details/123224221