--昨夜西风凋碧树,独上高楼,望尽天涯路
环境准备
硬件准备:
256 MB RAM, 推荐 512MB
10 GB of 硬盘 (用于给Jenkins以及Docker)
运行Jenkins
下面通过docker运行Jenkins:
#先建立目录
mkdir jenkins-data
#运行
docker run \
--rm \
-u root \
-p 8888:8080 \
-v /root/jenkins-data:/var/jenkins_home \ #挂载Jenkins容器中的/var/jenkins_home到宿主机jenkins-data,如果jenkins-data不存在,会自动创建
-v /var/run/docker.sock:/var/run/docker.sock \ #挂载docker.sock
-v "$HOME":/home \ #挂载$Home
jenkinsci/blueocean
浏览器访问http://ip:8888/会看到需要激活Jenkins:
初始密码可以从log中查看,或者从/var/jenkins_home/secrets/initialAdminPassword文件中找:
选择安装推荐的插件之后等待插件安装完成:
之后注册账号,一路保存:
点击新建任务,创建一个pipeline任务:
编写Jenkinsfile,这里有两种方式:
直接在Jenkons Web UI中编写:
从SCM中读取Jenkinsfile,首先要在git中添加Jenkinsfile文件,之后填写配置:
两种方式都可以构建成功:
下面我们在蓝海中操作一些步骤:
点击运行:
之后可以进入到本次构建界面查看信息:
Build成功之后的界面如下:
点击右上角回到经典页面
添加test stage
修改配置文件:
新添加的脚本执行maven命令来在简单的java应用程序上运行单元测试。
这个命令还生成一个jUnit xml报告,该报告保存到目标/surefire-Reports目录(在Jenkins容器的/var/jenkins_home/workspace/simple-java-maven-app目录中)。
在Blue Ocean中,结果可以通过管道运行的测试页面访问。
POST部分包含这个jUnit步骤的条件确保步骤总是在测试阶段完成时执行,而不管阶段的结果如何。
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v /root/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
git 'https://github.com/LUFFY-lucy/simple-java-maven-app'
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
post {
always {
junit 'target/surefire-reports/*.xml'
}
}
}
}
}
同理,进入Blue Ocean,点击运行,结果如下:
添加一个交付stage
修改脚本如下,新加的stage中执行一个交付的脚本文件:
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v /root/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
git 'https://github.com/LUFFY-lucy/simple-java-maven-app'
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
post {
always {
junit 'target/surefire-reports/*.xml'
}
}
}
stage('Deliver') {
steps {
sh './jenkins/scripts/deliver.sh'
}
}
}
}
该shell文件位于:
执行shell可以保持pipeline代码(即jenkinsfile)的整洁。可以将复杂的构建步骤(特别是由2个或更多步骤组成的阶段)放入单独的shell脚本文件中。这最终使Pipeline代码的维护变得更容易。
进入Blue Ocean,点击运行,之后部署成功:
至此我们已经走完了“构建”、“测试”和“交付”,这是是使用Jenkins中的maven构建更复杂的java应用程序的基础。
由于Jenkins是非常可扩展的,我们可以修改和配置它来处理构建编排和自动化的几乎任何方面。