今天遇到一个问题: 发现一个部署在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模板文章来源:https://www.toymoban.com/news/detail-636974.html
#!/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模板文章来源地址https://www.toymoban.com/news/detail-636974.html
#镜像基于某个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
到了这里,关于获取历史dokcer镜像项目,并上传gitlab,再打包镜像管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!