侧边栏壁纸
  • 累计撰写 6 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论
标签搜索

jenkins+docker实现python项目的流水线持续集成

jackknife007
2022-03-17 / 0 评论 / 0 点赞 / 360 阅读 / 2,243 字
温馨提示:
本文最后更新于 2022-03-17,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

0. 前言

整个流水线的流程大概是:

  1. 通过git拉取最新的代码
  2. 通过代码中或配置的dockerfile构建容器镜像并发布到本地私有仓库
  3. 通过ssh连接需要部署的机器,pull镜像并运行。

若非python项目,比如java项目则要多一步,在构建容器镜像前需要使用maven或ant进行项目构建。

1. 准备工作

1. 安装docker

默认环境已经安装好docker,可以参考docker安装

2. 搭建docker本地私有仓库

docker run -d 
  -v /opt/registry:/var/lib/registry 
  -p 5000:5000 
  --name myregistry 
  --restart unless-stopped 
registry
  • -v /opt/registry:/var/lib/registry-p表示将本地目录/opt/registry挂载到容器中的目录,可以自行修改。
  • -p 5000:5000将宿主机5000端口映射到容器的5000端口.
  • --name myregistry表示容器名称
  • --restart=always表示总是重新启动

由于Docker CLI客户端默认以HTTPS访问,而部署的registry并未提供HTTPS,因此,需要在pull镜像的Docker主机添加HTTP可信任:

vi /etc/docker/daemon.json 
  {
   "insecure-registries":["主机的IP地址或者域名:5000"],
   "registry-mirrors": ["https://registry.docker-cn.com"]
  }

3. 安装Jenkins

docker run \
  -u root \
  -d \
  -p 8080:8080 \
  -v /opt/jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --restart unless-stopped \
  --name myjenkins \
  jenkinsci/blueocean
  • -v /opt/jenkins-data:/var/jenkins_home表示将本地目录/opt/jenkins-data挂载到容器中的目录,可以自行修改。
  • -p 8080:8080将宿主机8080端口映射到容器的8080端口,在浏览器访问本机8080进行操作。
  • -v /var/run/docker.sock:/var/run/docker.sock表示映射docker配置文件。

2. Jenkins配置

进入并安装插件

安装好Jenkins并运行后,查看容器日志,获取token,打开ip:8080,输入token,并安装常用插件。

安装推荐的插件后,需要额外安装

  • Docker plugin : 提供docker 构建和发布
  • SSH plugin : 提供通过SSH在远程主机执行命令,用于部署服务·

配置docker

系统管理>系统配置>云里新增

jenkins1

因为前面我们运行镜像的时候挂载了-v /var/run/docker.sock:/var/run/docker.sock,所以这里的docker host uri可以填unix:///var/run/docker.sock。也可以填tcp://宿主机内网IP:2376

配置ssh连接

  1. 首先生成本机的ssh密钥对
ssh-keygen -t rsa

会生成两个文件id_rsaid_rsa.pub,将id_rsa.pub复制到需要ssh连接的服务器下的~/.ssh目录,接着运行

cat id_dsa.pub >> ~/.ssh/authorized_keys
  1. 配置Jenkins凭据

jenkins2

Key需要选取刚生成的id_rsa私钥文件或复制文件内容直接填写

  1. ssh主机配置

系统管理>系统配置>SSH remote hosts里配置SSH远程主机

jenkins3

Credentials选择上一步配置的凭据。这样就可以通过ssh连接主机了。

3. 新建项目

新建任务,选择构建一个自由风格的软件项目

源码管理选择GIT,并填入仓库地址。若需要账号密码也可配置凭据后选择。

jenkins4

接下来在构建增加构建步骤,选择Build/Publish Docker Image

Cloud选择配置好的docker,Image填入宿主机IP:5000/镜像名

jenkins5

会自动获取项目目录下的Dockerfile进行构建

再增加一个构建步骤,选择Execute shell script on remote host using ssh

jenkins6

SSH site选择配置好的SSH机器,Command中填入

REPOSITORY=宿主机IP:5000/镜像名
# 部署
docker rm -f share
docker rmi $REPOSITORY
docker run -itd --name share -v /etc/localtime:/etc/localtime $REPOSITORY

前两行的作用是删除容器和本地镜像,然后拉去本地仓库的镜像并运行

-v /etc/localtime:/etc/localtime表示同步容器和宿主机的时间。

4.大功告成

Z.附带一个Dockerfile

FROM python:3.8

COPY . /code

WORKDIR /code

RUN pip install -r requirements.txt

CMD ["python", "/code/app.py"]
0

评论区