今天遇到一個問題: 發(fā)現(xiàn)一個部署在Jenkins的腳本用的docker鏡像是:test_project:v20191108,即這個項目是19年的一個版本,由于代碼不斷更新,用現(xiàn)在的最新代碼運行該腳本,可能不能運行了,必須用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/ ./
把項目代碼從服務器傳到開發(fā)機器,例如通過xshell
...
gitlab上對test_project項目創(chuàng)建一個分支來放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上把配置部署,實現(xiàn)項目代碼更新,jenkins實時構(gòu)建新鏡像。
Jenkins
-新建任務
-源碼管理:git
- 輸入gitlab鏈接、配置git賬戶
- Branches to build來指定分支:test_project_v20191108
- 構(gòu)建觸發(fā)器: 輪詢 SCM:* * * * * (時刻監(jiān)控gitlab代碼更新)
- 構(gòu)建 SSH site:配置打包linux服務器
- 構(gòu)建 Command :
cd 打包服務器放項目的目錄/Jenkins任務名
chmod 777 make.sh && ./make.sh
在make.sh里編寫相應命令,即可實現(xiàn)自動打包新鏡像,并推送服務器。
然后在該腳本本來的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模板文章來源:http://www.zghlxwxcb.cn/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模板文章來源地址http://www.zghlxwxcb.cn/news/detail-636974.html
#鏡像基于某個python版本鏡像
FROM xxx.xxx.tencentyun.com/xxx/python_base:data_v20230526
#設置時區(qū)
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,再打包鏡像管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!