--昨夜西风凋碧树,独上高楼,望尽天涯路

环境准备

硬件准备:

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:

jenkins 创建maven项目 jenkins maven构建_CICD

初始密码可以从log中查看,或者从/var/jenkins_home/secrets/initialAdminPassword文件中找:

jenkins 创建maven项目 jenkins maven构建_Jenkins Pipeline_02

选择安装推荐的插件之后等待插件安装完成:

jenkins 创建maven项目 jenkins maven构建_Jenkins_03

jenkins 创建maven项目 jenkins maven构建_自动化_04

之后注册账号,一路保存:

jenkins 创建maven项目 jenkins maven构建_jenkins 创建maven项目_05

点击新建任务,创建一个pipeline任务:

jenkins 创建maven项目 jenkins maven构建_自动化_06

编写Jenkinsfile,这里有两种方式:

直接在Jenkons Web UI中编写:

jenkins 创建maven项目 jenkins maven构建_Jenkins Pipeline_07

从SCM中读取Jenkinsfile,首先要在git中添加Jenkinsfile文件,之后填写配置:

jenkins 创建maven项目 jenkins maven构建_jenkins 创建maven项目_08

jenkins 创建maven项目 jenkins maven构建_jenkins 创建maven项目_09

两种方式都可以构建成功:

jenkins 创建maven项目 jenkins maven构建_自动化_10

下面我们在蓝海中操作一些步骤:

jenkins 创建maven项目 jenkins maven构建_jenkins 创建maven项目_11

点击运行:

jenkins 创建maven项目 jenkins maven构建_CICD_12

之后可以进入到本次构建界面查看信息:

jenkins 创建maven项目 jenkins maven构建_jenkins 创建maven项目_13

Build成功之后的界面如下:

jenkins 创建maven项目 jenkins maven构建_jenkins 创建maven项目_14

点击右上角回到经典页面

添加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,点击运行,结果如下:

jenkins 创建maven项目 jenkins maven构建_自动化_15

添加一个交付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文件位于:

jenkins 创建maven项目 jenkins maven构建_Jenkins_16

执行shell可以保持pipeline代码(即jenkinsfile)的整洁。可以将复杂的构建步骤(特别是由2个或更多步骤组成的阶段)放入单独的shell脚本文件中。这最终使Pipeline代码的维护变得更容易。

进入Blue Ocean,点击运行,之后部署成功:

jenkins 创建maven项目 jenkins maven构建_Jenkins_17

至此我们已经走完了“构建”、“测试”和“交付”,这是是使用Jenkins中的maven构建更复杂的java应用程序的基础。

由于Jenkins是非常可扩展的,我们可以修改和配置它来处理构建编排和自动化的几乎任何方面。