jenkins pipeline api获取stage的详细信息_Jenkins + Docker 助力 Serverless 应用构建与部署...

f259fe580772e1fd923bf08f8d5a48e9.png

5c0eb38bb07ae3ff7a6da495c58e5e89.png

本文来源: 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,因此我们需要更改这个文件的权限。

d0479d297f31444f9af908143d548604.png

在 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 插件源,这样之后其他插件的下载将变得快如闪电。

6fa45077516303c4b9535fbb1cd347ed.png

定制构建环境的 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,用于自动登陆腾讯云。

2ed64408f9dfe8f750643f76de1e33cb.png

经过不断实践、不断完善,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:

5041a1eae0ae9748afde87e66e343ee5.png

运行状态截图如下,从下图中可以看到每次构建各个 stage 的耗时:

a7403f04828ae8c2a17954a4cb043a9a.png

查看 EnvSetUp stage 的日志,可以看到敏感信息已经被隐藏,保证了信息安全,这要归功于 Mask Passwords 插件:

0557746cf2277d374479abd07db8fe7d.png

关于 Mask Passwords 插件的设置,在系统管理—>系统配置中,可以对 Mask Passwords 插件做一些全局设置,如下图所示:

bc6cca95629c165972f0b5bea3211e36.png

查看 Deploy 日志,可以看到部署成功的信息提示:

94729cc37465546be58a535a158a9167.png

打开应用控制台,serverless-python-demo 应用详细信息如下:

dd458d0ff1cb3ce5d98cd6021cac31df.png

总结

本文介绍了如何使用安装 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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目本地部署

1.将数据库导出,并导入到本地 exp dgpdg/pass192.168.1.33/ORCL fileD:\gd_base.dmp logD:\gd_base.log(不要加fully,会把整个数据库下所有用户的表倒下来) imp dgpdg/pass127.0.0.1/orcl file"D:\gd_base.dmp" log&quo…

命名空间不能直接包含字段或方法之类的成员是什么意思_Python 学习笔记之类与实例...

Python 学习笔记之类与实例一、定义1.1、定义类 (class) 封装一组相关数据,使之成为一个整体,并使用一种方法持续展示和维护。这有点像把零件组装成整车提供给用户,无须了解汽车的内部结构和工作原理,只要知道方向盘,刹…

跨平台开发框架 Lynx 初探

跨平台开发是目前开发较热门的方向,React Native 在这方面取得了很大的成功,同时 Flutter 也获得了非常多的关注。React Native 采用 Web 框架开发并使用 Native UI 进行渲染,很大程度上降低了 Native 开发的门槛并且提高迭代的效率&#xff…

ajax包含mysql吗_php 实例ajax与mysql怎么只查询出一条数据?

http://www.runoob.com/php/php...使用这个实例操作之后为什么只显示一条数据,如何让符合条件的数据全部显示出来如,我使用的查询字段是yesterday_str,查询2017-04-18这个数据怎么样才能把2017-04-18包含这个的全部数据提取出来?p…

aspx写入mysql_Asp.net用户登陆数据库验证与注册写入数据库

1.思路与效果图Index.aspx注册注册成功登陆登陆验证通过进入内容页1登陆没通过验证思路:首先建一个Sqlserver数据库Student,再建一个student表(name,pwd)存放用户名和密码。然后注册功能的实现:通过数据库插入信息到表的Sql语句来实现,成功提…

页面体验提升小技巧—渐进式图片

前端性能方面有许多可优化的点,而这些优化带来的就是用户体验的提升。今天我们要聊的东西并不能给性能带来提升,但却能在一定程度上提升用户的体验。 参考博客 场景:在访问页面的时候如果图片较大或者网速慢的情况我们会看到图片加载起来是有…

微信小程序搭配小白接口,自己没有服务器也能开发哦

这里将重点介绍,在自己没有服务器的情况下,如何在微信小程序里直接调用小白接口。 前提 假设你已经开通微信小程序,如果还没有,可前往微信公众平台开通:https://mp.weixin.qq.com 假设你已经开通小白接口&#xff0c…

怎么将自己做好的网站发布到互联网上呢?

