Jenkins入门:linux系统docker下安装jenkins、 并以自动化的方式 用Maven构建Java应用

本篇博客介绍如何使用Jenkins编排并构建一个使用Maven管理的简单Java应用程序。该应用包含若干单元测试,用于检查main方法。 测试结果保存在JUnit XML报告中。了解Jenkins详细介绍,点击查看Jenkins官方文档

1. Jenkins 是什么?

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

2. 安装Jenkins

Jenkins通常作为一个独立的应用程序在其自己的流程中运行, 内置Java servlet 容器/应用程序服务器(Jetty)。
配置要求:
软件配置:Java 8—​无论是Java运行时环境(JRE)还是Java开发工具包(JDK)都可以。
安装软件:使用Linux下安装的Docker容器(因为这可以在任何支持的操作系统macOS,Linux和Windows或云服务上运行Docker镜像)

  • 在Docker中运行Jenkins (Linux系统)

1.打开终端窗口
2.下载 jenkinsci/blueocean 镜像并使用以下docker run 命令将其作为Docker中的容器运行 :

注意:jenkinsci/blueocean image 镜像 捆绑了所有Blue Ocean插件和功能,每次发布Blue Ocean新版本时,都会发布新镜像。

docker run \
  --rm \
  -u root \
  -p 8080:8080 \
  -v jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v "$HOME":/home \
  jenkinsci/blueocean

