前言
Jenkins在日常工作中占据了一个非常重要的角色,帮助我们节省了大量用于构建的时间。有些公司有运维大哥对Jenkins进行维护,如果没有那只能自己动手了。俗话说的好自己动手丰衣足食,所以本文就从0开始搭建属于自己的Jenkins持续平台。主要包含,普通项目构建、流水线构建、多分支流水线构建并将构建结果辅以钉钉通知。
前期准备
- centos7 服务器一台
 
确认是否能安装docker
 Docker要求CentOS系统的内核版本高于3.10.通过uname -r命令查看你当前的内核版本。
1  | sh复制代码[root@CentOS ~]# uname -r  | 
更改yum源为阿里云
备份旧源
1  | shell复制代码mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup  | 
下载最新的源
1  | shell复制代码wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo  | 
生成缓存
1  | shell复制代码yum makecache  | 
更新
1  | shell复制代码yum update  | 
安装docker
1  | shell复制代码yum install -y yum-utils  | 
添加docker源
1  | shell复制代码yum-config-manager \  | 
安装docker
1  | shell复制代码yum install docker-ce  | 
启动docker
1  | shell复制代码systemctl start docker  | 
更改docker镜像源
1  | shell复制代码vim /etc/docker/daemon.json  | 
加入阿里云源地址
1  | text复制代码{  | 
重新读取配置
1  | shell复制代码systemctl daemon-reload  | 
重启docker
1  | shell复制代码systemctl restart docker  | 
安装jenkins
下载jenkins镜像
1  | shell复制代码docker pull jenkins  | 
启动jenkins
 设置端口为9090并映射jenkins_home到宿主机/home/jenkins_home。
1  | shell复制代码docker run -d --name jenkins -p 9090:8080 -v /home/jenkins_home:/var/jenkins_home jenkins  | 
 可以通过docker ps查看运行的容器。
1  | text复制代码[root@CentOS home]# docker ps  | 
把玩jenkins docker镜像遇到的volume权限问题
在运行启动jenkins的命令时,可能会出现jenkins无法启动情况。
1  | text复制代码[root@CentOS home]# docker ps -a  | 
 可以通过docker logs 镜像名称查看启动日志。
1  | text复制代码[root@CentOS home]# docker logs jenkins  | 
 查看输出的日志,如果出现 Permission denied 类似的错误。需要删除旧容器重新运行。
1  | shell复制代码docker rm jenkins  | 
 运行命令加入了-u 0重新运行。
1  | shell复制代码docker run -d --name jenkins -p 9090:8080 -v /home/jenkins_home:/var/jenkins_home -u 0 jenkins  | 
Jenkins初始化
启动成功后输入 http://服务器:9090/
如果无法访问,请检查一下防火墙端口是否开放,如果是云服务器还需要检查安全组设置
  首次启动jenkins需要输入密码,需要进入容器内获取密码。密码位于/var/jenkins_home/secrets/initialAdminPassword。
进入容器
1  | shell复制代码docker exec -it jenkins /bin/bash  | 
获取密码
1  | shell复制代码cat /var/jenkins_home/secrets/initialAdminPassword  | 
1  | text复制代码[root@CentOS jenkins_home]# docker exec -it jenkins /bin/bash  | 
  由于我们将/var/jenkins_home – 挂载到–> /home/jenkins_home所以也可以直接cat /home/jenkins_home/secrets/initialAdminPassword 获取密码。
输入密码以后,安装需要的插件,在安装途中由于网络原因会出现有些插件安装失败,这个可以不用理会。
设置jenkins的默认登录账号和密码
处理插件安装失败
进入jenkins的主页面右上角可能会出现一些报错信息,主要是提示jenkins 需要的某些插件没有安装,或者说jenkins版本太低了,插件无法使用这个时候我们需要先升级jenkins做一个升级。
自动升级
Jenkins提供了自动升级的方式
手动升级
 可以去Jenkins的官网下载好最新jar包上传到服务器,也可以使用wget命令。
1  | shell复制代码wget http://jenkins新版本的下载地址  | 
  Jenkins的更新主要是替换jenkins镜像里面的war包 ,我们可以把下载好的war包使用docker cp直接进行复制命令如下:
1  | shell复制代码docker cp jenkins.war jenkins:/usr/share/jenkins  | 
重新启动Jenkins即可完成升级。
1  | shell复制代码docker restart jenkins  | 
更插件源
1  | text复制代码https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json  | 
- 替换完源以后点击提交。
 - 然后进入插件管理页面将出错的插件重新安装。
 - 及时更新插件。
 
安装必要的插件
- Localization: Chinese (Simplified) 1.0.14 汉化包 搜索关键字 chinese
 - Publish Over SSH 1.20.1 搜索关键字 ssh
 - DingTalk 钉钉通知 2.3.0
 
配置jenkins
全局工具配置
主要配置 jdk、maven、git等常用环境。需要注意配置的别名,后续构建将会使用到。
配置jdk
  因为jenkins镜像自带jdk所以无需安装直接使用即可,进入Jenkins容器,使用java -verbose查看java安装路径。
1  | shell复制代码docker exec -it jenkins /bin/bash  | 
1  | shell复制代码java -verbose  | 
配置git
 进入容器内使用whereis git即可查询到git安装路径。
1  | text复制代码root@6a9fbb129cbe:~# whereis git  | 
配置maven
maven直接使用自动安装即可。
系统设置
配置服务器
点击新增即可添加服务器,主要配置:
Name名称 - 构建的时候将会用到Hostname服务器地址Username用户名Remote Directory远程目录 - 上传文件的目录 默认配置根目录即可/。
点击高级进行其他参数配置
- 如果需要使用密码登录,则选中
Use password authentication, or use a different key复选框即可,如下图所示。 
  除了配置密码还可以配置端口Port,跳板机Jump Host的参数,可以根据实际情况配置。默认可以使用密码。
  配置完成以后点击Test Configuration按钮,如果配置正常会出现Success 反之出现错误信息,可以根据错误信息,调整配置参数。
配置钉钉
钉钉主要用于构建通知,在配置前需要在钉钉群内,添加自定义机器人。
自由风格的软件项目
  以https://gitee.com/huangxunhui/jenkins_demo.git为例。
新建项目
设置项目简介
源码管理
- 配置仓库地址。
 - 配置凭证-主要用于拉取代码。
 - 配置需要构建的分支。
 
添加凭证
如果项目是开源,则可以跳过这一步。反之需要设置凭证,要不然将无法拉取代码进行构建。
构建触发器
可以根据实际情况选择,案例采用轮询的方式进行构建。
构建
构建后操作
- 将jar包发送到相应的服务器。
 
Source filesjar包的路径。支持通配符匹配.Remove prefix移除前缀,一般jar包的路径都存在于**/target下,如果不移除,会在目标服务器上建立相应的目录结构。Remote directory远程目录。
注意的点, 在之前配置服务器时也配置了
Remote directory,这时候部署的实际目录是,服务器设置的远程目录+现在配置的远程目录。
Exec command执行脚本,主要用于将jar发送到目标服务器后,执行相应的启动脚本。
配置完成点击保存即可。
点击开始构建
发送钉钉通知
流水线
流水线构建,将上述构建步骤代码化,方便调整。
项目创建
流水线编写
  由于配置步骤类似,前面简单的步骤可以参照,自由风格的软件项目。这里主要讲流水线如何编写。
注意右下角的流水线语法,后续会用上。
我们可以点击右上角的下拉按钮,生成一个简单的流水线。比如说hello world。
1  | groovy复制代码pipeline {  | 
  通过上面的pipeline可以知道,有一个Hello的步骤,这个步骤执行的是,输出hello world。依葫芦画瓢,一次完整的构建我们可以总结出如下几个步骤:拉取代码(checkout) -> 打包(build) -> 部署(deploy)。
1  | groovy复制代码pipeline {  | 
步骤梳理好了,这个时候就可以完善对应的步骤了,这就需要用到提到的,流水线语法。
将生成好的流水线脚本复制到对应的步骤即可。
注意:如果使用到maven需要将maven引入,
tools相应的内容就是配置maven时配置的别名。
1  | groovy复制代码pipeline {  | 
配置完成点击应用即可。
构建测试
上面演示的是将流水线配置在jenkins内,其实我们还可以从SCM中获取,比如git。
我们可以建立一个仓库专门维护不同项目的构建脚本
Jenkinsfile,也可以在每个项目下,建立对应的Jenkinsfile.
  注意的点:项目中的Jenkinsfile需要和配置的一致。比如说上面的配置,是扫描项目根目录下名字为Jenkinsfile的文件。
所以我们可以在jenkins_demo仓库内添加Jenkinsfile文件。
配置点击完成,即可。
多分支流水线
  在日常开发中,通常是基于git-flow进行开发的,前面两种都是基于单分支构建,如果每个分支都去配置,那将耗费大量时间。所以多分支流水线就是用来解决这个问题的。
创建项目
配置分支源
构建配置
扫描触发器
完成上述配置,点击应用即可。
编写jenkinsfile文件
核心思想是,根据不同的分支使用不同的打包命令,发送到不同的服务器进行运行。
1  | groovy复制代码pipeline {  | 
使用到的启动脚本manage.sh。
构建结果
结尾
如果觉得对你有帮助,可以多多评论,多多点赞哦,也可以到我的主页看看,说不定有你喜欢的文章,也可以随手点个关注哦,谢谢。
本文转载自: 掘金