最近需要用到docker来搭建镜像,并使用Jenkinsfile实现流水线的部署,研究后在此做个简单记录。
自动化部署的实现思路
对于运维人员来讲,怎样去实现项目的自动化部署应该能运用多种方法,但对于没有接触过运维或者没有了解过jenkins的同学而言,能有一种实现的思路莫过于久旱逢甘霖了,或许以下的策略有一定帮助。
- build docker镜像-指定ant/maven/jdk版本,安装所需软件等
- 将docker镜像发布到私有库
- jenkins中配置打包的docker镜像为容器模板
- Jenkinsfile语句中container调用此容器
- 打包ant/maven所依赖的子项目到宿主机指定的挂载路径
- 拉取所需的其他工程代码,执行ant/maven构建,将war包copy到宿主机指定的挂载路径
- 将挂载路径下的war包部署到服务器
- jenkins定时执行Jenkinsfile, 实现自动化构建
镜像示例
如下为一个简单的镜像示例:
# base image
FROM openjdk:7-alpine
# MAINTAINER
MAINTAINER tang
RUN mkdir -p /opt/dev
ADD ant.tar.gz /opt/dev
ENV ANT_HOME /opt/dev/ant
ENV PATH $ANT_HOME/bin:$PATH
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk --update add git
VOLUME /opt/dev
CMD ["sh","-c","tail -f /etc/alpine-release"]
注释:
VOLUME挂载是为了让宿主机能访问定制化的ant打包插件
CMD 'tail -f'是为了让容器不断执行,防止其启动后被终止
镜像操作指令
打包镜像并推送到仓库
docker build -t ant:1.0 .
docker login hub.docker.com
docker push ant:1.0
交互模式运行容器(alpine跟参数sh,其余系统镜像使用/bin/bash)
docker run -it ant:1.0 sh
挂载宿主机路径到容器(冒号前后路径为宿主机目录:容器目录)
docker run -it -v /tmp:/tmp ant:1.0 sh
运行容器直接退出
docker run -d ant:1.0
进入容器
docker exec -it 59f057ae1090 sh
停止容器
docker stop 59f057ae1090