参考
docker + gitlab + jenkins 自动部署及回滚
构建
构建策略
最多保存30天,最大保存10个
构建参数
名称 | 默认值(例子) | 描述 |
---|---|---|
DOCKER_IMAGE_TAG | dev | docker镜像tag,根据环境变动 |
DOCKER_PROJECT | 填你自己的镜像仓库 | docker镜像仓库项目信息 |
DOCKER_USERNAME | 填你自己的仓库用户名 | docker仓库用户名 |
DOCKER_PASSWORD | 填你自己的仓库密码 | docker仓库密码 |
DOCKER_REPOSITORY_PATH | 填你自己的仓库地址 | docker仓库地址 |
源码管理
注意选择对应的分支
触发器
如果需要每天定时深夜执行(代码有更新才会触发)
构建环境
构建前删除工作空间
构建
后端maven构建
执行命令
clean
install -Pdev -Dmaven.test.skip=true
前端node.js构建
执行命令
yarn config set registry https://registry.npm.taobao.org/
yarn install
yarn generate
执行脚本替换UI端口和网关地址
#替换UI端口
sed -i 's/30002/18828/' default.conf
#替换网关地址
#sed -i 's/sc-gateway/1.2.3.4/' default.conf
执行shell
构建服务器执行脚本
#!/bin/sh -l
# 进入目录
cd sc-register
# 设置镜像名称
CONTAINER_NAME="sc-register-jenkins"
# 设置镜像tag
GIT_TAG=${DOCKER_IMAGE_TAG}
# 设置仓库地址
REPOSITORY_PATH=${DOCKER_REPOSITORY_PATH}
# 设置仓库用户名
USERNAME=${DOCKER_USERNAME}
# 设置仓库密码
PASSWORD=${DOCKER_PASSWORD}
# 设置项目名
PROJECT=${DOCKER_PROJECT}
# 设置镜像名
IMAGES_NAME=${REPOSITORY_PATH}/${PROJECT}/${CONTAINER_NAME}:${GIT_TAG}
# 构建Docker镜像
echo "start build Dockerfile"
docker build -t $IMAGES_NAME -f Dockerfile .
echo "end build Dockerfile"
# 推送Docker镜像
echo "start login"
docker login --username=${USERNAME} --password=${PASSWORD} ${REPOSITORY_PATH}
echo "end login"
echo "start push"
docker push $IMAGES_NAME
echo "end push"
#删除本地镜像
echo "start rmi"
docker rmi $IMAGES_NAME
echo "end rmi"
# 生成部署服务器执行脚本
echo "start touch pull"
rm -f ${CONTAINER_NAME}-pull.sh && touch ${CONTAINER_NAME}-pull.sh && echo -e \
"docker login --username=$USERNAME --password=$PASSWORD $REPOSITORY_PATH\n"\
"docker kill $CONTAINER_NAME\n"\
"docker rm $CONTAINER_NAME\n"\
"docker pull $IMAGES_NAME\n"\
"docker run --name $CONTAINER_NAME -e JAVA_OPTS=\"-DMYSQL_HOST=数据库ip -DMYSQL_PORT=3306 -DMYSQL_DB=base_nacos_test -DMYSQL_USER=root -DMYSQL_PWD=数据库密码 -Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom\" --restart=always --net=host -d $IMAGES_NAME" >> ${CONTAINER_NAME}-pull.sh
echo "end touch pull"
生成远端部署服务器执行脚本
# 生成部署服务器执行脚本
echo "start touch pull"
rm -f ${CONTAINER_NAME}-pull.sh && touch ${CONTAINER_NAME}-pull.sh && echo -e \
"docker login --username=$USERNAME --password=$PASSWORD $REPOSITORY_PATH\n"\
"docker kill $CONTAINER_NAME\n"\
"docker rm $CONTAINER_NAME\n"\
"docker pull $IMAGES_NAME\n"\
"docker run --name $CONTAINER_NAME -e JAVA_OPTS=\"-DMYSQL_HOST=数据库ip -DMYSQL_PORT=13306 -DMYSQL_DB=base_nacos_test -DMYSQL_USER=root -DMYSQL_PWD=数据库密码 -Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom\" --restart=always --net=host -d $IMAGES_NAME" >> ${CONTAINER_NAME}-pull.sh
echo "end touch pull"
部署
构建后执行shell
- SSH登录部署服务器
- 执行脚本上传到对应目录
- 部署服务器在对应目录执行脚本
部署服务器目录
在 /home/sc/workspaces/cicd/allProd/
[uat]$ cd /home/sc/workspaces/cicd/allProd/
[uat]$ ll
-rwxrwxr-x 1 uat uat 594 Mar 14 10:08 sc-register-jenkins-pull.sh
脚本内容
# 登录docker镜像仓库
docker login --username=仓库名称 --password=仓库密码 仓库地址
# 杀死旧容器进程
docker kill 容器名
# 删除旧容器
docker rm 容器名
# 拉取新容器
docker pull 镜像名
# 运行新容器
docker run --name sc-register-jenkins -e JAVA_OPTS="-DMYSQL_HOST=数据库ip -DMYSQL_PORT=3306 -DMYSQL_DB=base_nacos_test -DMYSQL_USER=root -DMYSQL_PWD=数据库密码 -Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom" --restart=always -d 镜像名
Docker运行参数
名称 | 默认值(例子) | 描述 |
---|---|---|
restart | always | docker 重启时镜像也重启 |
环境变量
名称 | 默认值(例子) | 描述 |
---|---|---|
JAVA_OPTS | -DMYSQL_HOST=数据库ip -DMYSQL_PORT=3306 -DMYSQL_DB=base_nacos_test -DMYSQL_USER=root -DMYSQL_PWD=数据库密码 -Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom | 配置数据量连接和JVM参数 |
执行命令
sudo chmod 775 /home/sc/workspaces/cicd/allProd/sc-register-jenkins-pull.sh &&
sudo nohup sh /home/sc/workspaces/cicd/allProd/sc-register-jenkins-pull.sh > /dev/null 2>&1 &