最近把部分服务器换成了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