热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Jenkins基础:Jenkinsfile使用实例:1:环境与Stage使用

随着Jenkins2的推广,Jenkinsfile的使用愈加地广泛,这篇文章介绍一下Jenkinsfile最基础的Stage的使用示例。Jenkins

随着Jenkins2的推广,Jenkinsfile的使用愈加地广泛,这篇文章介绍一下Jenkinsfile最基础的Stage的使用示例。

Jenkinsfile的实践场景:
在DevOps实践中,经常会提及的一个概念是是“IaaS”,我们进行持续集成和部署,最终的实现很有可能是Jenkins上的一个Job,有可能是FreeStyle的和有可能是其他形式的,通过插件或其他方式我们打通了Jenkins和其他组件,可以使得用户在Jenkins上通过使用Gitlab拉取分支代码,使用Maven进行构建,将结果上传至二进制私库Nexus上,使用SonarQube进行代码扫描,通过Docker进行镜像生成,将镜像推送至Harbor镜像私库上,使用Ansible进行服务部署等常见操作。
而这些操作大部分都是共通的,而不同的大多是这些组件工具的URL和用户名/密码或者Token有所不同,而Jenkins的打通过程,传统方式往往以手工方式为主,持续集成和持续交付本身是为了带来效率的,这个打通的过程自身一旦稳定往往并不像应用程序变更那样频繁,但是作为软件开发生命周期不可获取的一个环节,这些流水线手工设定的过程也应该以代码的形式保存起来,这样才能保证持续集成环境的一致性和可扩展性。而Jenkinsfile就是将持续集成和持续交付流水线以代码形式进行保存的一种方式。


示例

本文示例:
将流水线分按照功能分为逻辑上的三段:构建(Build) 、测试(Test)、部署(Deploy),顺序如下所示。













构建



测试



部署



环境准备


环境准备

这里使用Easypack的Jenkins 2.176.1来创建验证用的Jenkins环境。使用如下步骤即可完成。

事前准备

事前准备docker和docker-compose,版本要求如下所示:

  • Docker: >= 1.13.1
  • docker-compose: >= 1.13

liumiaocn:~ liumiao$ docker version
Client:
Version:18.03.1-ce
API version: 1.37
Go version:go1.9.5
Git commit:9ee9f40
Built: Thu Apr 26 07:13:02 2018
OS/Arch:darwin/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version:18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version:go1.9.5
Git commit:9ee9f40
Built: Thu Apr 26 07:22:38 2018
OS/Arch:linux/amd64
Experimental: true
liumiaocn:~ liumiao$
liumiaocn:~ liumiao$ docker-compose --version
docker-compose version 1.21.1, build 5a3f1a3
liumiaocn:~ liumiao$

启动Jenkins

使用Easypack中准备好的LTS的Jenkins镜像,启动Jenkins。

  • git clone

命令:git clone https://github.com/liumiaocn/easypack.git


  • 启动服务

命令:
cd easypack/containers/alpine/jenkins
docker-compose up -d


  • 使用的docker-compose配置文件

liumiaocn:jenkins liumiao$ cat docker-compose.yml
version: '2'
services:
# jenkins service based on Jenkins LTS version
jenkins:
image: liumiaocn/jenkins:2.176.1
ports:
- "32002:8080"
- "50000:50000"
environment:
- JENKINS_ADMIN_ID=root
- JENKINS_ADMIN_PW=liumiaocn
- JENKINS_MODE=master
volumes:
- ./data/:/data/jenkins
restart: "no"
liumiaocn:jenkins liumiao$

  • 执行日志

liumiaocn:jenkins liumiao$ docker-compose up -d
Creating network "jenkins_default" with the default driver
Creating jenkins_jenkins_1 ... done
liumiaocn:jenkins liumiao$ docker-compose ps
NameCommandState Ports
--------------------------------------------------------------------------------------------------------------
jenkins_jenkins_1/bin/tini -- /usr/local/bi ...Up0.0.0.0:50000->50000/tcp, 0.0.0.0:32002->8080/tcp
liumiaocn:jenkins liumiao$

获取Jenkins-Crumb

使用如下示例代码获取Jenkins-Crumb,为使用API方式生成三个Stage的Pipeline示例作准备。