如何将自己的网站上传到网站空间。 1.需要有一个上传网站的软件,在这里推荐大家使用 FTP全称是flashfxp这个软件,这个功能功能齐全而且操作简单。大家可以先去下载一下这个软 件 2. 打开FTP,界面如下 3.我们要点击链接按钮,然后FT…

[贝聊科技]网页端「应用跳转」技术实现演变

本文作者:Mr.Luo ,贝聊前端经理。本文同时发布于作者 个人博客 。 由于网页传播的便捷性,从网页向APP导流几乎是所有APP厂商都会采用的推广手段,具体来说就是在网页上提供一些触发点(例如按钮、链接)&#…

Linux服务器配置---安装vsftpd

安装vsftpd 大多数Linux系统都使用vsftpd,因此这里我们也安装vsftpd 1、安装vsftpd [rootlocalhost phpMyAdmin]# yum install -y vsftpd Loaded plugins: fastestmirror, refresh-packagekit, security Installed: vsftpd.i686 0:2.2.2-11.el6_4.1 …

mysql怎么制作柱状图_从数据库中取出最近三十天的数据并生成柱状图

在终端用cd 命令进入文件目录说明:此处例子我是拿项目中的一个例子讲解的。1、新建一个项目 :用终端输入:zf create project Airline 格式:zf create action project project-name 备注:这些格式可以在终端输入zf 查看…

关于ES6的Promise

JavaScript的异步处理 提到JavaScript的异步处理,也许很多人和我一样想到利用回调函数。 例如: firstAsync(function(data){//处理得到的 data 数据//....secondAsync(function(data2){//处理得到的 data2 数据//....thirdAsync(function(data3){//处…

[转]我是如何走进黑客世界的?

*本文原创作者:MyselfExplorer;翻译编辑:楼兰,本文属FreeBuf原创奖励计划,未经许可禁止转载 我想给你一把打开这扇门的钥匙,而你要做的便是静静的聆听接下来的故事。挖掘 0day 一般需要掌握fuzzing&#xf…

Socket.io 深入理解

最近在做项目优化工作时,用到了Socket.io , Socket.io 文档比较少, 结合官网介绍以及自己在项目开发中的摸索,总结如下内容; Socket.io将Websocket和轮询 (Polling)机制以及其它的实时通信方式封装成了通用…

python填表_小Python填表得到d

我正在尝试使用Scrapy从网站自动下载数据。在我要做的是:使用我的凭据登录网站通过在“RIC”行中写入代码并选择感兴趣的时段来选择我想要的数据单击“获取数据”后,将生成.csv文件,我可以从“下载/”url下载该文件,其中我的所有文…

我理解中的“大前端”/“大无线”

本文内容较长,大概需要15分钟时间阅读。 内容包含五部分:前言,NodeJS职能变化,ReactNative的大规模应用,专门的架构组职能,总结。主要是介绍我所在团队最近的一些变化和思考。 更多信息可以加入我的小密圈关…

Dirichlet分布

1.预备知识 Beta分布函数是一种定义在实数区间[0,1]的特殊函数,它是二项式分布的共轭分布;与Beta分布相同,Dirichlet分布也是定义在实数区间[0,1]的概率度量函数,Dirichlet分布是多项式分布的共轭分布,Dirichlet分布的…

布局定位

布局与定位 摆放元素 1,使用流 流实际上就是浏览器在页面上摆放HTML元素所用的方法。浏览器从HTML文件最上面开始,从上到下沿着元素流逐个显示所遇到的各个元素。 每个块元素会按它在HTML标记中出现的顺序放置在页面上。每个新的块元素会带来一个换行。并…

python语言精通_Python语言基础从入门到精通

1、python关键字False await else import passNone break except in raiseTrue class finally is returnand continue for lambda tryas def from nonlocal whileassert del global not withasync elif if or yield2、命令行参数williamdeMBP-2:~ william$ python -c "imp…

FreeNAS:创建 CIFS 共享(权限)

第一部分:新建账户与指定数据集权限 简单起见,本教程主要介绍带基本身份验证的 CIFS 共享,即只有输入正确的用户名和密码才可以访问共享目录。关于创建匿名共享、多用户权限管理以及域控制器相关内容,我们会另外发布教程专门介绍。…