2016年11月20日星期日

Docker_010:多配置作业的 Jenkins

环境:MAC OS  X 10.12.1 + Docker 1.12.3

假设要在 Ubuntu、Debian 和 CentOS 上测试同一个应用程序。
要在多平台测试,可以利用 Jenkins 中的“多配置作业”特性。
当 Jenkins 多配置作业运行时,会运行多个配置不同的子作业。

1. 创建多配置作业
(1)创建一个多配置项目,命名为 Docker_matrix_job
(2)在 Souce Code Management 区域里,选择 Git 并指定仓库为 https://github.com/jamtur01/docker-jenkins-sample.git 。
(3)单击 Add Axis,选择 User-defined Axis,输入维度的名字为 OS,并设置三个值:centos、debian、ubuntu。
当执行多配置作业时,Jenkins 会查找这个维度,并生成三个子作业——维度上的每个值对应一个作业。
(4)勾选 Build Environment 中的 Delete workspace before build starts
(5)单击 Add Build Step,选择 Execute shelll,shell 脚本内容如下:
# Build the image to be used for this run.
cd $OS && IMAGE=$(sudo docker build . | tail -1 | awk '{ print $NF }')

# Build the directory to be mounted into Docker.

MNT="$WORKSPACE/.."

# Execute the build inside Docker.
CONTAINER=$(sudo docker run -d -v "$MNT:/opt/project" $IMAGE /bin/bash -c "cd /opt/project/$OS && rake spec")

# Attach to the container's streams so that we can see the output.
sudo docker attach $CONTAINER

# As soon as the process exits, get its return value.
RC=$(sudo docker wait $CONTAINER)

# Delete the container we've just used to free disk space.
sudo docker rm $CONTAINER

# Exit with the same value that the process exited with.
exit $RC

这个脚本都做了什么呢?
首先,每次执行作业都会进入不同的以操作系统为名的目录。每个目录里的 Dockerfile 文件都不同。
以 centos 为例,其 Dockerfile 内容如下:
  FROM ubuntu:14.04
  MAINTAINER James Turnbull "james@example.com"
  ENV REFRESHED_AT 2016-06-01
  RUN apt-get update
  RUN apt-get -y install ruby rake
  RUN gem install --no-rdoc --no-ri rspec ci_reporter_rspec

(6)单击 Add post-build action,加入一个 Publish JUnit test result report (JUnit 测试结果报告)
在 Test report XMLs 域,指定 spec/reports/*.xml。这个目录是 ci_reporter gem 的 XML 输出位置。
Jenkins 会处理测试的历史结果并输出结果。

2. 运行多配置作业
 

没有评论: