jenkins pipeline api获取stage的详细信息_Jenkins + Docker 助力 Serverless 应用构建与部署...
本文来源: ServerlessLife 公众号
近日,使用 Serverless 开发了一个应用。其中 CI/CD,是需要考虑的一个问题。这里用到了 Jenkins 和 Docker。并且 Jenkins Pipeline 运行在容器中。
本文将介绍如何使用 Jenkins 和 Docker 构建并部署 Serverless 应用。
环境安装
需要安装的软件
- Docker
- Jenkins
笔者用的 MacBook,已经事先安装好了 Docker,并且由于从 DockerHub 下载镜像比较慢,为了加快镜像下载速度,设置了使用国内的 Docker 镜像源。
Jenkins 有多种运行方式:
- jenkins.war + Tomcat
- java -jar jenkins.war
- 各种 linux 操作系统分发包(例如:rpm 包)
- Docker
- Kubernetes
- 云厂商提供的解决方案
- ……
笔者这里使用 Docker 运行 Jenkins,因为构建步骤也会运行在 Docker 中,需要将 docker.sock 和 docker 命令挂载到容器中,启动 jenkins 命令如下:
docker run -d -p 8080:8080 --name jenkins -e TZ="Asia/Shanghai" -v jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v (which docker):(whichdocker):(which docker) jenkins/jenkins:lts
注意:由于容器内 Jenkins 服务是由 jenkins 用户启动的,它无法访问 /var/run/docker.sock,因此我们需要更改这个文件的权限。
在 Jenkins 启动后安装需要用到的插件:
- Localization: Chinese (Simplified)
- Git
- Pipeline
- Docker Pipeline
- Mask Passwords
建议启动后只先安装 Localization: Chinese (Simplified) 插件(该插件由 Jenkins 中文社区维护)。
等安装好 Localization: Chinese (Simplified) 插件,并设置好管理员账号后,再安装其他所需的插件。
为什么要这样做呢?
由于 Jenkins 插件服务器在国外,通常情况下因为网络问题,下载插件会比较慢,也经常会遇到插件下载失败的问题。
为了解决这个痛点,Localization: Chinese (Simplified) 插件提供了使用国内 Jenkins 插件源的功能。
因此,在安装好 Localization: Chinese (Simplified) 插件后,请立即设置使用国内的 Jenkins 插件源,这样之后其他插件的下载将变得快如闪电。
定制构建环境的 docker 镜像
本文使用 Serverless Framework 部署应用到腾讯云。
serverless 命令行是使用 nodejs 开发的,所以会需要 nodejs 环境。
此外,计划部署的应用是用 python 开发的,也会需要到 python 环境。
应用构建部署是在 docker 容器中运行的,所以需要一个同时安装有 nodejs 和 python 的 docker 镜像。
在 GitHub 上找到了 docker-python-nodejs 仓库: https://github.com/nikolaik/docker-python-nodejs。
基于 nikolaik/python-nodejs 镜像构建了新镜像 python-nodejs-serverless,Dockerfile 如下:
FROM nikolaik/python-nodejs:python3.6-nodejs12
RUN npm config set registry http://registry.npm.taobao.org&&npm install -g serverless
使用 docker build 命令构建镜像:
docker build -t python-nodejs-serverless .
创建 Jenkins Job 构建部署应用
创建一个 Pipeline 类型的 job,名称为:serverless-python-demo-pipeline,并开启参数化构建,增加两个密码参数:TENCENT_SECRET_ID 和 TENCENT_SECRET_KEY,用于自动登陆腾讯云。
经过不断实践、不断完善,Jenkinsfile 最终内容如下:
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 完成后对工作区进行清理
点击 Build With Parameters—>开始构建,运行 Job:
运行状态截图如下,从下图中可以看到每次构建各个 stage 的耗时:
查看 EnvSetUp stage 的日志,可以看到敏感信息已经被隐藏,保证了信息安全,这要归功于 Mask Passwords 插件:
关于 Mask Passwords 插件的设置,在系统管理—>系统配置中,可以对 Mask Passwords 插件做一些全局设置,如下图所示:
查看 Deploy 日志,可以看到部署成功的信息提示:
打开应用控制台,serverless-python-demo 应用详细信息如下:
总结
本文介绍了如何使用安装 Jenkins 及插件,如何定制构建环境的 Docker 镜像,并展开分析了 Jenkins Pipeline 的核心配置文件:Jenkinsfile。此外,还用到了 Mask Passwords 插件来隐藏敏感信息,保证了信息安全。
本次实践使用 Jenkins + Docker 成功部署了 Serverless 应用,希望对看到这篇文章的读者带来一定的借鉴参考意义。
参考
https://hackernoon.com/jenkins-docker-and-cicd-for-serverless-bw5p323d
https://github.com/nikolaik/docker-python-nodejs
https://hub.docker.com/r/jenkins/jenkins
https://github.com/jenkinsci/localization-zh-cn-plugin
https://stackoverflow.com/questions/46659862/how-to-mask-a-password-field-in-jenkins-pipeline-project
https://www.jenkins.io/doc/book/pipeline/syntax/
jenkins pipeline api获取stage的详细信息_Jenkins + Docker 助力 Serverless 应用构建与部署...相关推荐
- linux系统获取光盘信息api,C++ 通过WIN32 API 获取逻辑磁盘详细信息的几种方法
今天我们主要介绍的是几个常用的api函数,通过它我们可以获取用户磁盘的相关信息 其主要函数原型说明如下: 1.获取系统中逻辑驱动器的数量 The GetLogicalDrives function r ...
- C++通过WIN32 API获取逻辑磁盘详细信息
1 #include <iostream> 2 #include <windows.h> 3 using namespace std; 4 5 int main() 6 { 7 ...
- 使用Python和Jenkins REST API获取git changes信息
因为工作中发生过很严重的 Regression Issue,当时的解决方案是在Daily Build中使用二分法找到出问题的Build, 过程比较繁琐,所以就有了这么个需求,要求记录Daily Bui ...
- 微信公众号开发之网页授权认证获取用户的详细信息,实现自动登陆
原创声明:本文转来源本人另一博客[http://blog.csdn.net/liaohaojian/article/details/70175835]绝非他人处转载 从接触公众号到现在,开发维护了2个 ...
- (微信公众号开发《一》OAuth2.0网页授权认证获取用户的详细信息,实现自动登陆)http://blog.csdn.net/liaohaojian/article/details/70175835
从接触公众号到现在,通过不断积累学习,对如何调用微信提供接口有了一定的见解.当然在开发过程中遇到很多问题,现在把部分模块功能在这备案一下,做个总结也希望能给其他人帮助 工欲善其事,必先利其器,先看看开 ...
- sql 获取数据库字段信息_使用DBATools获取SQL数据库详细信息
sql 获取数据库字段信息 In the series of articles on DBATools, (see TOC at the bottom) we are exploring useful ...
- 获取文件-属性-详细信息
结构包含了文件的版本信息: GetFileVersionInfoSize函数用于判断系统能否检索到指定文件的版本信息,如果可以函数返回版本信息的字节大小: DWORD WINAPI GetFileVe ...
- python从高德api获取公交线路规划信息
从高德api获取公交线路规划信息类似于爬虫,由于本人不会爬虫,因此简单说说如何实现 直接上代码 import os import requests import math import json im ...
- 获取Exception的详细信息
获取Exception的详细信息 我自己运行测试的环境:windowsXP.eclipse3.5.1.jdk1.6 下面的三个方法都是获取异常的详细信息,或许的异常详细信息以字符串的形式返回,保持栈堆 ...
最新文章
- 第79天:jQuery事件总结(二)
- C语言 链表的创建--打印--逆置--新增--删除--排序--释放
- Linux中的chmod权限问题
- 控制寄存器和系统地址寄存器
- SAP CRM WebClient UI Excel Export的运行时执行明细
- 服务核心 - 工具类
- Spring Cloud构建微服务架构:分布式服务跟踪(入门)【Dalston版】
- luogu 4768
- Spring Bean的一生
- 字符编码乱码问题(servlet底层 编码大揭秘)
- redis aof 备份和恢复_深入理解Redis持久化
- c51转汇编语言窗口,在C51语言中如何嵌入汇编语言
- Git(二):Git的安装配置与基本使用
- 蚂蚁金服二面,竟然被问到事务的基本原理?
- java severlet 例子_Java开发Servlet实例
- 如何下载微信开发者工具?
- IOS免签网站封装工具PJ版
- Python学习笔记之疑问 1:def 是什么意思
- 100句激励自己的英文名言
- Linux软件安装包保存
热门文章
- HDU题目分类啊!!!
- 计算机教师专业发展论文,关于教师专业发展的计算机专业论文
- 3d展示网页开发_超实用:一篇文章带你了解市面上主流通用的3D模型格式
- 计算机操作员实操高级试题,计算机操作员高级实操(以往考过,可做平时练习素材)答题.doc...
- java项目processes设置,Jvm调优和SpringBoot项目优化的详细教程
- idea 导出war包_使用IDEA实现远程代码DEBUG调试教程详解
- 背包问题 贪心算法 java_JS基于贪心算法解决背包问题
- 对安卓应用进行加固签名,为上架各大应用市场做准备
- suse linux安装rpm包,linux – 如何为Suse创建RPM
- node实现简单的群体聊天工具