两台机器:

一台机器安装gitlab: http://www.cnblogs.com/cjsblogs/p/8716932.html

另一台机器安装etcd+docker+jenkins

jenkins-docker: https://www.cnblogs.com/cjsblogs/p/8717602.html

防火墙端口启动;

firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --zone=public --add-port=2380/tcp --permanent
firewall-cmd --reload

  

安装etcd:

yum install etcd -y
systemctl start etcd

安装setuptools

wget --no-check-certificate https://pypi.python.org/packages/69/56/f0f52281b5175e3d9ca8623dadbc3b684e66350ea9e0006736194b265e99/setuptools-38.2.4.zip#md5=e8e05d4f8162c9341e1089c80f742f64
unzip setuptools-38.2.4.zip
cd setuptools-38.2.4
python setup.py install
cd ..

  

安装pip

wget --no-check-certificate https://github.com/pypa/pip/archive/1.5.5.tar.gz
tar -xvf 1.5.5.tar.gz #解压文件
cd pip-1.5.5/
python setup.py install

  

安装python  etcd模块:

pip install python-etcd

  

在git创建dev组,以及dev_etcd项目, 并且制作好的etcd脚本:

git目录如下:

etcdGet.py

#!/usr/bin/env python2.7
# -*- coding:utf-8 -*-
from __future__ import print_function import etcd
import sys
import os
import re
etcdCli=etcd.Client(host=sys.argv[1],port=2379)
f = open(sys.argv[3],'wb')
f.write(etcdCli.get('%s' % sys.argv[2]).value.encode('utf-8'))
f.close()

  

etcdPush.py

#!/usr/bin/env python2.7
# -*- coding:utf-8 -*-
from __future__ import print_function
import etcd
import sys
import time
import os
import re
reload (sys)
etcdCli=etcd.Client(host=sys.argv[1],port=2379)
def push(local_dir, top_path='/', with_local_path=False):
try:
for root, dirs, files in os.walk(local_dir):
if '.' not in dirs and '.' not in root:
for name in files:
file = os.path.join(root, name)
f = open(file)
content = f.read()
f.close()
if not with_local_path:
etcd_path = '/' + top_path.strip('/') + '/' + file[re.match(local_dir, file).end():].strip(
'/')
else:
etcd_path = '/' + top_path.strip('/') + '/' + file.strip('/')
print(etcd_path)
etcdCli.write(etcd_path, content)
except Exception as e:
etcd.EtcdException(e)
push(sys.argv[2],top_path=sys.argv[3])

  

etcdRead.py

#!/usr/bin/env python
import etcd
import sys
import time
import os
import re
reload (sys)
def getValue(host,port,location):
etcdCli=etcd.Client(host=host,port=port)
context=etcdCli.read(location).value
return context envValue=getValue(host=sys.argv[1],port=int(sys.argv[2]),location=sys.argv[3])
print(envValue)

 

getRegistryTagList.py

#!/usr/bin/env python2.7
import requests
import json
import sys def getRegistryTagList():
registry="http://harbor.xxx.com"
res=requests.get(registry+"/v2/")
assert res.status_code == 200 res=requests.get(registry+"/v2/_catalog?n=1000")
assert res.status_code == 200 repositories = res.json().get("repositories",[]) for repository in repositories:
res = requests.get(registry + "/v2/{}/tags/list".format(repository))
tags = res.json().get("tags",None)
if tags:
for tag in tags:
image = format(repository)
tag = format(tag)
if len(sys.argv) <2:
print (image+":"+tag)
else:
AppTargetName=sys.argv[1]
if image.endswith(AppTargetName):
print (image+":"+tag)
if __name__ == "__main__":
getRegistryTagList() 

此处需要修改对应的私有docker仓库地址

healthyCheck.py

#!/usr/bin/env python
import requests,sys,os def healthyCheck():
if len(sys.argv) < 2: sys.exit("need 1 argument")
url = sys.argv[1]
try:
code = requests.get(url,timeout=1).status_code
if code >= 200 and code < 400:
print "healthy check ok , status_code:%s" % code
else:
print "healthy check not ok, status_code:%s" % code
sys.exit("healthy check not ok")
except Exception,e:
print "e"
if __name__ == "__main__":
healthyCheck()

  

import.sh

/opt/dev_etcd/etcdPush.py 172.16.5.113 appCfgs /xxx.com/instances

此处建立etcd推送的配置文件服务器以及路径

