• jenkins+docker 持续构建非docker in docker


    工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果

    本文采用jenkins docker svn maven作为相关工具,项目spring boot框架

    使用 个软件版本 

    jenkins Jenkins ver. 2.90

    docker 17.10-ce

    svn 1.6

    maven 3.5

    spring boot 1.5.6

    centos7

    实现目标:当我们迁入代码时自动升级到测试服务器,如下图

    第一步 重新构建自己的jenkins镜像

    构建我们自己的jenkins,jenkins 我们在docker容器中运行,但是 我们还要用jenkins来构建docker镜像这是就需要 jenkins容器中可以执行docker命令,所以我们需要构建自己的jenkins镜像

    这里借鉴 大桥下的蜗牛 的博客 同时也向大家推荐一下 https://blog.lab99.org/post/docker-2016-07-14-faq.html#ru-he-zai-docker-rong-qi-nei-shi-yong-docker-ming-ling-bi-ru-zai-jenkins-rong-qi-zhong

    更详细的 请大家浏览上面的网址查看。

    我并没有用上面的Dockerfile来构建jenkins镜像因为上面使用的jenkins版本有点老不过依然能用下面不上我自己的 Dockerfile

    FROM jenkinsci/jenkins:2.90-alpine
    # 下载安装Docker CLI
    USER root
    RUN curl -O https://get.docker.com/builds/Linux/x86_64/docker-latest.tgz 
        && tar zxvf docker-latest.tgz 
        && cp docker/docker /usr/local/bin/ 
        && rm -rf docker docker-latest.tgz
    # 将 `jenkins` 用户的组 ID 改为宿主 `docker` 组的组ID,从而具有执行 `docker` 命令的权限。
    ARG DOCKER_GID=999
    USER jenkins:${DOCKER_GID}

    然后 docker build -t myjenkins:0.0.1 .  进行构建

    运行

    docker run --name jenkins 
        -d 
        -p 8081:8080 
        -v /var/run/docker.sock:/var/run/docker.sock 
        myjenkins:0.0.1

    然后就等待容器起来之后打开界面这样打镜像有一个问题(1、很难在线/离线安装jdk除非在构建镜像是就进行安装实际上jenkins基础镜像有jdk环境 2、不知道为什么 不能再挂载volume)

    起来之后我们会看到 初始化安装插件等等 这里就不截图展示了 

    第二步 安装jenkins插件

    系统管理->管理插件->可选插件

    安装相关maven插件

    同样安装docker相关插件,安装完后如下图

    上面的插件 有很多都是开始的时候安装的。

    第三步 设置docker远程访问

    本人使用的是centos7操作系统

    首先打开docker安装文件路径如下

    /usr/lib/systemd/system

    修改 docker.service文件

    ExecStart=/usr/bin/docker --tls=false -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

    然后刷新配置文件重启docker

    sudo systemctl daemon-reload
    sudo systemctl restart docker

    这样docker就会监听2375端口我们就可以对他进行远程操作

    docker -H IP:2375 ps

    执行docker命令时指定IP和端口号

    第四部 配置我们的jenkins

    系统管理->系统设置

    选择 svn使用版本

    设置Docker builder 地址这里一定要主要 是tcp协议不是http,填写完一定要测试一下链接确定是否联通

    然后进行全局工具配置

    系统管理->全局工具配置

    进行maven配置 其中jdk在jenkins中已经存在jdk环境所以不需要设置

     选择完后点击保存

    第五部 创建item

     首先配置svn

    然后在设置构建步骤

    这里的基本思想是 首先maven将工程达成jar包,然后用Dockerfile文件生成docker镜像然后在上传到私有仓库再然后远程执行部署和更新命令

    首先设置maven构建

    然后设置镜像构建

    选择完Execute Docker command 之后在选择 Create/build image

    这里说明一下

    最上面选择 只有构建成功才进行下一步操作

    然后在进行选择进行镜像推送

    最后我们远程执行docker命令进行运行创建容器

    $WORKSPACE/src/docker

    上面的路径是java工程的路径Dockerfile文件在上面的路径在工程中写好另外我们工程生成的java包也是需要生成输出到这个目录的

    $BUILD_NUMBER  这个全局变量是自增的每次构建都会+1可以用它来标记版本

    到这里我们的jenkins基本上已经设置完成可以保存进行应用构建执行了。

    最后 我们看下我们的项目结构

    再附上本人java工程的Dockerfile文件

    FROM java:8
    VOLUME /tmp
    ADD testdemo-0.0.5.jar app.jar
    RUN bash -c 'touch /app.jar'
    EXPOSE 10005
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

    本文还涉及很多其他知识比如私有仓库的搭建Spring boot框架等知识

    上面忘记了 如果要持续构建的话 

    需要设置一下

    每5分钟构建一次这样就可以 我们编辑完代码 上传svn就会马上发布到测试版

    解放Control+c Control+v操作

  • 相关阅读:
    使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?
    null和undefined的区别?
    JS中 [] == ![]结果为true,而 {} == !{}却为false
    kaptcha验证码使用
    Java Web应用中获取用户请求相关信息,如:IP地址、操作系统、浏览器等信息
    springboot注解
    算法思想
    数据结构
    springboot设置接口超时
    mybatis动态sql
  • 原文地址:https://www.cnblogs.com/zhyg/p/7845612.html
Copyright © 2020-2023  润新知