DevOps平台实践 (5)

查看Jenkins节点列表,新节点已经处于可用状态

image

测试使用新节点执行任务

配置free项目

限制项目的运行节点 ,标签表达式选择192.168.136.12

立即构建

查看构建日志

Started by user admin Running as SYSTEM Building remotely on 192.168.136.12 in workspace /opt/jenkins_jobs/workspace/free-demo using credential gitlab-user Cloning the remote Git repository Cloning repository > git init /opt/jenkins_jobs/workspace/free-demo # timeout=10 ...

Jenkins定制化容器

由于每次新部署Jenkins环境,均需要安装很多必要的插件,因此考虑把插件提前做到镜像中

Dockerfile

FROM jenkinsci/blueocean:1.23.2 LABEL maintainer="inspur_lyx@hotmail.com" ## 用最新的插件列表文件替换默认插件文件 COPY plugins.txt /usr/share/jenkins/ref/ ## 执行插件安装 RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt

plugins.txt

ace-editor:1.1 allure-jenkins-plugin:2.28.1 ant:1.10 antisamy-markup-formatter:1.6 apache-httpcomponents-client-4-api:4.5.10-1.0 authentication-tokens:1.3 ...

get_plugin.sh

admin:123456@localhost 需要替换成Jenkins的用户名、密码及访问地址

#!/usr/bin/env bash curl -sSL "http://admin:123456@localhost:8080/pluginManager/api/xml?depth=1&xpath=http://www.likecs.com/*/*/shortName|/*/*/version&wrapper=plugins" | perl -pe \'s/.*?<shortName>([\w-]+).*?<version>([^<]+)()(<\/\w+>)+/\1:\2\n/g\'|sed \'s/ /:/\' > plugins.txt ## 执行构建,定制jenkins容器 $ docker build . -t 192.168.136.10:5000/jenkins:v20200414 -f Dockerfile $ docker push 192.168.136.10:5000/jenkins:v20200414

至此,我们可以使用定制化的镜像启动jenkins服务

## 删掉当前服务 $ kubectl delete -f jenkins-all.yaml ## 删掉已挂载的数据 $ rm -rf /var/jenkins_home ## 替换使用定制化镜像 $ sed -i \'s#jenkinsci/blueocean#192.168.136.10:5000/jenkins:v20200404#g\' jenkins-all.yaml ## 重新创建服务 $ kubectl create -f jenkins-all.yaml 流水线入门

官方文档

image

为什么叫做流水线,和工厂产品的生产线类似,pipeline是从源码到发布到线上环境。关于流水线,需要知道的几个点:

重要的功能插件,帮助Jenkins定义了一套工作流框架;

Pipeline 的实现方式是一套 Groovy DSL( 领域专用语言 ),所有的发布流程都可以表述为一段 Groovy 脚本;

将WebUI上需要定义的任务,以脚本代码的方式表述出来;

帮助jenkins实现持续集成CI(Continue Integration)和持续部署CD(Continue Deliver)的重要手段;

流水线基础语法

官方文档
两种语法类型:

Scripted Pipeline,脚本式流水线,最初支持的类型

Declarative Pipeline,声明式流水线,为Pipeline plugin在2.5版本之后新增的一种脚本类型,后续Open Blue Ocean所支持的类型。与原先的Scripted Pipeline一样,都可以用来编写脚本。Declarative Pipeline 是后续Open Blue Ocean所支持的类型,写法简单,支持内嵌Scripted Pipeline代码

为与BlueOcean脚本编辑器兼容,通常建议使用Declarative Pipeline的方式进行编写,从jenkins社区的动向来看,很明显这种语法结构也会是未来的趋势。

脚本示例 pipeline { agent {label \'192.168.136.12\'} environment { PROJECT = \'myblog\' } stages { stage(\'Checkout\') { steps { checkout scm } } stage(\'Build\') { steps { sh \'make\' } } stage(\'Test\'){ steps { sh \'make check\' junit \'reports/**/*.xml\' } } stage(\'Deploy\') { steps { sh \'make publish\' } } } post { success { echo \'Congratulations!\' } failure { echo \'Oh no!\' } always { echo \'I will always say Hello again!\' } } } 脚本解释:

checkout步骤为检出代码; scm是一个特殊变量,指示checkout步骤克隆触发此Pipeline运行的特定修订

agent:指明使用哪个agent节点来执行任务,定义于pipeline顶层或者stage内部

any,可以使用任意可用的agent来执行

label,在提供了标签的 Jenkins 环境中可用的代理上执行流水线或阶段。 例如: agent { label \'my-defined-label\' },最常见的使用方式

none,当在 pipeline 块的顶部没有全局代理, 该参数将会被分配到整个流水线的运行中并且每个 stage 部分都需要包含他自己的 agent 部分。比如: agent none

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzffpw.html