最近把部分服务器换成了Linux系统,手动发布比Windows系统繁琐很多,于是使用了Jenkins配置成自动化发布
系统:CentOS 7.x
docker仓库:阿里云
.NetCore
#!/bin/bash
# 服务名称
SERVER_NAME=apilinux
# 镜像名称
TAG_NAME=registry.cn-hangzhou.aliyuncs.com/xxx/api.linux
# 阿里云Docker仓库账号
USER_NAME=xxx@aliyun.com
# 阿里云Docker仓库账号Push域名
PUSH_DOMAIN=registry.cn-hangzhou.aliyuncs.com
# 文件路径(需要到项目的上级目录)
FILE_URL=/var/lib/jenkins/workspace/API.Linux/trunk/
# 获取容器id
CID=$(sudo docker ps | grep "${TAG_NAME}" | awk '{print $1}')
# 获取镜像id
IID=$(sudo docker images | grep "${TAG_NAME}" | awk '{print $3}')
# 构建docker镜像
function build(){
if [ -n "$IID" ]; then
# 存在镜像
# 停止容器
sudo docker stop $CID
# 删除容器
sudo docker rm $CID
# 删除镜像
sudo docker rmi ${TAG_NAME}
# 切换文件目录
cd ${FILE_URL}
# 构建镜像
sudo docker build -t ${TAG_NAME} -f ./API.Linux/Dockerfile .
else
# 切换文件目录
cd ${FILE_URL}
# 不存在镜像,开始构建镜像
sudo docker build -t ${TAG_NAME} -f ./API.Linux/Dockerfile .
fi
}
# Push到阿里云镜像服务
function push(){
build
sudo docker tag ${SERVER_NAME} ${TAG_NAME}
sudo docker login --username=${USER_NAME} -p 密码 ${PUSH_DOMAIN}
sudo docker push ${TAG_NAME}
}
# 运行docker容器
function run(){
build
docker login --username=${USER_NAME} -p 密码 ${PUSH_DOMAIN}
docker pull ${TAG_NAME}:latest
docker run --restart=always --name=${SERVER_NAME} -p 5000:5000 -d ${TAG_NAME}
# 删除中间镜像 docker image prune -f
docker image prune -f
}
#入口
run
问题与解决:
-- 当前登陆用户访问不了/var/run/docker/containerd/docker-containerd.sock
-- 需要把当前用户添加到docker的组里面
sudo usermod -a -G docker $USER
-- 给jenkins用户添加 sudo 免密权限
visudo
jenkins ALL=(ALL) NOPASSWD:ALL
-- 然后重启
docker: service docker restart