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安装
离线安装
## 官网 http://pkg.jenkins-ci.org/redhat/wget http://pkg.jenkins-ci.org/redhat/jenkins-2.39-1.1.noarch.rpmsudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins.io.keysudo yum -y install jenkins-*.noarch.rpm
在线安装
## 官网 http://pkg.jenkins-ci.org/redhat/wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.reposudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.keysudo yum -y install jenkins
基于Tomcat安装
- 安装并启动Tomat
- 从官网下载jenkins.war至
$CATALINA_BASE/webapps,Tomcat会自动部署; - 浏览器访问:http://centos:8080/jenkins/
免安装方式
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.warsudo java -jar jenkins.war ## 启动服务,直至看到日志`Jenkins is fully up and running`curl http://localhost:8080/ ## Jenkins已就绪
修改Jenkins配置文件
该配置文件为/etc/sysconfig/jenkins,首先将Jenkins用户从jenkins修改为root;另外将Jenkins默认端口从8080修改为8060。
## sudo vim /etc/sysconfig/jenkinsJENKINS_USER="root"JENKINS_PORT="8060"## 还有开启HTTPS相关参数,此处不打算开启,故不做说明
关闭防火墙
systemctl stop firewalld.servicesystemctl disable firewalld.service
启动Jenkins服务
systemctl start jenkinssystemctl enable jenkins
安装docker
设置仓库
sudo yum install -y yum-utilssudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
可选:启用nightly或test仓库
sudo yum-config-manager --enable docker-ce-nightlysudo yum-config-manager --enable docker-ce-test
安装docker engine
sudo yum install -y docker-ce docker-ce-cli containerd.io
启动docker服务
sudo systemctl start dockersudo systemctl enable docker
运行hello-world镜像
sudo docker run hello-world
安装git
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. Folders2. OWASP Markup Formatter3. Build Timeout4. Credentials Binding5. Timestamper6. Workspace Cleanup7. Ant8. Gradle9. Pipeline10. Github Branch Source11. Pipeline: GitHub Groovy Libraries12. Pipeline: Stage View13. Git14. Subversion15. SSH Slaves16. Matrix Authorization17. PAM Authentication18. LDAP19. Email Extension20. Mailer21. Localization: Chinese(Simplified)22. Blue Ocean
如果安装出现问题,则多试几次。
配置git目录
打开“系统管理->全局工具配置->Git”,将Path to Git executable修改为/usr/bin/git。点击应用。
准备Github上的简单项目
将示例项目simple-java-maven-app,fork到你的账户的Github仓库中。
将该项目下载到本地,在根目录下添加Jenkinsfile,复制下面的代码到Jenkinsfile中
pipeline {agent {docker {image 'maven:3-alpine'args '-v /root/.m2:/root/.m2'}}stages {stage('Build') {steps {sh 'mvn -B -DskipTests clean package'}}}}
保存该文件并提交到本地的git仓库。
git add .git commit -m "Add initial Jenkinsfile"
运行项目,直到所有的阶段都运行通过。
为流水线增加Test阶段
在Jenkinsfile的stages中添加下面的部分
stage('Test') {steps {sh 'mvn test'}post {always {junit allowEmptyResults: true, testResults: 'target/surefire-reports/*.xml'}}}
再次保存并提交。
git add .git commit -m "Add Test stage"
再次运行直到所有阶段通过。
为流水线增加deliver阶段
在Jenkinsfile的stages中添加下面的部分
stage('Deliver') {steps {sh './jenkins/scripts/deliver.sh'}}
当流水线变得越来越复杂的时候,可以通过将更复杂的步骤放到多个独立的shell脚本中来降低流水线代码的复杂度,使其越简洁越好。
再次保存并提交。
git add .git commit -m "Add Deliver stage"
再次运行直到所有阶段通过。
总结
至此,所有基础的部分就已经完成,它们是构建更复杂的Java应用程序的基础。
由于Jenkins具有极高的可扩展性,因此可以进行修改和配置,以处理构建协调和自动化的几乎任何方面。
