zoukankan      html  css  js  c++  java
  • 从零开始使用Jenkins来构建Docker容器(Ubuntu 14.04)

    当开发更新了代码,提交到Gitlab上,然后由测试人员触发Jenkins,于是一个应用的新版本就被构建了。听起来貌似很简单,duang~duang~duang,我用了是这样,你们用了也是这样,看起来这个过程很自动化,其实这里面加了很多特技,根本就没有这样的头发,不对,根本就没有这样简单的方式,其环境搭建的过程十分繁琐,jenkins的上下文关系配置更是相当困难。今天我来介绍一种简单的新方法-使用Jenkins来构建一个apache容器。

    以下操作的目标:jenkins放置在宿主机内(Ubuntu14.04),apache容器放置在容器里,以后apache镜像一做修改,触发构建一个jenkins的job,宿主机会停掉原来的容器,生成一个新的容器。

    下面进入正式环节。

    1.安装Jenkins

    #wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | #sudo apt-key add -  
    #sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'  
    #sudo apt-get update  
    #sudo apt-get install jenkins  

    2.登陆http://IP:8080,进入jenkins,在http://IP:8080/pluginManager/available安装一些必要的插件SCM Sync Configuration Plugin ,GitHub plugin ,GIT plugin ,GIT client plugin ,安装结束后重启jenkins.

    3.重新登陆http://IP:8080,进入jenkins,新建一个名为apache的Item.

    •  配置如下面截图

     

      关联的github中一个apache演示的URL,地址为https://github.com/dockerdemo/apache.git

      shell脚本如下,该脚本会从github上(如果有本地gitlab操作同理)

    #!/bin/sh
    id
    set +e
    echo '>>> Get old container id'
    
    CID=$(docker ps | grep "apache" | awk '{print $1}')
    
    echo $CID
    
    /usr/local/bin/docker build -t apache /var/lib/jenkins/jobs/apache/workspace | tee /var/lib/jenkins/jobs/apache/workspace/Docker_build_result.log
    RESULT=$(cat /var/lib/jenkins/jobs/apache/workspace/Docker_build_result.log | tail -n 1)
    
    #if [["$RESULT" != *Successfully*]];then
    #  exit -1
    #fi
    
    echo '>>> Stopping old container'
    
    if [ "$CID" != "" ];then
      /usr/local/bin/docker stop $CID
    fi
    
    echo '>>> Restarting docker'
    sudo service docker.io restart
    sleep 5
      
    echo '>>> Starting new container'
    /usr/local/bin/docker run -p 3000:80 -d apache

    4.配置结束后,保存

    5.配置jenkins用户

      此时还不能立即构建,因为jenkins触发脚本并不是root用户,因此需要将jenkins免用户,并将用户加入到docker组,否则获取不到容器ID.

    root@iZ2893wjzgyZ:~# vim /etc/sudoers
    
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    jenkins ALL=(ALL:ALL) ALL
    
    jenkins@iZ2893wjzgyZ:~$ sudo usermod -G docker jenkins

    6.开始构建,在jenkins的build记录中可以看到输出,由于jenkins会自动把github上的文件给下载下来放在workspace目录中,因此,触发脚本后,直接开始构建apache镜像。

    7.现在查看一下镜像和容器,登陆apache网站验证

    容器生成的apache页面打开如下

  • 相关阅读:
    golang 数据结构 优先队列(堆)
    leetcode刷题笔记5210题 球会落何处
    leetcode刷题笔记5638题 吃苹果的最大数目
    leetcode刷题笔记5637题 判断字符串的两半是否相似
    剑指 Offer 28. 对称的二叉树
    剑指 Offer 27. 二叉树的镜像
    剑指 Offer 26. 树的子结构
    剑指 Offer 25. 合并两个排序的链表
    剑指 Offer 24. 反转链表
    剑指 Offer 22. 链表中倒数第k个节点
  • 原文地址:https://www.cnblogs.com/alexkn/p/4314143.html
Copyright © 2011-2022 走看看