参数部分没有

不要照抄,只供参考

需求:

CI利用confd+etcd生成配置文件

CI把git的COMMIT 传到openshift的buildconfigs

#!/bin/bash
echo
echo
echo "第一阶段:生成配置文件"
echo
echo
Output_Path=/data/html/nightly/$ENV_NAME/$Project_Name echo "项目名【$Project_Name】"
echo "发布的环境【$ENV_NAME】"
echo "发布的git分支【$GIT_BRANCH】 "
echo "发布的GIT COMMIT【$GIT_COMMIT】" /data/root/.jenkins/downtown_scripts/oc_confd_get_config_.sh $ENV_NAME $Project_Name $WORKSPACE $Output_Path echo "+++++++++配置文件生成完毕++++++++++" echo
echo
echo "第二阶段:开始更新build配置"
echo
echo echo "正在更新buildconfigs设置>>>>>>>>"
Output_Path_File=/data/html/nightly/$ENV_NAME/$Project_Name/oc_status/${Project_Name}.json
mkdir -p /data/html/nightly/$ENV_NAME/$Project_Name/oc_status
NAMESPACE=$ENV_NAME
NAME=$Project_Name #获取目前的状态
curl -k \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
$ENDPOINT/oapi/v1/namespaces/$NAMESPACE/buildconfigs/$NAME >/dev/null > $Output_Path_File #替换GIT COMMIT
REF_Value=`cat $Output_Path_File |jq -r '.spec | .source | .git | .ref'`
sed -i s/"$REF_Value"/"$GIT_COMMIT"/g $Output_Path_File
Build_Configs_Status=`cat $Output_Path_File` #更新到oc api curl -k \
-X PUT \
-d @- \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
$ENDPOINT/oapi/v1/namespaces/$NAMESPACE/buildconfigs/$NAME >/dev/null >& << EOF
$Build_Configs_Status
EOF
echo
echo
echo "+++++++更新后的buildconfigs配置+++++++++" curl -k \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
$ENDPOINT/oapi/v1/namespaces/$NAMESPACE/buildconfigs/$NAME >/dev/null echo "+++++++更新后的buildconfigs配置+++++++++"
echo
echo

附上/data/root/.jenkins/downtown_scripts/oc_confd_get_config_.sh

