- 目录
- 前言
-
一、配置仓库
- (一)配置私服仓库
-
二、创建项目
- (一)新建代码组
- (二)新建代码库
- (三)拉取代码
- (四)创建Maven项目
-
三、镜像文件
- (一)基础镜像
- (二)编写Dockerfile
-
四、构建部署
- (一)宿主机管理
- (二)创建流水线
-
五、验证测试
- (一)发布demo-domain
- (二)部署demo-service
- (三)访问demo-service
- 六、最后
受篇幅限制,本文包含后三节内容,前三节内容请看《基于云效使用Docker实现持续交付(上)》
前言
阿里云发布了最新[云效2020]产品。云效提供从“需求 ->开发->测试->发布->运维->运营”端到端的协同服务和研发工具,支持公共云、专有云和混合云多种部署形态,通过人工智能、自动化 技术的应用助力开发者提升研发效能,持续快速交付有效价值。
云效2020产品包含多个模块功能,例如项目协作、知识库、流水线、代码管理、测试环境、仓库管理等功能。本文主要介绍使用Docker进行Java项目构建部署,涉及仓库管理、代码管理、流水线等功能。
阅读文本前,您需要能够熟练使用Maven构建Java项目,并了解Docker相关的一些基础概念及命令。
提示:本文图片较多,建议在wifi环境下阅读,土豪随意~
四、构建部署
(一)宿主机管理
1.点击左上角菜单按钮,找到并点击进入流水线
2.点击主机组管理,并创建主机,选择阿里云ECS
3.点击新建服务授权,授予服务器访问权限
4.进行授权
5.点击同意授权
6.授权完成后,在弹出框中,选择授权的服务器,点击下一步
7.填写服务器名称并设置主机环境,点击保存
8.查看主机组管理,服务器配置成功
(二)创建流水线
1.点击全部流水线,并新建发布demo-domain
的流水线
2.选择Java,由于是发布demo-domain
到私服仓库,选择测试、构建,点击创建
3.添加代码源
4.编辑流水线,选中Java构建上传环节,删除构建物上传步骤,并配置Java构建
5.修改流水线名称,修改构建命令为mvn -X versions:set -DremoveSnapshot=true && mvn -Dmaven.test.skip=true clean deploy -s settings.xml
,如下所示,并保存
6.新增构建和部署demo-service
的流水线,由于demo-service
需要部署启动,这里选择镜像构建
7.同样添加代码源
8.编辑流水线,配置Java构建步骤,该步骤是将Java源代码打包成一个jar包
使用命令mvn -X versions:set -DremoveSnapshot=true && mvn -Dmaven.test.skip=true clean package -s settings.xml
9.编辑流水线,配置镜像构建并推送至阿里云镜像仓库,需要新建服务授权,确保能够正常访问阿里云容器镜像服务
10.同时,还需要在容器镜像服务中创建一个镜像仓库
11.继续配置镜像构建并推送至阿里云镜像仓库
12.配置Docker部署环境
部署脚本如下
export image=$(echo $image | base64 -d);
sh /zccoder/shell/deploy.sh stop demo-service demo-service 8081 $image;
sh /zccoder/shell/deploy.sh start demo-service demo-service 8081 $image;
13.在/zccoder/shell
目录下创建并编写deploy.sh脚本
#!/bin/bash
OG_NAME=$0
ACTION=$1
SERVICE_NAME=$2
SERVICE_LOG_NAME=$3
SERVICE_PORT=$4
DOCKER_URL=$5
usage() {
echo "Not Support this operation: "${ACTION}
echo "Usage: ${OG_NAME} {start|stop|restart} {SERVICE_NAME} {SERVICE_LOG_NAME} {SERVICE_PORT} {ENV_PROFILES}"
}
stop_application() {
echo 'stopping......'
CONTAINER=`docker ps -a |grep "${SERVICE_NAME}$" | awk '{print $1}'`
if [[ -n "${CONTAINER}" ]]
then
docker stop ${CONTAINER}
docker rm ${CONTAINER}
fi
# 删除镜像
APP_HOME=/www/service/${SERVICE_NAME}
if [[ -f "${APP_HOME}/docker_url" ]]
then
DOCKER_URL=`cat ${APP_HOME}/docker_url`
if [[ -n "${DOCKER_URL}" ]]
then
TAG_NAME=`echo ${DOCKER_URL##*:}`
fi
fi
if [[ -n "${TAG_NAME}" ]]
then
IMAGE=`docker images | grep ${SERVICE_NAME} | grep ${TAG_NAME} |awk '{print $3}'`
else
IMAGE=`docker images | grep ${SERVICE_NAME}|awk '{print $3}'`
fi
if [[ -n "${IMAGE}" ]]
then
docker rmi ${IMAGE}
fi
}
create_log_dir(){
#日志路径要真实存在
log_path="/zccoder/logs/"${SERVICE_LOG_NAME}
mkdir -p ${log_path}
}
start_application() {
echo '镜像版本:'${DOCKER_URL}
# 阿里云ECS机器
HOST_IP=$(ifconfig eth0 | grep "inet " | awk -F: '{print $0}' | awk '{print $2}')
# JAVA_OPTS=`eval cat /zccoder/shell/java-opts-${SERVICE_LOG_NAME}.conf`
docker run --cap-add=SYS_PTRACE \
-e HOST_IP=${HOST_IP} \
-v /zccoder/logs:/zccoder/logs -v ${log_path}:/log \
-p ${SERVICE_PORT}:${SERVICE_PORT} \
--name ${SERVICE_NAME} \
-d ${DOCKER_URL} \
java -Djava.security.egd=file:/dev/./urandom -jar ${SERVICE_NAME}.jar
CONTAINER_ID=`docker ps -a | grep -v "grep" | grep ${SERVICE_NAME} | awk -F: '{print $1}' | awk '{print $1}' | head -n 1`
if [[ -n "${CONTAINER_ID}" ]]
then
RESULT=`docker inspect -f '{{.State.Running}}' ${CONTAINER_ID}`
if [[ ${RESULT} = 'true' ]]
then
echo "部署成功"
exit
fi
fi
echo "部署失败"
}
start() {
create_log_dir
start_application
}
stop() {
stop_application
}
case "$ACTION" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
usage
;;
esac
五、验证测试
(一)发布demo-domain
1.点击demo-domain-deploy流水线
2.点击运行,弹出运行配置,再次点击运行
3.点击日志,可以查看构建日志
4.通过查看构建日志,显示构建成功
5.到Maven私服仓库验证,由于构建命令包含versions:set -DremoveSnapshot=true
,所以会发布到release仓库
(二)部署demo-service
1.点击demo-service-deploy流水线
2.点击运行,查看流水线运行成功
3.到ECS服务器查看Docker容器启动状态
(三)访问demo-service
六、最后
以上就是基于云效使用Docker实现持续交付的全部内容,感谢您花费宝贵的时间进行阅读,希望您有所收获。
欢迎关注我的公众号
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。