通过docker-compose和ansible,进行自动发版
2017-10-12 09:37
555 查看
发版应用机器多了,就偷个懒,简单做了个脚本通过docker实现同时发版
我准备一台服务器作为ansible控制台,将所有项目(下文脚本项目仅举例列举)所需的环境包准备好,通过脚本一键实现同一个项目所有服务器同时发版更新
主脚本如下:
#!/bin/bash
#Great by fanwanli04
function menu() {
cat <<END
1、casxx
2、txtissap
3、issap
4、xxxap
END
}
function chose() {
echo "please input the project name"
read name
case "$name" in
casxx | txtissap | issap)
cd project/"$name"
rm -rf tomcat.tar.gz
tar -zcvf tomcat.tar.gz tomcat
oldver=$(cat /opt/project/"$name"/id.id)
echo "old version is $oldver"
echo "please input a version"
read answer
docker build -t registry.xxx.xxx.com/"$name":"$answer" -f /opt/project/"$name"/Dockerfile /opt/project/"$name"
docker push registry.xxx.xxx.com/"$name":"$answer"
echo "$answer" > /opt/project/"$name"/id.id
;;
xxxap)
cd project/"$name" \\这个是如果有项目特殊不一样的时候单独设置,这里都是复制上面的,仅示例而已
rm -rf tomcat.tar.gz
tar -zcvf tomcat.tar.gz tomcat
echo "please input a version"
read answer
docker build -t registry.xxx.xxx.com/"$name":"$answer" -f /opt/project/"$name"/Dockerfile /opt/project/"$name"
docker push registry.xxx.xxx.com/"$name":"$answer"
;;
*)
echo "this project name is wrong"
exit;
esac
}
function implement() {
read -p "Which project to implement?" okanswer
/usr/bin/ansible "$okanswer" -a "docker-compose down"
/usr/bin/ansible "$okanswer" -a "docker rmi registry.xxx.xxx.com/$okanswer:$oldver"
/usr/bin/ansible "$okanswer" -a "docker pull registry.xxx.xxx.com/$okanswer:$answer"
sed -i "s/$okanswer:$oldver/$okanswer:$answer/g" /opt/project/"$okanswer"/docker-compose.yml
/usr/bin/ansible "$okanswer" -m copy -a "src=/opt/project/$okanswer/docker-compose.yml dest=/root/"
/usr/bin/ansible "$okanswer" -a "docker-compose up -d"
}
function main(){
menu
chose
menu
implement
}
main
在每个项目的目录中都有一个Dockerfile,示例如下
FROM registry.xxx.xxx.com/docker_centos7
LABEL "system"="casxx" "app"="AP"
MAINTAINER xxx <xxx@xxx.com>
USER root
ADD java.tar.gz /usr/local/
ADD tomcat.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/java/
ENV JAVA_BIN=/usr/local/java/bin
ENV CLASSPATH=/usr/local/java/lib
ENV PATH=$PATH:$JAVA_HOME/bin
VOLUME ["/usr/local/tomcat/logs/"]
CMD /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out
EXPOSE 8080
以及一个docker-co
4000
mpose.yml,示例如下
version: '2'
services:
casxx:
image: registry.xxx.xxx.com/casxx:1.1
ports:
- "8080:8080"
volumes:
- /home/logs/tomcat/:/usr/local/tomcat/logs/
dns:
- "10.100.31.1"
并包含 Dockerfile 所需要的tomcat java等包
我准备一台服务器作为ansible控制台,将所有项目(下文脚本项目仅举例列举)所需的环境包准备好,通过脚本一键实现同一个项目所有服务器同时发版更新
主脚本如下:
#!/bin/bash
#Great by fanwanli04
function menu() {
cat <<END
1、casxx
2、txtissap
3、issap
4、xxxap
END
}
function chose() {
echo "please input the project name"
read name
case "$name" in
casxx | txtissap | issap)
cd project/"$name"
rm -rf tomcat.tar.gz
tar -zcvf tomcat.tar.gz tomcat
oldver=$(cat /opt/project/"$name"/id.id)
echo "old version is $oldver"
echo "please input a version"
read answer
docker build -t registry.xxx.xxx.com/"$name":"$answer" -f /opt/project/"$name"/Dockerfile /opt/project/"$name"
docker push registry.xxx.xxx.com/"$name":"$answer"
echo "$answer" > /opt/project/"$name"/id.id
;;
xxxap)
cd project/"$name" \\这个是如果有项目特殊不一样的时候单独设置,这里都是复制上面的,仅示例而已
rm -rf tomcat.tar.gz
tar -zcvf tomcat.tar.gz tomcat
echo "please input a version"
read answer
docker build -t registry.xxx.xxx.com/"$name":"$answer" -f /opt/project/"$name"/Dockerfile /opt/project/"$name"
docker push registry.xxx.xxx.com/"$name":"$answer"
;;
*)
echo "this project name is wrong"
exit;
esac
}
function implement() {
read -p "Which project to implement?" okanswer
/usr/bin/ansible "$okanswer" -a "docker-compose down"
/usr/bin/ansible "$okanswer" -a "docker rmi registry.xxx.xxx.com/$okanswer:$oldver"
/usr/bin/ansible "$okanswer" -a "docker pull registry.xxx.xxx.com/$okanswer:$answer"
sed -i "s/$okanswer:$oldver/$okanswer:$answer/g" /opt/project/"$okanswer"/docker-compose.yml
/usr/bin/ansible "$okanswer" -m copy -a "src=/opt/project/$okanswer/docker-compose.yml dest=/root/"
/usr/bin/ansible "$okanswer" -a "docker-compose up -d"
}
function main(){
menu
chose
menu
implement
}
main
在每个项目的目录中都有一个Dockerfile,示例如下
FROM registry.xxx.xxx.com/docker_centos7
LABEL "system"="casxx" "app"="AP"
MAINTAINER xxx <xxx@xxx.com>
USER root
ADD java.tar.gz /usr/local/
ADD tomcat.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/java/
ENV JAVA_BIN=/usr/local/java/bin
ENV CLASSPATH=/usr/local/java/lib
ENV PATH=$PATH:$JAVA_HOME/bin
VOLUME ["/usr/local/tomcat/logs/"]
CMD /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out
EXPOSE 8080
以及一个docker-co
4000
mpose.yml,示例如下
version: '2'
services:
casxx:
image: registry.xxx.xxx.com/casxx:1.1
ports:
- "8080:8080"
volumes:
- /home/logs/tomcat/:/usr/local/tomcat/logs/
dns:
- "10.100.31.1"
并包含 Dockerfile 所需要的tomcat java等包
相关文章推荐
- 通过 docker-compose 进行快速原型设计
- 采用axis2c进行webservice发布的流程3-通过wsdl文件,自动生成C的服务端代码
- Linux通过Shell对文件自动进行远程拷贝备份
- 【自动部署】Ansible 怎么通过堡垒机/跳板机 访问目标机器
- 通过docker-compose构建ghost博客(二)
- Linux通过docker安装运行酷Q--用QQ骰子君进行跑团
- 通过主动学习的方法进行自动语料标注
- 通过gitlab的webhook进行项目的自动部署所遇问题总结
- linux通过pip安装docker-compose
- Docker如何通过link方式进行通信
- Docker 产品手册之 Docker Hub - 通过 GitHub 实现自动构建
- 通过pip安装docker-compose
- 使用Ansible进行项目的自动部署(Tomcat、Weblogic)
- 「谷歌大脑」提出通过对长序列进行摘要提取,AI可自动生成「维基百科」
- 通过FAI进行全自动安装
- 如何通过Docker 进行容器编排
- 通过docker和docker-compose实现eureka高可用
- 通过MSSQL把对文件进行修改重命名,并且自动增加流水号
- 通过主动学习的方法进行自动语料标注
- 在windows下使用cmd命令通过adb shell自动调用android模拟或真机的InstrumentRunner进行android 自动化测试