准备工作:两台虚拟机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 

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 : 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。想想就刺激。

ubuntu 16.04 jenkins pipline的实现 最终docker启动服务的更多相关文章

  1. Ubuntu 16.04下配置 Nginx 与 Node.js 以及服务的部署

    第一步:安装nginx sudo apt-get update sudo apt-get install nginx 如果遇到依赖问题,尝试执行sudo apt-get -f install命令 第二 ...

  2. Ubuntu 16.04 LTS 64位系统 安装Docker

    本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安装最新的Docker CE(Community Edition),即Docker社区版,是开发人员和小型团队 ...

  3. 菜鸟在ubuntu 16.04下制作am335x的SD卡启动盘反思

    以前只在消费电子平台android和rtos上做软件,每次都是公司的环境现成的,根本不用去想启动加载那部分 的事情,最近在做一个工控机的项目时,接触到了TI的arm335x系列的平台,才发现在嵌入式的 ...

  4. 解决Ubuntu 16.04 上Android Studio2.3上面运行APP时提示DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs的问题

    本人工作环境:Ubuntu 16.04 LTS + Android Studio 2.3 AVD启动之后,运行APP,报错提示: DELETE_FAILED_INTERNAL_ERROR Error ...

  5. Ubuntu 16.04安装docker(2018年最新)

    参考https://blog.csdn.net/bingzhongdehuoyan/article/details/79411479 http://www.cnblogs.com/lighten/p/ ...

  6. ubuntu 16.04 LTS安装jenkins服务器

    官方网站:https://jenkins.io/ 这里我们的系统是Ubuntu 16.04,所以选择Ubuntu的版本,另外,为什么选择2.60.3,而不是新的2.77?因为2.60.3是LTS版本, ...

  7. ubuntu 16.04安装Jenkins

    快速安装: sudo wget -q -O - http://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add - sudo ...

  8. 将Ubuntu 15.10升级到Ubuntu 16.04

    Ubuntu 16.04 LTS 代号为 Xenial Xerus,其最终版将于 2016 年 4 月 21 日正式发布,Ubuntu16.04 将是非常受欢迎的开源操作系统 Ubuntu 的第 6 ...

  9. Ubuntu 16.04配置OpenCV 3.1.0 for Java

    我们都知道,OpenCV是基于C++的开源计算机视觉库,但是从2.4.4版本开始提供了Java绑定,也就是说,我们也可以使用Java来开发基于OpenCV的计算机视觉应用.目前,最新的版本是3.1.0 ...

随机推荐

  1. 【BIEE】BI Publisher下拉菜单设置

    在使用BIEE的过程中,通常会有需要根据下拉菜单所选内容进行数据展示,如下图所示: 设置参数 进入数据模型编辑界面→参数 新增参数,P_DATADATE为示例参数 参数赋值 同时点击"值列表 ...

  2. MySQL 查询 数据库有多少表 表名是哪些

    1.查询sjcenter数据库里开头为sj_demo和sj_onlyinv的所有表的总条数 select sum(table_rows) from (select table_name,table_r ...

  3. 在iOS中实现sticky header

    经常在网页中看到这样一种效果,当页面滚动一段距离后,页面中的某个部分固定在一个区域(通常是头部导航),这种效果一般称为Sticky Header,如下图所示: 上述操作在Android系统中非常好实现 ...

  4. instantclient_11_2 连接oracle数据

    (1)首先你要先下载instantclient (解压如下),修改你     instantclient/network/admin/tnsnames.ora 文件,将你oracle的服务器地址写上 ...

  5. Java中HashTable和HashMap的区别

    在Java中,HashTable和HashMap都是哈希表,那么它们有什么区别呢?   1.它们所继承的类不一样. HashTable和HashMap都实现了Map接口,但是它们所继承的类时不同的.H ...

  6. PMD:Java源代码扫描器

    PMD是一个开源代码分析器.可以查找常见编程缺陷,比如未使用的变量.空catch代码块.不必要的对象创建等.支持Java.JavaScript.PLSQL.Apache Velocity.XML.XS ...

  7. 并行编程(2) - sum.msic.Unsafe 二

    整理了几个曾经从网上记录sum.msic.Unsafe类的演示样例.供大家參考: package com.fish.unsafe; import java.io.File; import java.i ...

  8. python并发编程之多进程、多线程、异步和协程

    一.多线程 多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行.即使是单CPU的计算机,也可以通过不停地在不同线程的指令间切换,从而造成多线程同时运行 ...

  9. CentOS Linux解决网卡报错Bringing up interface eth0.....

    问题描述:在VMware里克隆出来的CentOS Linux,开机执行命令:ifconfig...没有看到eth0网卡.然后重启网卡又报以下错误:Bringing up interface eth0: ...

  10. JS 创建对象(常见的几种方法)

    贴个代码先: function O(user,pwd){ //use constructor this.user=user; this.pwd=pwd; this.get=get; return th ...