以上所有的脚本全部完毕

接下来需要在jenkins上创建job结合git的webhooks推送应用配置文件

jenkins创建job:

截图处创建git的webhooks能用到

以上git clone直接提交用户名和密码拉取git代码, 其中我的密码带有@符号, git clone无法识别@符号, 需要将@转义为%40故账号需要特殊处理:

最后在git上创建webhooks

综上全部创建完毕, 在jenkins上点击job立即构建测试吧

jenkins+docker+git+etcd实现应用配置文件管理的更多相关文章

  1. 基于 Jenkins+Docker+Git 的CI流程初探

    在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要.目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部 ...

  2. 从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布

    一.前言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件.Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立的 Java ...

  3. Jenkins+Docker+Git+Registry

    从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布   笔者:@拿着保温瓶的年轻人 目录: 一.前言 二.发布流程 三.环境准备 四.部署思路梳理 五.三台机器上操作 ...

  4. Jenkins+Docker+Git+Harbor流水线打包

    Jenkins+Docker+Git+Harbor流水线打包 环境: CentOS Linux release 7.6.1810 (Core) 192.168.247.214 Jenkins+dock ...

  5. Jenkins+Docker+Git 自动化部署

    Jenkins+Docker+Git 自动化部署图文教程 https://blog.csdn.net/qq_38252039/article/details/89791247 前言: 通过几天的学习和 ...

  6. Docker 搭建 etcd 集群配置

    #关闭selinux.防火墙 systemctl stop firewalld.service systemctl disable firewalld.service firewall-cmd --s ...

  7. jenkins+docker+git+harbor构建及代码回滚(未完)

    目录 一.部署 环境工作流程介绍 部署harbor 一.部署 前提环境说明 192.168.111.3 该机器为git本地仓库,及git远程仓库(git用户创建),及Harbor镜像仓库 192.16 ...

  8. jenkins+docker持续集成实验

    在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署.交付(CD).本文基于Jenkins+Docker+Git实现 ...

  9. Jenkins 基于 Docker git JAVA CI/CD

    准备两台机器 192.168.31.200 centos7  docker harbor git 192.168.31.201 centos7  docker jenkins maven git Ha ...

随机推荐

  1. linux查看当前目录

    查看当前路径命令:pwd pwd命令能够显示当前所处的路径. 这个命令比较简单,如果有时在操作过程中忘记了当前的路径,则可以通过此命令来查看路径,其执行方式为:

  2. Leetcode题目70.爬楼梯(动态规划+递归-简单)

    题目描述: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 ...

  3. Flume-Taildir Source 监控目录下多个文件的追加

    Exec source 适用于监控一个实时追加的文件,但不能保证数据不丢失:Spooldir Source 能够保证数据不丢失,且能够实现断点续传,但延迟较高,不能实时监控:而 Taildir Sou ...

  4. redis 的使用 及 配置文件解读

    redis-server命令 redis-server /usr/local/redis/conf/redis.conf #加配置文件绝对路径启动redis服务 redis-server /usr/l ...

  5. Eclipse取消汉化以及设置语言的方法

    Eclipse取消汉化以及设置语言的方法 转 https://jingyan.baidu.com/article/11c17a2c2c1939f446e39d13.html Eclipse下载以后都是 ...

  6. vue 组件属性props,特性驼峰命名,连接线使用

    网址:https://www.cnblogs.com/alasq/p/6363160.html 总结如下:vue的组件的props属性支持驼峰命名,不支持连接线命名,使用是用连接线进行赋值或者数据绑定 ...

  7. [Mac]安装pyspider的大坑

    1.切记这是一个大坑. 2.我在用mac电脑安装pyspider的时候,原以为pip install pyspider 就万事大吉,合家欢乐了,but the question 比较多. 第一个问题: ...

  8. Linux下通过crontab命令来实现定时任务

    一.crond的介绍 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cr ...

  9. Linux系统管理_主题02 :管好文件(1)_2.4 链接文件_ln

    在 Linux 中,链接有两种:符号链接(symbolic link)和硬链接(hard link).  删除一个符号链接不会影响到这个符号链接指向的目标文件或目 录:  反过来,删除.移动或者重 ...

  10. Altera DDR2控制器学习笔记

    Altera DDR2控制器使用IP的方式实现,一般很少自己写控制器代码. ddr22 ddr22_inst ( .aux_full_rate_clk (mem_aux_full_rate_clk), ...