#!/bin/bash
ENV_NAME=$
Project_Name=$
WORKSPACE=$
Output_Path=$
Config_Templates_Path=$Output_Path/config-templates
Confd_Path=$Output_Path/confd echo "配置文件生成路径【$Output_Path】"
echo "jenkins工作空间路径【$WORKSPACE】"
#拷贝配置文件 rm -rf $Output_Path
mkdir -p $Output_Path
cd $WORKSPACE
cp -Rf * $Output_Path
ls $Output_Path #先结束掉该项目的confd进程
ps -ef | grep $Confd_Path | grep -v grep | awk '{ print "kill -9 " $2}' | bash echo "==============================="
echo "[confd] for $ENV_NAME-$Project_Name killed"
echo "===============================" #清理confd项目目录
rm -rf $Confd_Path
mkdir -p $Confd_Path/conf.d
mkdir -p $Confd_Path/templates
ls $Confd_Path ##复制配置文件到指定目录
find $Config_Templates_Path -type f -name "*.*" -exec cp -fr {} $Confd_Path/templates \; echo ========templates copied=====================
ls $Config_Templates_Path/*/*
echo ========templates copied===================== ##生成模式化文件format_standard.txt
##格式为:文件名 文件路径 ##清空format_standard.txt文件
echo "" > $Confd_Path/format_standard.txt ##提取Config_Templates_Path目录内的子目录作为变量,并提出所有文件名
Config_Templates_L2_List=`cd $Config_Templates_Path ; find $PWD | xargs ls -dl | grep -v "^d" | awk 'BEGIN{FS="/"} {print $(NF-1)"/"$NF}'` #i代表的是$Config_Templates_L2_List输出出来的所有文件的相对路径
echo ========config file need to be generate =====================
echo "${Config_Templates_L2_List}"
echo ========config file need to be generate ===================== cd $Confd_Path for i in $Config_Templates_L2_List
do
if [ -f $Output_Path/$i ];then
find $Output_Path/$i -type f -name "*.*" |awk 'BEGIN{FS="/"} {printf("%30s\t%s\n",$NF,$0)}' >> $Confd_Path/format_standard.txt
fi
done for i in $Config_Templates_L2_List
do
if [ -f $Output_Path/config/$i ];then
find $Output_Path/config/$i -type f -name "*.*" |awk 'BEGIN{FS="/"} {printf("%30s\t%s\n",$NF,$0)}' >> $Confd_Path/format_standard.txt
fi
done echo "################# format_standard.txt############"
cat $Confd_Path/format_standard.txt
echo "################# format_standard.txt############" ##遍历格式化文件并生成模板文件
cd $Confd_Path
cat format_standard.txt |awk 'NR>1' |while read F_CONFIG_NAME F_CONFIG_PATH
do
##生成模板文件
cat << EOF > conf.d/$F_CONFIG_NAME.toml
[template]
#模板文件,基于它进行修改
src = "$F_CONFIG_NAME"
#目标文件地址
dest = "$F_CONFIG_PATH"
#keys是在etcd上订阅消息的前缀
keys = [
"",
] #更新配置后的命令
changed_log_cmd = "echo $ENV_NAME-$Project_Name configuration changed `date` >> /tmp/confd_changed.log"
EOF
done #显示该项目的confd进程数
ps -ef | grep $Confd_Path | grep -v grep | wc -l export ETCDCTL_API=2
nohup /data/app/confd/bin/confd -config-file /data/app/confd/$ENV_NAME/confd.config -confdir $Confd_Path/ -username root -password Downtown2013 -basic-auth true > $Confd_Path/confd.log 2>&1 & sleep 5
#显示该项目的confd日志
echo "====confd_logs last 100 lines================="
tail -n 100 $Confd_Path/confd.log
echo "====confd_logs last 100 lines================="
##confd

jenkins openshift 持续集成的更多相关文章

  1. 【iOS】Jenkins Gitlab持续集成打包平台搭建

    Jenkins Gitlab持续集成打包平台搭建 SkySeraph July. 18th 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点: ...

  2. 使用jenkins构建持续集成平台

    jenkins +   Maven + svn/git + tomcat 的持续集成平台 项目管理流程: 需求分析----原型设计----开发代码----提交测试-----内部测试-----确认上线( ...

  3. 用MSBuild和Jenkins搭建持续集成环境(2)

    http://www.infoq.com/cn/articles/MSBuild-2   作者 Mustafa Saeed Haji Ali ,译者 李剑 发布于 2012年10月23日 | 注意:  ...

  4. jenkins jmeter持续集成批处理jmx脚本

    这篇文章介绍jenkis jmeter的持续集成,利用jenkins定时任务去批处理执行jmeter的jmx脚本文件,并且生成测试报告 1:jmeter的安装这里我就不在赘述了,如有问题可参考我的jm ...

  5. RF+Jenkins构建持续集成

    引入RF是为了能够快速的开展自动化验收测试,Jenkins而一种持续集成工具,用于监控持续重复的工作,持续的软件版本发布/测试项目,而通过RF+Jenkins可以有利的对RF构建的接口项目进行持续集成 ...

  6. Jenkins+Git 持续集成

    持续集成是必要的! 希望达到的效果是:开发同事签入代码后,对应的站点可以自动实现更新.目前还只在在内部服务器上实现开发环境中的站点更新,不涉及到线上的发布. 目前使用Jenkins实现这样的持续集成. ...

  7. 使用Jenkins进行持续集成ionic3项目

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.  网上大多数是关于.net web网站以及 ...

  8. 使用jenkins实现持续集成

    一.jenkins 介绍 它是一个自动化的周期性的集成测试过程,从检出代码.编译构建.运行测试.结果记录.测试统计等都是自动完成的,无需人工干预: 它需要有专门的集成服务器来执行集成构建: 它需要有代 ...

  9. jenkins+github持续集成中的坑

    1.前言 刚开始开发自己的独立博客的时候,每次发布都要手动打包,上传服务器,杀tomcat进程,重启,来回这么重复性工作,很快就有点不耐烦了.如果能自动化的东西,就绝不要手动了,所以自己搭建了个持续集 ...

随机推荐

  1. mysql的安装和配置

    1.mydql的安装 重装wind7系统之后,mysql软件自动卸载了.现在学习需要使用mysql,还是要安装mysql.我首先通过下载安装包的方式安装,按照教程,但是出现缺失.dll文件,我下载安装 ...

  2. js函数 eql,equal,equalp

    function eql(obj, other) { if(stringp(obj) && stringp(other) && obj === other) retur ...

  3. iTerm2中粘贴tab问题

    点过Remember 后,这个窗口就再也不弹出来了.可随后想修改配置,在preferences中又没有找到. 解决方案: 思路:/Users/${name}/Library/Preferences/c ...

  4. 如何把py文件打包成exe可执行文件

    如何把py文件打包成exe可执行文件 1.安装 pip install pyinstaller 或者 pip install -i https://pypi.douban.com/simple pyi ...

  5. svn checkout 指定目录(转)

    http://www.uqugu.com/blog/article/svn-checkout-specified-forder/ svn有时只想检出指定目录,对于其他的大文件目录则不想检出,如不想检出 ...

  6. iPhone XS 能否经受的起寒冬的考验

    我的知乎文章链接: https://zhuanlan.zhihu.com/p/51782644 华北地区近日寒风凛冽,温度骤降,已经进入真正的冬天了,最低温度可以达到零下10度,我们手里的iPhone ...

  7. Codeforces 677D - Vanya and Treasure - [DP+优先队列BFS]

    题目链接:http://codeforces.com/problemset/problem/677/D 题意: 有 $n \times m$ 的网格,每个网格上有一个棋子,棋子种类为 $t[i][j] ...

  8. Django:模型model和数据库mysql(二)

    上一篇把简单的模型与数据库的搭建写了一遍,但模型中有很多深入好用的写法补充一下. 同样的栗子,建立新的模型与数据库来写一写 1.依然是搭建环境 >>>django-admin sta ...

  9. 美团点评基于 Flink 的实时数仓建设实践

    https://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651749037&idx=1&sn=4a448647b3dae5 ...

  10. AndrewNG Deep learning课程笔记

    神经网络基础 Deep learning就是深层神经网络 神经网络的结构如下, 这是两层神经网络,输入层一般不算在内,分别是hidden layer和output layer hidden layer ...