Jenkins + Docker 助力 Serverless 应用构建与部署
环境安装
-
Docker
-
Jenkins
-
jenkins.war + Tomcat
-
java -jar jenkins.war
-
各种 linux 操作系统分发包(例如:rpm 包)
-
Docker
-
Kubernetes
-
云厂商提供的解决方案
-
……
-
Localization: Chinese (Simplified)
-
Git
-
Pipeline
-
Docker Pipeline
-
Mask Passwords
定制构建环境的 docker 镜像
创建 Jenkins Job 构建部署应用
pipeline {
agent {
docker {
image 'python-nodejs-serverless'
args '-e TZ="Asia/Shanghai"'
}
}
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/donhui/serverless-python-demo.git'
}
}
stage('EnvSetUp') {
steps{
wrap([$class: 'MaskPasswordsBuildWrapper']) {
sh 'touch .env'
sh 'echo TENCENT_SECRET_ID=${TENCENT_SECRET_ID} >> .env'
sh 'echo TENCENT_SECRET_KEY=${TENCENT_SECRET_KEY} >> .env'
}
}
}
stage('Build') {
steps {
sh 'pip install -i https://pypi.douban.com/simple/ -r requirments.txt -t ./'
}
}
stage('Deploy') {
steps {
sh 'serverless deploy'
}
}
}
post{
always {
deleteDir()
}
}
}
对于 Jenkinsfile 做如下说明:
-
pipeline 由 agent 、stages 和 post 组成,其中 stages 下包括一系列 stage,而 stage 下又有 steps,steps 下则是一些指令
-
agent 为 docker 表示构建过程运行在 docker 容器中
-
-
docker args 中 -u 0:0 表示以 root 用户运行 docker 容器,否则会出现一些权限问题
-
docker args 中 TZ="Asia/Shanghai” 表示设置时区中国区,这样 serverless 命令行将会将应用部署到腾讯云,否则默认部署到 AWS
-
-
stages 下包括多个 stage:Checkout、EnvSetUp、Build、Deploy
-
-
Checkout 阶段用于检出代码,如果是私有仓库,还需要用到 Credentials 插件
-
EnvSetUp 阶段用于生成 .env 文件,用于自动登录腾讯云,为了避免密码明文显示在控制台,这里用了 Mask Passwords 插件
-
Build 阶段主要是用于构建,这里使用 pip 命令安装第三方库,其中用到了豆瓣的 python 源
-
Deploy 阶段则是使用 serverless deploy 命令部署应用
-
-
post 用于 pipeline 或 stage 完成后执行后置操作,这里用来在 pipeline 完成后对工作区进行清理