获取历史dokcer镜像项目,并上传gitlab,再打包镜像管理

今天遇到一个问题: 发现一个部署在Jenkins的脚本用的docker镜像是:test_project:v20191108,即这个项目是19年的一个版本,由于代码不断更新,用现在的最新代码运行该脚本,可能不能运行了,必须用19年的代码才可以。因为一些原因,可能要修改这个脚本的某些配置。

所以,准备从19年的docker镜像里,获取但是版本的代码。然后把该代码提交到原项目的一个新分支里。然后package jenkins进行管理。打包镜像,再修改jenkins脚本镜像名为新镜像名。

过程简述:

登录
docker login --username=xxx  -p=xxx xxx.xxx.tencentyun.com
拉镜像
docker pull xxx.xxx.tencentyun.com/xxx/test_project:v20191108
用该镜像运行容器
docker  run --name="test_project_v20191108"    -itd   xxx.xxx.tencentyun.com/xxx/test_project:v20191108   /bin/bash
拷贝容器里项目文件到本机(/usr/src/app/是项目目录)
docker cp test_project_v20191108:/usr/src/app/   ./
把项目代码从服务器传到开发机器,例如通过xshell
...
gitlab上对test_project项目创建一个分支来放v20191108版本的代码(可以叫test_project_v20191108)。
然后把这个分支的代码拉到本地:
这样直接拉取,会与本地的test_project这个文件夹冲突
git clone --depth=1 -b test_project_v20191108    http://xxx.xxx.test_project.git
所以要重命名(比如说拉到本地文件夹叫test_project_v20191108):
git clone --depth=1 -b test_project_v20191108    http://xxx.xxx.test_project.git   test_project_v20191108

然后打开这个分支项目,把镜像里2019年的代码复制覆盖掉这个分支的代码,然后推到gitlab上。这样19年的项目就被保存到gitlab的test_project项目的test_project_v20191108分支了!

然后在复制打包的jenkins上把配置部署,实现项目代码更新,jenkins实时构建新镜像。

Jenkins 
-新建任务
-源码管理:git 
- 输入gitlab链接、配置git账户 
- Branches to build来指定分支:test_project_v20191108
- 构建触发器: 轮询 SCM:* * * * *  (时刻监控gitlab代码更新)
- 构建 SSH site:配置打包linux服务器
- 构建 Command :
	cd 打包服务器放项目的目录/Jenkins任务名
	chmod 777 make.sh && ./make.sh

在make.sh里编写相应命令,即可实现自动打包新镜像,并推送服务器。

然后在该脚本本来的jenkins任务配置信息处修改镜像名为新镜像名(test_project:v20191108修改为test_project_v20191108:latest)docker login --username=xxx -p=xxx   xxx.xxx.tencentyun.com
docker pull xxx.xxx.tencentyun.com/xxx/test_project_v20191108:latest
cmd='xxx/test_scrept.py'
docker run -t --rm --name="xxx_test_scrept" xxx.xxx.tencentyun.com/xxx/test_project_v20191108:latest  python -W ignore ${cmd}

make.sh模板

#!/usr/bin/env bash
echo "开始制作镜像..."
image_tag=`date +%Y%m%d` #_%H%M
echo "当前时间:$image_tag"
docker build -t xxx.xxx.tencentyun.com/xxx/test_project_v20191108:v${image_tag} .
echo "制作镜像成功!"

docker login --username=xxx  -p=xxx xxx.xxx.tencentyun.com
docker push xxx.xxx.tencentyun.com/xxx/test_project_v20191108:v${image_tag}

echo "镜像版本保存"
docker tag xxx.xxx.tencentyun.com/xxx/test_project_v20191108:v${image_tag} xxx.xxx.tencentyun.com/xxx/test_project_v20191108:latest
docker push xxx.xxx.tencentyun.com/xxx/test_project_v20191108:latest

echo "删除本地镜像"
docker rmi xxx.xxx.tencentyun.com/xxx/test_project_v20191108:v${image_tag} 
docker rmi xxx.xxx.tencentyun.com/xxx/test_project_v20191108:latest

Dockerfile模板

#镜像基于某个python版本镜像
FROM xxx.xxx.tencentyun.com/xxx/python_base:data_v20230526

#设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN mkdir -p /usr/src/app
ENV PYTHONPATH=/usr/src/app
WORKDIR /usr/src/app


#复制当前目录下所有文件到镜像里
COPY . /usr/src/app
COPY requirements.txt /usr/src/app/requirements.txt
#为镜像安装需要的pyton包
RUN pip install -r /usr/src/app/requirements.txt
#自己打包的代码包导入
RUN pip install /usr/src/app/dist/CAL.tar.gz
CMD python

你可能感兴趣的:(gitlab,elasticsearch,大数据)