test示例:

docker run --rm   -p 8200:8200  -v  ~/seacode/:/opt/    python:3.10.17-slim  /
/bin/bash -c "pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=1000 --no-cache-dir -r /opt/requirements.txt &&cd opt && python /opt/seaApp.py"

 

 

pd:

docker run -itd  --restart=unless-stopped  -p 8200:8200  -v  ~/seacode/:/opt/    python:3.10.17-slim  /
/bin/bash -c "pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=1000 --no-cache-dir -r /opt/requirements.txt &&cd opt && python /opt/seaApp.py"

 

 

jenkins 示例: 

IS_ADD_IMPORT  =true  表示需要重新安装依赖
set -e
date_tag=`date +%Y%m%d_%H%M%s`
Local_DIR=`pwd`
Dest_DIR=/opt/jenkins_project/${date_tag}
mkdir -v ${Dest_DIR}

SERVICE_NAME=ACCT-REPORT-SERVICE-DEV
echo ${SERVICE_NAME}
cp -r ${Local_DIR}/*  ${Dest_DIR}
# 打包,不包含目录
tar -czf ${SERVICE_NAME}.tar.gz -C ${Dest_DIR} .

echo "SERVICE_NAME=${SERVICE_NAME}" >> ${Local_DIR}/imageName
echo "IS_ADD_IMPORT=${IS_ADD_IMPORT}" >> ${Local_DIR}/imageName
rm -rf ${Dest_DIR}

 

 

image

 

 

 

 

 

 

!!!!!!!!!!!!   系统生成的文件夹   __pycache__  是root 用户组的,当前用户没有权限删除, 最终方案, 不删除, 直接覆盖有效文件

 

 

 

 

当前最优方案 (解决二次发布,之前的py文件删除权限问题)  如果存在容器,直接再容器中删除(容器有权限)

#!/bin/bash
set -e

# 调试信息
echo "当前目录: $(pwd)"
echo "SERVICE_NAME: ${SERVICE_NAME}"
echo "IS_ADD_IMPORT: ${IS_ADD_IMPORT}"

# 检查必要变量
if [ -z "${SERVICE_NAME}" ]; then
    echo "错误: SERVICE_NAME 变量未设置"
    exit 1
fi

# 创建目录
mkdir -p "${SERVICE_NAME}"

####### prepare data ############

# 检查压缩包是否存在
if [ ! -f "${SERVICE_NAME}.tar.gz" ]; then
    echo "错误: ${SERVICE_NAME}.tar.gz 文件不存在"
    exit 1
fi

# 删除容器内的文件(如果容器存在)
if docker ps -a --format '{{.Names}}' | grep -q "^${SERVICE_NAME}$"; then
    if docker inspect -f '{{.State.Status}}' "${SERVICE_NAME}" | grep -q "running"; then
        echo "删除容器内旧文件..."
        docker exec "${SERVICE_NAME}" rm -rf /opt/* || echo "警告: 删除容器内文件失败"
    fi
fi

# 移动并解压文件
mv "${SERVICE_NAME}.tar.gz" "${SERVICE_NAME}/"
cd "${SERVICE_NAME}"
tar -zxf "${SERVICE_NAME}.tar.gz"

###### 如果不需要下载依赖(时间比较久),到这里直接重启容器 ######
if [ "${IS_ADD_IMPORT}" = "0" ]; then
    echo "没有新添加依赖,更新代码,重启容器"
    
    # 检查容器是否存在且运行
    if docker ps --format '{{.Names}}' | grep -q "^${SERVICE_NAME}$"; then
        docker restart "${SERVICE_NAME}"
        echo "容器重启完成"
    else
        echo "错误: 容器 ${SERVICE_NAME} 不存在或未运行"
        exit 1
    fi
    
else
    echo "新添加依赖,需要下载依赖,重新构建容器"
    
    ######## run docker #####
    # stop 避免无法修改文件,被占用
    echo "Stop old container if exist"
    docker stop "${SERVICE_NAME}" 2>/dev/null || true
    sleep 3
    docker rm "${SERVICE_NAME}" 2>/dev/null || true
    sleep 3
    
    echo "Download the latest image"
    # docker pull ${IMAGE}  # 如果有镜像需要拉取,取消注释
    
    echo "Start create container"
    ######## 这里需要修改 主类 or --net=host -p80:81 #########
    #### cd /opt 需要到主类下,避免导入依赖错误
    
    # 获取当前用户ID和组ID
    CURRENT_UID=$(id -u)
    CURRENT_GID=$(id -g)
    LOCAL_DIR=$(pwd)
    
    # 创建容器
    docker run -itd \
        --privileged \
        --restart=unless-stopped \
        -p 7857:7857 \
        --name="${SERVICE_NAME}" \
        -v "${HOME}/${SERVICE_NAME}/:/opt/" \
        -e "AP_ENV=DEV" \
        -e "CONFIG_SERVERS=http://10.180.3.148:8090" \
        python:3.11-slim-bullseye \
        /bin/bash -c "\
            apt-get update && \
            apt-get install -y libcairo2-dev libpango1.0-0 && \
            pip install --default-timeout=1000 --no-cache-dir -r /opt/requirements.txt && \
            cd /opt/code && \
            python /opt/code/ReportApp.py"
    
    echo "End create container"
fi

# 返回原目录
cd ..

 

 

 

 

 

 

 

 

ssh shell:   (方案1)

set -e
echo $SERVICE_NAME
echo  ${IS_ADD_IMPORT}
mkdir  -p  $SERVICE_NAME
####### prepare data ############  (mkdir 可能有权限问题)

# 删除之前的文件(使用docker 删除,避免权限问题)
docker exec ${SERVICE_NAME}   rm -rf /opt/*
mv  ${SERVICE_NAME}.tar.gz   ${SERVICE_NAME}
cd  ${SERVICE_NAME}
tar -zxf  ${SERVICE_NAME}.tar.gz

######如果不需要下载依赖(时间比较久),到这里直接重启容器######
if [ "${IS_ADD_IMPORT}" = "0" ]; then
    echo "没有新添加依赖,更新代码,重启容器"
    docker restart ${SERVICE_NAME}
else
    echo "新添加依赖,需要下载依赖,重新构建容器"
    ######## run docker #####
    # stop  避免无法修改文件,被占用
    echo "Stop old container if exist"
   docker stop $SERVICE_NAME || true
   sleep 3
   docker rm $SERVICE_NAME || true
   sleep 3
   echo "Download the latest image"
   #docker pull ${IMAGE}
   echo "Start create container"
   ########  这里需要修改 主类     or   --net=host   -p80:81 #########
   #### cd  /opt  需要到主类下,避免导入依赖错误
CURRENT_UID=$(id -u)
CURRENT_GID=$(id -g)
Local_DIR=`pwd`
docker run -itd --privileged    --restart=unless-stopped    -p7857:7857    --name=${SERVICE_NAME}    -v ~/${SERVICE_NAME}/:/opt/  -e  'AP_ENV=DEV'  -e 'CONFIG_SERVERS=http://192.168.18.199:8090'   python:3.11-slim-bullseye  /bin/bash -c "apt-get update&&apt-get install -y libcairo2-dev&&apt-get install -y  libpango1.0-0&&pip install --default-timeout=1000 --no-cache-dir -r /opt/requirements.txt &&cd  /opt/code && python /opt/code/ReportApp.py"
  echo "End create container"
fi

 

 

 

 

ssh shell  (方案2)

set -e
echo $SERVICE_NAME
echo  ${IS_ADD_IMPORT}
mkdir  -p  $SERVICE_NAME
# __pycache_ 删除不掉
#chmod
-R 777 $SERVICE_NAME #rm -rf $SERVICE_NAME/* ####### prepare data ############ chmod 777 ${SERVICE_NAME}.tar.gz mv ${SERVICE_NAME}.tar.gz ${SERVICE_NAME} cd ${SERVICE_NAME} tar -zxf ${SERVICE_NAME}.tar.gz ######如果不需要下载依赖(时间比较久),到这里直接重启容器###### if [ "${IS_ADD_IMPORT}" = "0" ]; then echo "没有新添加依赖,更新代码,重启容器" docker restart ${SERVICE_NAME} else echo "新添加依赖,需要下载依赖,重新构建容器" ######## run docker ##### # stop 避免无法修改文件,被占用 echo "Stop old container if exist" docker stop $SERVICE_NAME || true sleep 3 docker rm $SERVICE_NAME || true sleep 3 echo "Download the latest image" #docker pull ${IMAGE} echo "Start create container" ######## 这里需要修改 主类 or --net=host -p80:81 ######### #### cd /opt 需要到主类下,避免导入依赖错误 docker run -itd --restart=unless-stopped -p8200:8000 --name=${SERVICE_NAME} -u $(id -u):$(id -g) -v ~/${SERVICE_NAME}/:/opt/ python:3.10.17-slim /bin/bash -c "pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=1000 --no-cache-dir -r /opt/requirements.txt &&cd /opt/code && python /opt/code/ReportApp.py" echo "End create container" fi

 

posted on 2025-04-29 15:43  lshan  阅读(27)  评论(0)    收藏  举报