📜  使用在 Docker 上运行的Jenkins Pipeline 从 GitHub 构建、测试和部署 Flask REST API 应用程序

📅  最后修改于: 2022-05-13 01:57:04.153000             🧑  作者: Mango

使用在 Docker 上运行的Jenkins Pipeline 从 GitHub 构建、测试和部署 Flask REST API 应用程序

如今,即使对于小型 Web 应用程序或微服务,我们也需要一种更简单、更快捷的方式来部署可靠且安全的应用程序。这些应用程序可能很简单,但它们会因业务需求而发生快速变化,为了处理这些变化,我们肯定需要一个 CI/CD 管道进行部署。

Jenkins就是这样一种工具,当您想要即时构建、测试和部署时,它可以让您的生活更轻松。本文将为您提供创建 CI/CD 管道使用Jenkins部署 Flask 应用程序所需的全部或至少大部分内容。

先决条件:

  • 码头工人
  • Python3.6+
  • 吉特
  • 烧瓶

有我将要介绍的内容列表来启动和工作。

概述:

我们将在本文中执行以下列出的操作:

  1. 构建 Flask 应用程序(本地构建)
  2. 创建 JenkinsFile
  3. 在 Docker 上启动Jenkins
  4. 将 GitHub 存储库集成到Jenkins
  5. 测试Jenkins流水线触发器

1. 构建 Flask 应用程序(本地构建)

首先,我们将尝试在本地构建我们的 Flask 应用程序,然后再将其推送到 GitHub。

git clone https://github.com/Santhoshkumard11/Flask-Calculator-Beginner-Docker.git

如下运行 Flask 应用程序(进入 Flask-Calculator-Beginner-Docker 后)

flask run
or
python app.py

上述代码的输出

2. 创建 JenkinsFile:

我们将创建一个三阶段管道,但您可以根据应用程序的需要创建任意数量的管道。

  • 构建阶段- 这是我们从您的代码存储库下载代码的地方,但由于我们已经将 GitHub 配置为分支源, Jenkins将完成下载代码的工作,或者至少在我们的例子中。如果你有一个 React 或 Angular 应用程序,情况就不同了。
  • 测试阶段——您为 Flask 应用程序运行单元测试并使用xmlrunner输出结果,这将由Jenkins获取
  • 部署阶段——在nohup上运行 Flask 应用程序并将输出附加到log.txt ,但您将在实际部署中使用GunicornWSGI

我们还有一个后期阶段,它将对管道的成功或失败进行清理电子邮件通知

Javascript
pipeline {
  agent any
  stages {
    stage('Build') {
      parallel {
        stage('Build') {
          steps {
            sh 'echo "building the repo"'
          }
        }
      }
    }
  
    stage('Test') {
      steps {
        sh 'python3 test_app.py'
        input(id: "Deploy Gate", message: "Deploy ${params.project_name}?", ok: 'Deploy')
      }
    }
  
    stage('Deploy')
    {
      steps {
        echo "deploying the application"
        sh "sudo nohup python3 app.py > log.txt 2>&1 &"
      }
    }
  }
  
  post {
        always {
            echo 'The pipeline completed'
            junit allowEmptyResults: true, testResults:'**/test_reports/*.xml'
        }
        success {                   
            echo "Flask Application Up and running!!"
        }
        failure {
            echo 'Build stage failed'
            error('Stopping early…')
        }
      }
}


3. 在 Docker 上启动Jenkins :

从 Docker Hub 拉取 Docker 镜像

docker pull santhoshkdhana/jenkins-python3.9

现在是时候使用以下命令启动容器了,

docker run --name myjenkins -p 8080:8080 -p 50000:50000 -p 5000:5000 -v /your/home:/var/jenkins_home -v /your/home/sock:/var/run/docker.sock jenkins-python3.9

验证容器是否正在运行

docker container list -a

检查容器

成功看到容器启动并运行后,安装所需的包

docker exec myjenkins pip3 install flask flask_restful xmlrunner

在您喜欢的浏览器中输入localhost:8080 。您应该看到Jenkins要求输入密码或使用以下命令获取密码。使用命令行中的初始密码创建管理员用户

docker exec myjenkins  cat /var/jenkins_home/secrets/initialAdminPassword

注意:确保您的 docker 守护进程正在运行,否则使用service docker start启动守护进程(Ubuntu/Debian)

Jenkins密码

4. 将 GitHub 存储库集成到Jenkins:

  • 首先创建一个新项目,将其命名为Flask Jenkins Build (这是您的选择)
  • 选择多分支管道样式并单击确定

  • 从分支源中选择 GitHub
  • 粘贴https://github.com/Santhoshkumard11/Flask-Calculator-Beginner-Docker并点击验证(如果它不是可公开访问的存储库,则需要添加凭据)
  • 一旦显示已连接,向下滚动到底部并单击应用保存

5. 测试Jenkins流水线触发器:

现在您已将 GitHub 存储库集成到Jenkins,从现在开始,只要您提交到qa 分支,管道就会开始运行。
转到Jenkins主页并单击您创建的管道名称,然后单击分支名称

要手动运行它,请单击左侧边栏中的立即构建

测试阶段之后,您必须手动单击部署才能运行部署阶段。

单击Open Blue Ocean以查看带有构建阶段的新 UI。