ToB企服应用市场:ToB评测及商务社交产业平台

标题: jenkins的安装和配置(flask结合jenkins半自动化部署流程) [打印本页]

作者: 耶耶耶耶耶    时间: 2023-5-12 15:31
标题: jenkins的安装和配置(flask结合jenkins半自动化部署流程)
jenkins在虚拟机中安装

1.1 背景介绍

Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。
Jenkins官网: http://jenkins-ci.org/
Jenkins 特征
1.2 安装


普通虚拟机安装参考: https://www.jianshu.com/p/400b4516b98e
docker化安装参考:  https://developer.aliyun.com/article/892646
1.3 使用

首先我们想实现的是flask一个后端服务的自动化部署, 我的后端服务是部署在docker上的, 所以要先知道docker的一些简单命令, 我这里就不细说了. 直接开用
flask 服务 app.py 代码如下
  1. from flask import Flask, jsonify
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def hello_world():
  5.   return 'Hello, World!'
  6. @app.route('/health')
  7. def health_checking():
  8.   ret = {'status': 'UP'}
  9.   return jsonify(ret)
  10. @app.route('/hello')
  11. def hello_chen():
  12.   return 'Hello, chen!'
  13. @app.route('/index')
  14. def index():
  15.   return 'Index!'
  16. @app.route('/ckk')
  17. def ckk():
  18.   return 'Chenkeke'
复制代码
DockerFile 文件如下, 意思就是用 gunicorn 启动flask 的 app 然后用5001端口进行访问
  1. FROM python:3.8
  2. RUN pip install --no-cache-dir -i http://mirrors.aliyun.com/pypi/simple/ \
  3. --trusted-host mirrors.aliyun.com Flask gunicorn
  4. ADD . /app
  5. ENV GUNICORN_CMD_ARGS="--bind=0.0.0.0:5001 --chdir=./app/ --workers=4"
  6. CMD ["gunicorn", "app:app"]
复制代码
这两个文件配置好之后, 需要上传到gitlab上面, 如图

配置好服务器的ssh在gitlab上面, 这样可以直接通过ssh拉取(不过不配也没关系, 我是通过http拉的项目)

配完之后可以试试能不能在服务器上把项目拉取下来, 然后通过DockDile起个任务看看能不能成功运行这个项目, 直接进到拉取的文件下编译(注意是同一层)
  1. docker build -t your_image_name .
复制代码

成功之后会生成一个镜像, 然后执行镜像
  1. docker run -d --name test -p 5001:5001 your_image_name
复制代码

打开网页看看, 成功执行

关闭容器,且删除这个镜像, 不然后面的时候会报错

可以了的话就进行下一步配置Jenkins, Jenkins的端口安装好了之后默认是8080, 可以先观察一下界面熟悉一下. 没问题之后,我们点击新建一个工作流






执行shell的步骤, 可以自行百度意思
  1. #!/bin/bash
  2. echo "hello chen"
  3. # 关闭docker项目
  4. IMAGE_NAME="company_flask"
  5. CONTAINER_NAME="my_container"
  6. PORT_MAPPING="5001:5001"
  7. WORKSPACE_PATH="/var/lib/jenkins/workspace/demo"
  8. # 检查容器是否已经在运行中
  9. if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then
  10.     echo "Stopping existing $CONTAINER_NAME container..."
  11.     docker stop $CONTAINER_NAME
  12. fi
  13. # 检查是否存在名为 $IMAGE_NAME 的 Docker 镜像
  14. if docker images | awk '{print $1}' | grep -q "^$IMAGE_NAME$"; then
  15.     # 如果存在,则删除该镜像
  16.     echo "Deleting existing $IMAGE_NAME image..."
  17.     docker rmi $IMAGE_NAME
  18. fi
  19. # 检查是否存在名为 $CONTAINER_NAME 的 Docker 容器
  20. if docker ps -a | awk '{print $NF}' | grep -q "^$CONTAINER_NAME$"; then
  21.     # 如果存在,则删除该容器
  22.     echo "Deleting existing $CONTAINER_NAME container..."
  23.     docker rm $CONTAINER_NAME
  24. fi
  25. # 进入工作目录并构建新的 Docker 镜像
  26. cd $WORKSPACE_PATH
  27. docker build -t $IMAGE_NAME .
  28. # 启动新的 Docker 容器
  29. echo "Starting new $CONTAINER_NAME container..."
  30. docker run -d --name $CONTAINER_NAME -p $PORT_MAPPING $IMAGE_NAME
复制代码
然后点击保存, 这时候就应该开始构建了, 查看构建的历史

查看控制台输出

成功。然后在本文编辑文件中新增一个接口并推送到远端git, 然后重新构建看一下。
上传code


看看git有没有上传成功

然后登录jenkins 重新构建镜像

查看构建历史

选择最近的一次构建

查看控制台输出,可以看到已经将最新的代码拉取下来了

看看能不能访问到接口

也是成功的。现在已经可以使用自动部署了,但是是半自动部署的.因为还需要登录jenkins然后手动构建 目前还是不完善的.
因为jenkins是本地的 git用的是网上的gitlab 所以不能形成一个闭环. 所以下一次博客会将gitlab和jenkins都用docker部署起来.然后完成一个全自动的自动化部署.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4