使用在 Docker 上运行的Jenkins Pipeline 从 GitHub 构建、测试和部署 Flask REST API 应用程序
如今,即使对于小型 Web 应用程序或微服务,我们也需要一种更简单、更快捷的方式来部署可靠且安全的应用程序。这些应用程序可能很简单,但它们会因业务需求而发生快速变化,为了处理这些变化,我们肯定需要一个 CI/CD 管道进行部署。
Jenkins就是这样一种工具,当您想要即时构建、测试和部署时,它可以让您的生活更轻松。本文将为您提供创建 CI/CD 管道以使用Jenkins部署 Flask 应用程序所需的全部或至少大部分内容。
先决条件:
- 码头工人
- Python3.6+
- 吉特
- 烧瓶
有我将要介绍的内容列表来启动和工作。
概述:
我们将在本文中执行以下列出的操作:
- 构建 Flask 应用程序(本地构建)
- 创建 JenkinsFile
- 在 Docker 上启动Jenkins
- 将 GitHub 存储库集成到Jenkins
- 测试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 ,但您将在实际部署中使用Gunicorn或WSGI 。
我们还有一个后期阶段,它将对管道的成功或失败进行清理或电子邮件通知。
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)
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。