通过Jenkins容器构建镜像(2)

   2016-11-13 0
核心提示:作者:杨冬 欢迎转载,也请保留这段声明。谢谢! 出处: https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/ 上篇文章我们构建了一个Jenkins镜像,本篇我们通过一个实例使用一下上篇构建的镜像,来组成一个持续集成环境。典型的持续集成环境包

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!

出处: https://andyyoung01.github.io/http://andyyoung01.16mb.com/

上篇文章我们构建了一个Jenkins镜像,本篇我们通过一个实例使用一下上篇构建的镜像,来组成一个持续集成环境。典型的持续集成环境包含的功能包括:从源代码仓库拉取代码,源代码的编译,对编译后的代码进行单元测试、集成测试及系统测试等,测试完成后对代码的打包。这些功能可以通过Jenkins的插件来实现。

本篇的代码使用了“Using Docker”一书当中的identidock代码。它是由python语言编写的简单的web应用程序。程序的基本功能是根据用户输入的用户名,生成一个专属于该用户的图标,如下图所示:

通过Jenkins容器构建镜像(2)

完整的程序由三部分组成:一个由Flask框架编写的web程序,一个基于redis的缓存,以及一个生成图标的web服务。这三个部分都最终都通过容器提供服务,组成微服务的架构。程序的代码主要在第一个部分即web程序部分,另外两个部分都直接使用现成的容器镜像,即一个redis镜像和一个amouat/dnmonster镜像。整个程序可以通过docker-compose组成测试环境。程序的源代码在 https://github.com/andyyoung01/ci-testing/tree/master/identidock

下面我们主要关注通过上篇构建的Jenkins镜像,来拉取程序源代码,运行此程序的单元测试,在测试完成后可以通过bash脚本将程序tagging,然后推送到镜像库中等待部署。

首先,下载上篇构建的Jenkins容器镜像:

[yangdong@centos7 ~]$ docker pull registry.cn-beijing.aliyuncs.com/andyyoung01/jenkins-with-docker

为了方便持久化Jenkins容器的配置等,我们创建一个数据容器:

[yangdong@centos7 ~]$ docker run --name jenkins-data \
> registry.cn-beijing.aliyuncs.com/andyyoung01/jenkins-with-docker \
> echo  "Jenkins Data Container"
Jenkins Data Container

下面创建Jenkins服务器容器,并且通过 --volumes-from 命令行参数使用前面创建的数据容器,来持久化JENKINS_HOME中的数据:

[yangdong@centos7 ~]$ docker run -d -v /var/run/docker.sock:/var/run/docker.sock \
> --volumes-from jenkins-data -p 8080:8080 --name jenkins \
> registry.cn-beijing.aliyuncs.com/andyyoung01/jenkins-with-docker
4f94030e525ea573c98a8d24df2540075f5a43f091890256fb7295d137192754

容器需要一段时间初始化,此时可以通过如下命令查看容器的初始化过程:

[yangdong@centos7 ~]$ docker logs -f jenkins
...

从上面的日志输出可以查询到Jenkins服务器的初始化密码,使用此密码登录Jenkins的web界面。经过一系列的初始化后,最终进入了Jenkins的web界面。下面开始通过此web页面创建创建持续集成环境:

  1. 点击“创建一个新任务”链接。
  2. 在item name中输入项目的名称,这里输入“identidock”,然后选择“构建一个自由风格的软件项目”,点击“ok”。
  3. 在“源码管理”部分,选择Git,然后输入您自己的代码库的Repository URL,这里直接使用Git Hub作为代码库,输入“ https://github.com/andyyoung01/ci-testing.git ”。“Branches to build”输入想要构建的分支,这里保留默认的master分支。这部分配置了该持续集成环境从哪里拉取程序源代码。
  4. 在“构建”部分,选择“增加构建步骤”,选择“Execute shell”。在“Command”文本框中,输入下面的bash脚本:
    #Enter the working directory
    cdidentidock
    
    #Default compose args
    COMPOSE_ARGS=" -f jenkins.yml -p jenkins "
    
    #Make sure old containers are gone
    sudo docker-compose $COMPOSE_ARGSstop
    sudo docker-compose $COMPOSE_ARGSrm --force -v
    
    #build the system
    sudo docker-compose $COMPOSE_ARGSbuild --no-cache
    sudo docker-compose $COMPOSE_ARGSup-d
    
    #Run unit tests
    sudo docker-compose $COMPOSE_ARGSrun --no-deps --rm-eENV=UNIT identidock
    ERR=$?
    
    #Run system test if unit tests passed
    if[$ERR-eq0 ];then
     IP=$(sudo docker inspect -f{{.NetworkSettings.IPAddress}} jenkins_identidock_1)
     CODE=$(curl -sL -w"%{http_code}"$IP:9090/monster/bla -o /dev/null) ||true
    if[$CODE-eq200 ];then
    echo"Test passed - Tagging"
     HASH=$(git rev-parse --short HEAD)
     sudo docker tag jenkins_identidock andyyoung01/identidock:$HASH
     sudo docker tag jenkins_identidock andyyoung01/identidock:newest
    echo"Pushing"
    # sudo docker login -u your-username -p your-password registry.cn-beijing.aliyuncs.com
    # sudo docker push amouat/identidock:$HASH
    # sudo docker push amouat/identidock:newest
    else
    echo"Site returned "$CODE
     ERR=1
    fi
    fi
    
    #Pull down the system
    sudo docker-compose $COMPOSE_ARGSstop
    sudo docker-compose $COMPOSE_ARGSrm --force -v
    
    return$ERR
    

上面的部分配置了持续集成环境的构建和测试部分,以及测试成功后对代码的打包。

最后点击“保存”按钮保存所有设置,回到该项目的主页后,点击左边的“立即构建”链接开始构建项目。这里是手动触发的构建,当然还有许多其它触发构建的方式可以配置。

稍微看一下上面的bash脚本。它是通过docker-compose来设置测试环境的。在运行了单元测试后,如果没有问题,继续运行系统测试。系统测试也成功后,对镜像打标签,然后推送到镜像存储库中(这里没有实际推送上去)。

在web页面的“Console Output”链接下,可以看到构建过程中的日志输出,如下图:

通过Jenkins容器构建镜像(2)

可见,这里我们通过bash脚本完成了大多数的持续集成步骤。实际上,Jenkins提供了许多插件,可以用来配置整个持续集成的Pipeline。

 
标签: Hudson Linux命令
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

点击排行