Jenkins是什么

Jenkins是一个可扩展的持续集成引擎,主要用于

  • 持续、自动地构建/测试软件项目
  • 监控一些定时执行的任务

Jenkins的特性包括:

  • 易于安装-只要把Jenkins.war部署到servlet容器,不需要数据库支持。
  • 易于配置-所有配置都是通过其提供的Web UI实现的。
  • 集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。
  • 生成JUnit/TestNG测试报告。
  • 分布式构建支持Jenkins能够让多台计算机一起构建/测试。
  • 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
  • 插件支持:支持扩展插件,你可以开发适合自己团队使用的工具。

Jenkins目标

Jenkins的主要目标是监控软件开发流程,快速显示问题。所以能保证开发人员以及相关人员省时省力提高开发效率。

CI系统在整个开发过程中的主要作用是控制:当系统在代码存储库中探测到修改时,它将运行构建的任务委托给构建过程本身。如果构建失败了,那么CI系统将通知相关人员,然后继续监视存储库。它的角色看起来是被动的,但能够快速反映问题。

具有的优点:

  • Jenkin的一切配置都可以在Web界面上完成。有些配置如MAVEN_HOME和Email,只需要配置一次,所有的项目都可以使用,也可以直接对XML进行配置。
  • 支持maven的模块,Jenkins对Maven做了优化,因此能够自动识别module,每个module可以配置成一个job。相当灵活。
  • 测试报告聚合,所有模块的测试报告都被聚合在一起,结果一目了然,使用其他CI,几乎是件不可能完成的任务。
  • 构件指纹(artifact fingerprint),每次build的结果构件都被很好的自动管理,无需任何配置就可以方便的浏览下载。

安装虚拟机

本次以CentOS7为例。

安装JDK

请自行安装。

Jenkins安装

离线安装

  1. ## 官网 http://pkg.jenkins-ci.org/redhat/
  2. wget http://pkg.jenkins-ci.org/redhat/jenkins-2.39-1.1.noarch.rpm
  3. sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins.io.key
  4. sudo yum -y install jenkins-*.noarch.rpm

在线安装

  1. ## 官网 http://pkg.jenkins-ci.org/redhat/
  2. wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
  3. sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
  4. sudo yum -y install jenkins

基于Tomcat安装

  1. 安装并启动Tomat
  2. 从官网下载jenkins.war至$CATALINA_BASE/webapps,Tomcat会自动部署;
  3. 浏览器访问:http://centos:8080/jenkins/

免安装方式

  1. wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
  2. sudo java -jar jenkins.war ## 启动服务,直至看到日志`Jenkins is fully up and running`
  3. curl http://localhost:8080/ ## Jenkins已就绪

修改Jenkins配置文件

该配置文件为/etc/sysconfig/jenkins,首先将Jenkins用户从jenkins修改为root;另外将Jenkins默认端口从8080修改为8060。

  1. ## sudo vim /etc/sysconfig/jenkins
  2. JENKINS_USER="root"
  3. JENKINS_PORT="8060"
  4. ## 还有开启HTTPS相关参数,此处不打算开启,故不做说明

关闭防火墙

  1. systemctl stop firewalld.service
  2. systemctl disable firewalld.service

启动Jenkins服务

  1. systemctl start jenkins
  2. systemctl enable jenkins

安装docker

设置仓库

  1. sudo yum install -y yum-utils
  2. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

可选:启用nightly或test仓库

  1. sudo yum-config-manager --enable docker-ce-nightly
  2. sudo yum-config-manager --enable docker-ce-test

安装docker engine

  1. sudo yum install -y docker-ce docker-ce-cli containerd.io

启动docker服务

  1. sudo systemctl start docker
  2. sudo systemctl enable docker

运行hello-world镜像

  1. sudo docker run hello-world

安装git

  1. sudo yum install -y git

打开Jenkins界面

在浏览器中输入ip:8060进入Jenkins登录页面。

打开/var/lib/jenkins/secrets/initialAdminPassword文件,复制其中的密码到网页的输入框中

tail /var/lib/jenkins/secrets/initialAdminPassword

输入密码后,进入插件安装界面。点击Install suggested plugins,安装默认插件。

由于源的速度等问题,插件安装很容易出现问题,可以先跳过这一步,先进入主界面。

进入“系统管理->插件管理->高级”标签页,修改升级站点的值为“https://updates.jenkins-zh.cn/update-center.json”,提交并获取信息。

在“可选插件”中依次下载安装以下的插件。

  1. 1. Folders
  2. 2. OWASP Markup Formatter
  3. 3. Build Timeout
  4. 4. Credentials Binding
  5. 5. Timestamper
  6. 6. Workspace Cleanup
  7. 7. Ant
  8. 8. Gradle
  9. 9. Pipeline
  10. 10. Github Branch Source
  11. 11. Pipeline: GitHub Groovy Libraries
  12. 12. Pipeline: Stage View
  13. 13. Git
  14. 14. Subversion
  15. 15. SSH Slaves
  16. 16. Matrix Authorization
  17. 17. PAM Authentication
  18. 18. LDAP
  19. 19. Email Extension
  20. 20. Mailer
  21. 21. Localization: Chinese(Simplified)
  22. 22. Blue Ocean

如果安装出现问题,则多试几次。

配置git目录

打开“系统管理->全局工具配置->Git”,将Path to Git executable修改为/usr/bin/git。点击应用。

准备Github上的简单项目

将示例项目simple-java-maven-app,fork到你的账户的Github仓库中。

将该项目下载到本地,在根目录下添加Jenkinsfile,复制下面的代码到Jenkinsfile中

  1. pipeline {
  2. agent {
  3. docker {
  4. image 'maven:3-alpine'
  5. args '-v /root/.m2:/root/.m2'
  6. }
  7. }
  8. stages {
  9. stage('Build') {
  10. steps {
  11. sh 'mvn -B -DskipTests clean package'
  12. }
  13. }
  14. }
  15. }

保存该文件并提交到本地的git仓库。

  1. git add .
  2. git commit -m "Add initial Jenkinsfile"

运行项目,直到所有的阶段都运行通过。

为流水线增加Test阶段

在Jenkinsfile的stages中添加下面的部分

  1. stage('Test') {
  2. steps {
  3. sh 'mvn test'
  4. }
  5. post {
  6. always {
  7. junit allowEmptyResults: true, testResults: 'target/surefire-reports/*.xml'
  8. }
  9. }
  10. }

再次保存并提交。

  1. git add .
  2. git commit -m "Add Test stage"

再次运行直到所有阶段通过。

为流水线增加deliver阶段

在Jenkinsfile的stages中添加下面的部分

  1. stage('Deliver') {
  2. steps {
  3. sh './jenkins/scripts/deliver.sh'
  4. }
  5. }

当流水线变得越来越复杂的时候,可以通过将更复杂的步骤放到多个独立的shell脚本中来降低流水线代码的复杂度,使其越简洁越好。

再次保存并提交。

  1. git add .
  2. git commit -m "Add Deliver stage"

再次运行直到所有阶段通过。

总结

至此,所有基础的部分就已经完成,它们是构建更复杂的Java应用程序的基础。

由于Jenkins具有极高的可扩展性,因此可以进行修改和配置,以处理构建协调和自动化的几乎任何方面。