命令说明:
--rm (可选) jenkinsci/blueocean 关闭时自动删除Docker容器。如果您需要退出Jenkins,这可以保持整洁。
-d (可选)jenkinsci/blueocean 在后台运行容器(即“分离”模式)并输出容器ID。如果您不指定此选项, 则在终端窗口中输出正在运行的此容器的Docker日志。
-p 49000:8080 映射,第一个数字代表主机上的端口,第二个代表容器的端口。您将通过端口49000访问主机上的Jenkins。
-p 50000:50000(可选)将 jenkinsci/blueocean 容器的端口50000 映射到主机上的端口50000
-v jenkins-data:/var/jenkins_home (可选,但强烈建议)映射在容器中的/var/jenkins_home 目录到具有名字 jenkins-data 的volume。 如果这个卷不存在,那么这个 docker run 命令会自动为你创建卷。 如果您希望每次重新启动Jenkins(通过此 docker run … 命令)时保持Jenkins状态,则此选项是必需的 。 如果你没有指定这个选项,那么在每次重新启动后,Jenkins将有效地重置为新的实例。
-v /var/run/docker.sock:/var/run/docker.sock (可选 /var/run/docker.sock 表示Docker守护程序通过其监听的基于Unix的套接字。 该映射允许 jenkinsci/blueocean 容器与Docker守护进程通信, 如果 jenkinsci/blueocean 容器需要实例化其他Docker容器,则该守护进程是必需的。 如果运行声明式管道,其语法包含agent部分用 docker
-v "$HOME":/home 将主机上的$HOME 目录 (即你的本地)映射到 (通常是 /Users/ 目录) 到容器的 /home 目录。

  • 访问 Jenkins/Blue Ocean Docker 容器(Docker经验足且常用)

如果你希望或需要使用 docker exec 命令通过一个终端/命令提示符来访问 Jenkins/Blue Ocean Docker 容器,
你可以添加如 --name jenkins-tutorials 选项(与上面的 docker run ), 这将会给Jenkins/Blue Ocean Docker容器一个名字 “jenkins-tutorials”。

这意味着你可以通过 docker exec 命令访问Jenkins/Blue Ocean 容器(通过一个单独的终端 /命令提示窗口) ,

例如: docker exec -it jenkins-tutorials bash

  • 安装向导

  1. 解锁Jenkins
    当在终端/命令提示窗口出现两组星号时, 浏览 http://localhost:8080 并等待 Unlock Jenkins 页面出现。
    Jenkins入门:linux系统docker下安装jenkins、 并以自动化的方式 用Maven构建Java应用_第1张图片
  2. 再次从终端/命令提示窗口, 复制自动生成的字母数字密码(在两组星号之间)。
    Jenkins入门:linux系统docker下安装jenkins、 并以自动化的方式 用Maven构建Java应用_第2张图片
  3. 在 Unlock Jenkins 页面, 粘贴该密码到 Administrator password 字段并点击 Continue。
  4. 在Customize Jenkins 页面点击 Install suggested plugins。等待安装插件
  5. 创建一个管理员用户,开始使用Jenkins
  • 停止和重启Jenkins

停止:在终端/命令提示窗口输入 Ctrl-C停止 Jenkins/Blue Ocean Docker 容器,
重启:运行相同的 docker run ... 命令

3. 用Maven构建Java应用

配置要求:
安装软件:Git和GitHub Desktop.

  • Fork 和 clone GitHub示例仓库

通过将应用程序源代码所在的示例仓库fork到你自己的Github账号中, 并clone到本地

  1. 请确保你登陆了你的GitHub账户。
  2. 将示例仓库 simple-java-maven-app fork到你的账户的Github仓库中。
  3. 将你的GitHub账户中的 simple-java-maven-app 仓库clone到你的本地机器。
  • 在Jenkins中创建你的流水线项目

  1. 回到Jenkins,如果有必要的话重新登录,点击 Welcome to Jenkins! 下方的 create new jobs
    注意: 如果你无法看见以上内容,点击左上方的 New Item 。
  2. 在 Enter an item name 域中,为新的流水线项目指定名称(例如 simple-java-maven-app)。
  3. 向下滚动并单击 Pipeline,然后单击页面末尾的 OK 。
  4. ( 可选 ) 在下一页中,在 Description 字段中填写流水线的简要描述 (例如 一个演示如何使用Jenkins构建Maven管理的简单Java应用程序的入门级流水线。
  5. 点击页面顶部的 Pipeline 选项卡,向下滚动到 Pipeline 部分。
  6. 在 Definition 域中,选择 Pipeline script from SCM 选项。此选项指示Jenkins从源代码管理(SCM)仓库获取你的流水线, 这里的仓库就是你clone到本地的Git仓库。
  7. 在 SCM 域中,选择 Git。
  8. 在 Repository URL 域中,填写你本地仓库的 目录路径:/home/GitHub/simple-java-maven-app
  9. 点击 Save 保存你的流水线项目。你现在可以开始创建你的 Jenkinsfile,这些文件会被添加到你的本地仓库。
  • 将初始流水线创建为Jenkinsfile

首先,创建一个初始流水线来下载Maven Docker镜像,并将其作为Docker容器运行(这将构建你的简单Java应用)。 同时添加一个“构建”阶段到流水线中,用于协调整个过程。

  1. 在本地的git仓库跟目录创建一个Jenkinsfile 文本文件
pipeline {
    agent {
        docker {
            image 'maven:3-alpine' 
            args '-v /root/.m2:/root/.m2' 
        }
    }
    stages {
        stage('Build') { 
            steps {
                sh 'mvn -B -DskipTests clean package' 
            }
        }
    }
}

image:下载maven容器,在Docker中与jenkins相互独立运行
args:在暂时部署的Maven Docker容器的 /root/.m2 (即Maven仓库)目录 和Docker主机文件系统的对应目录之间创建了一个相互映射,防止每次重启Docker,丢失jenkins仓库
stage(‘Build’):定义一个‘test’stage显示在Jenkins UI上
sh ‘mvn step’:运行Maven命令干净地构建你的Java应用(不运行任何tests)

  1. 运行以下命令提交文本文件到git仓库:
    git add .
    git commit -m “Add initial Jenkinsfile”
  2. 在jenkins页面 This job has not been run 消息框中,点击 Run,然后快速点击右下角出现的 OPEN 链接

jenkins流水线做了如下几个动作
a.将项目排入队列等待在agent上运行。
b.下载Maven Docker镜像,并且将其运行在Docker中的一个容器中
c. 在Maven容器中运行 Build 阶段 (Jenkinsfile 中所定义的)。在这期间,Maven会下载构建你的Java应用所需的工件, 这些工件最终会被保存在Jenkins的本地Maven仓库中(Docker的主机文件系统)。
d.构建成功页面变成绿色
Jenkins入门:linux系统docker下安装jenkins、 并以自动化的方式 用Maven构建Java应用_第3张图片

  • 为流水线增加test阶段

  1. 复制以下“stage(Test)”声明式流水线代码,并粘贴到 Jenkinsfile 中 Build 阶段的下方:
pipeline {
    agent {
        docker {
            image 'maven:3-alpine'
            args '-v /root/.m2:/root/.m2'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }
        stage('Test') { 
            steps {
                sh 'mvn test' 
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml' 
                }
            }
        }
    }
}

stage(‘Test’):定义一个‘test’stage显示在Jenkins UI上
sh ‘mvn test’:执行Maven命令运行Java应用的单元测试。 生成一个JUnit XML报告
junit :用于归档JUnit XML报告,可以在流水线运行的 Tests 页面获取结果

  1. 提交修改内容到git上,运行jenkins,查看jenkins运行结果
    Jenkins入门:linux系统docker下安装jenkins、 并以自动化的方式 用Maven构建Java应用_第4张图片

你可能感兴趣的:(接口自动化测试)