zoukankan      html  css  js  c++  java
  • ubuntu 16.04 jenkins pipline的实现 最终docker启动服务

    准备工作:两台虚拟机A:192.168.1.60  B:192.168.1.61  C:一个存放代码的代码库(github)
    A:jenkins  git  docker  openssh-server(ssh)
    B:docker  openssh-server(ssh)
    A主机jenkins用户的公钥放到github上,A主机jenkins用户可以免密码登陆B的普通用户

    ************************************************************************************************************
    先说思路,自己写的太乱了,有点看不下去了:
    建四个job,建一个pipline把四个job连起来。
    test1是通过python基础镜像打成里边包含服务的镜像并上传docker hub。
    test2是通过ssh进入目标服务器,把test1上传的镜像拉去下来。根据镜像生成容器,容器启动同时启动服务。
    test3,test4没用。
    *************************************************************************************************************

    jenkins首先要下载pipline的plugin,在系统管理-->管理插件-->可选插件   搜索Build Pipeline Plugin
    在jenkins上建一条pipline:
    先创建4个job:主界面-->新建-->然后选第一个(构建一个自由风格的软件项目)。重复四次,分别命名test1,test2,test3,test4

    在新建一个pipline:pipline插件下载完成后点击下图中的加号会出现 Build PipLine View这个选项,名字随便(testpipline1)创建。

     创建完成后会出现配置的页面:最重要的就是把Select Initial Job这个选项设置好,设成test1。其他的设置也能看懂随便设置。

    现在开始配置job。
    打开test1:点击test1-->点击配置(Configure)
    github插件安装完成后,在General中会有GitHub project,这个配置只是在外边的时候能直接连到github地址。对于配置没什么大用,但是还是设置上。https://github.com/badboyf/PyService
    源码管理的部分:选git,url如果配置错误下面会有红字。

    构建触发器:选择github上什么条件触发构建,因为自己的这个是内网,如果到时候换成服务器ip,当push的时候就会触发这个构建了。

    构建:
    在构建下选择excecute shell,这里执行的shell是服务器上的脚本,可以写绝对路径,如果是相对路径,现在的路径在jenkins的家目录,也就是/var/lib/jenkins

    构建后操作:这个意思是当test1构建完成后下一个job是test2。

    但是现在并不能触发。需要在test2的。需要在test2的<触发构建器> --> Build after other projects are built 填上test1。test2,test3,test4配置类似。功能很多,慢慢研究。

    现在开始看看脚本。
    与docker有关的在jenkins家目录建了一个docker目录。下面是docker目录里的东西。
    我写的是一个python项目(自己瞎看没多长时间,代码写的还特别糟)。首先用打了一个docker的python的flask的基础镜像。这步是手动完成的,需要自己先打出来。
    #Dockerfile

    FROM ubuntu:16.04
    
    ADD sources.list /etc/apt/sources.list
    
    RUN mkdir /workspace
    RUN mkdir ~/.pip
    
    ADD pip.conf ~/.pip/
    
    RUN apt-get update
    RUN apt-get install python-pip libmysqlclient-dev libmysqld-dev python-dev python-setuptools -y
    RUN pip install MySQL-python
    RUN pip install --upgrade pip
    RUN pip install SQLAlchemy
    RUN pip install Flask

    Dockerfile中包含的两个文件:
    sources.list用了阿里的源:

    # deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
    deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
    deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
    deb http://mirrors.aliyun.com/ubuntu/ xenial universe
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
    deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
    deb http://archive.canonical.com/ubuntu xenial partner
    deb-src http://archive.canonical.com/ubuntu xenial partner
    deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
    deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
    deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

    pip.conf 从国内下载

    [global]
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    [install]
    trusted-host=mirrors.aliyun.com

    这里遇到的问题就是我命名已经安装了virtualenv,但是放到上面就是启动不起来,只能在容器中重新下载一边全局的模块。
    在Dockerfile的目录执行

    $ docker build -t badboyf/python-flask .    #打出一个名为badboyf/python-flask的镜像

    这个镜像可以放在Docker hub上,基镜像吗,以后每次升级可定需要在这个基础上打镜像的。
    基础镜像有了,开始打项目的镜像
    #Dockerfile

    FROM badboyf/python-flask
    
    ADD PyService /workspace/PyService
    
    EXPOSE 5000

    jenkins上配置的执行的脚本放在了execute目录下。
    test1执行的脚本:build_image.sh

    #!/bin/bash
    
    cd ~/docker
    cp ~/workspace/PyService/ ./ -R
    docker build -t badboyf/py .
    docker login -u <username> -p <password>
    docker push badboyf/py
    docker rmi badboyf/py
    docker logout

    test2执行的脚本:run_docker.sh

    #!/bin/bash
    
    ssh fzk@192.168.1.61
    docker pull badboyf/py
    docker run -d -p 5000:5000 badboyf/py python/workspace/PyService/src/py_service/serv.py

    这里test3,test4没用,建了这两个只是为了测试一下pipline怎么用。

    还有,jenkins的主配置文件在家目录的config.xml。
    <au.com.centrumsystems.hudson.plugin.buildpipeline.BuildPipelineView plugin="build-pipeline-plugin@1.5.6">
    ..........
    </au.com.centrumsystems.hudson.plugin.buildpipeline.BuildPipelineView plugin="build-pipeline-plugin@1.5.6">
    这两个标签就是一个pipline。可以手动修改这个文件,重启一下jenkins,就会看到了自己手动写的。前提是得写对。自己建的job在jobs目录里。可以手动复制jobs里的一个项目,重命名为其他的。通过修改这几个文件,可以实现完全自动化的pipline流程,从什么也没有到自动生成job、pipline。想想就刺激。

  • 相关阅读:
    考拉兹猜想,100万以内的数
    给任意a、b、c三个数作为边盘都是否能构成三角形
    计数算法-对200万考生的成绩就行排序
    冒泡排序
    插入排序
    Echarts
    vue+tinymce
    java RestTemplate.postForObject请求传参
    java计算今天起后7天时间 +昨天八点+今天前7天的日期
    layui+echarts+动态数据
  • 原文地址:https://www.cnblogs.com/badboyf/p/6437244.html
Copyright © 2011-2022 走看看