1.Jenkins安装或确认必要插件
jenkins安装或确认必要插件gitlab、Publish Over SSH。
Dashboard--Manage Jenkins--Plugin Manager
2.Publish Over SSH配置
jenkins配置SSH连接django服务部署的对象服务器
Dashboard--Manage Jenkins--Configure System,找到 Publish over SSH中SSH Server。输入目标服务器IP、登录用户、登录用户密码等,最后Test Configuration
3.Jenkins中创建Job
Dashboard--New Item--输入Item name--选择「构建一个多配置项目」--点击OK
配置Job:
Source Code Management :Configure--General--Source Code Management--Git--输入Repository URL--选择登录gogs的用户Credentials--选择Branch----Save;
Build Triggers:选择Trigger builds remotely--Authentication Token;选择Build when a change is pushed to Gogs
Configuration Matrix:选择Agents--Label--Individual nodes--built-in.
Build Environment :选择Send files or execute commands over SSH before the build starts--设置SSH Server、Transfers
注意docker build image可能耗时较长,默认该过程限时120S,需要Advanced选项中延长timeout时间。
注意Transfers Set Source files、Remote directory、Exec command,其中Exec Command中项目执行sh脚本参考如下:
# 由于向Docker容器中拷贝文件会影响递归结构,所以需要将项目目录先压缩
cd /root/
tar -czvf local_cmdb.tar.gz local_cmdb
echo `pwd`
docker rm -f local_cmdb
cd /root/local_cmdb
mv -f /root/local_cmdb.tar.gz ./
# 创建Docker容器镜像
docker build -t local_cmdb:v1 -f Dockerfile .
#启动Django项目
docker run -it -d --name local_cmdb -p 80:80 local_cmdb:v1
4.gogs配置web钩子
选择我的仓库--仓库设置--管理Web钩子--添加Web钩子--选择Gogs--填写推送地址、选择数据格式、密钥文本可免、设置希望触发Web钩子的事件、选择激活--点击添加Web钩子。参考20230129-Jenkins+Gogs自动打包项目
5.测试
开发环境提交代码
下载项目源码
# git clone http://172.26.37.127:3000/luorf/CMDB3.git
# cd CMDB3
编写制作Django项目镜像Dockerfile文件
# vi Dockerfile
FROM almalinux #选择almalinux为基础镜像
MAINTAINER luorf #作者
RUN yum install -y python39 gcc python39-devel mysql-devel && yum clean all && rm -rf /var/cache/yum/* #yum安装python等
RUN ln -sf /usr/bin/python3.9 /usr/bin/python && ln -sf /usr/bin/pip3.9 /usr/bin/pip #配置python环境
ADD local_cmdb.tar.gz /root/ #提交项目包
RUN pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple #安装uwsgi
RUN pip install -r /root/local_cmdb/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple #安装项目需要的python组件
EXPOSE 80 #暴露80端口
ENTRYPOINT python /root/local_cmdb/manage.py runserver 0.0.0.0:80 #启动项目
提交修改
# git add .
# git commit -m "django"
# git push origin master
gogs自动推送确认:
jenkins脚本执行确认:
远程Docker服务器镜像制作成功,容器启动正常,django web访问及利用正常
# docker image ls |grep local_cmdb
local_cmdb v1 e8ed8e500b50 25 minutes ago 568MB
# docker ps |grep local_cmdb
8ccc5bc58bbc local_cmdb:v1 "/bin/sh -c 'python 鈥 26 minutes ago Up 26 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp local_cmdb
# curl -I http://172.26.37.126/admin
此仅仅是实现Django项目的测试发布,完整的发布,需要nginx+uwsgi+django实现,待续。