环境: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. 运行多配置作业
假设要在 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. 运行多配置作业
没有评论:
发表评论