liumiaocn:jenkins liumiao$ jenkins_host_url=http://localhost:32002
liumiaocn:jenkins liumiao$ user_passwd="root:liumiaocn"
liumiaocn:jenkins liumiao$ jenkins_crumb=`curl -u $user_passwd ${
jenkins_host_url}'/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' 2>/dev/null`
liumiaocn:jenkins liumiao$ echo $jenkins_crumb
Jenkins-Crumb:83d748ee92512c4dccd589aaa5c55a9a
liumiaocn:jenkins liumiao$

创建Job

使用如下代码示例创建Job

liumiaocn:jenkins liumiao$ ls demo/pipeline/stage/config.xml
demo/pipeline/stage/config.xml
liumiaocn:jenkins liumiao$ cat demo/pipeline/stage/config.xml





Pipeline Job Sample
false








false


false

liumiaocn:jenkins liumiao$ curl -X POST -u $user_passwd -H ${jenkins_crumb} -H "Content-Type:application/xml" --data-binary "@demo/pipeline/stage/config.xml" ${jenkins_host_url}/createItem?name=pipeline_job_noparam
liumiaocn:jenkins liumiao$ echo $?
0
liumiaocn:jenkins liumiao$

Jenkinsfile说明

本文示例所使用的Jenkinsfile信息如下所示,内容非常简单易读,简单说明如下:

  • pipeline是结构,在其中可以指定agent和stages等相关信息
  • agent用于指定执行job的节点,any为不做限制
  • stages用与设定具体的stage
  • stage为具体的节点,比如本文示例中模拟实际的 Build(构建)、测试(Test)、部署(Deploy)的过程,当然实际情况要复杂地多。

pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'echo Build stage ...'
}
}
stage('Test'){
steps {
sh 'echo Test stage ...'
}
}
stage('Deploy') {
steps {
sh 'echo Deploy stage ...'
}
}
}
}

执行Job

使用如下命令或者直接在Jenkins上点击构建

liumiaocn:jenkins liumiao$ curl -X POST -u $user_passwd -H ${jenkins_crumb} ${jenkins_host_url}/job/pipeline_job_noparam/build
liumiaocn:jenkins liumiao$ echo $?
0
liumiaocn:jenkins liumiao$

确认执行结果

使用如下命令可以确认相关的执行日志信息

liumiaocn:jenkins liumiao$ curl -u $user_passwd ${jenkins_host_url}/job/pipeline_job_noparam/1/consoleText
Started by user root
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /data/jenkins/workspace/pipeline_job_noparam
[Pipeline] {
[Pipeline] stage
[Pipeline] {
(Build)
[Pipeline] sh
+ echo Build stage ...
Build stage ...
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] {
(Test)
[Pipeline] sh
+ echo Test stage ...
Test stage ...
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] {
(Deploy)
[Pipeline] sh
+ echo Deploy stage ...
Deploy stage ...
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
liumiaocn:jenkins liumiao$

同时也可以通过Jenkins的BlueOcean插件(Easypack集成)来确认,可以更为清晰地进行可视化结果的展示。

在SCM中使用Jenkinsfile的方式

除了在Jenkins中直接使用Jenkinsfile,还可以结合SCM进行管理,简单来说,Jenkinsfile在Gitlab等SCM上进行管理,Jenkins与SCM进行关联来获取生成Job的流水线。详细可参看:

  • https://blog.csdn.net/liumiaocn/article/details/86344537

总结

在Jenkins中使用Jenkinsfile可以通过API方式,Jenkinsfile支持Groovy语法,写起来非常方便,非常适合“流水线即代码”的实践思路的落地。


推荐阅读
  • 图像因存在错误而无法显示 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • php支持中文文件名
    2019独角兽企业重金招聘Python工程师标准大家可能遇到过上传中文文件名的文件,或者读取中文目录时不能读取,出现错误的情况这种情况是因为php自动将中文字符转成了utf8 ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • Dockerfile构建镜像的指令和说明
    本文介绍了Dockerfile是用来构建镜像的文本文件,其中包含了构建镜像所需的指令和说明。通过创建一个Dockerfile文件并编写内容,可以快速创建自定义的镜像。文章还提供了一个示例,展示了如何使用Dockerfile创建一个本地构建的nginx镜像,并通过docker images命令查看镜像的版本。希望本文对大家的学习有所帮助,并希望大家多多支持编程笔记。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 初始化初始化本地空版本库,仓库,英文名repositorymkdirtest&&cdtestgitinit克隆项目到本地gitclone远程同 ... [详细]
  • 先记住几个专用名词,如下:Workspace:工作区IndexStage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库#在当前目录新建一个G ... [详细]
author-avatar
十万个蓝色天空_917
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有