2023年7月6日发(作者:)
Jenkinsfile使⽤说明(1)⽂章⽬录1. Jenkins 是什么Jenkins 是⼀款由 Java 编写的开源的持续集成⼯具。注:⽬前⼀些⾃动化编译,⾃动化测试都允许在 Jenkins 上运⾏。2. 流⽔线2.1 流⽔线是什么Jenkins 2.0 的到来, Pipeline(流⽔线)进⼊了视野, jenkins 2.0 的核⼼特性,也是最适合持续交付的 feature。注:简单的来说,就是把 Jenkins 1.0 版本中,Project 中的相关配置信息,如 SVN/Git 的配置,Parameter 的配置等都变成Code,即 Pipeline as Code。Pipeline(流⽔线)是⽤户定义的 CD 流⽔线模型。流⽔线的代码定义了整个的构建过程,它通常包括构建,测试和交付应⽤程序的阶段。Jenkins 允许你将配置⽂件和执⾏步骤以代码的形式保持,这样就可以做到像管理源码⼀样管理 Jenkins 任务。注:Jenkins Pipeline (流⽔线)是⼀套插件,将持续交付的实现和实施集成到 Jenkins 中。其提供了⼀套可扩展的⼯具,⽤于将「简单到复杂」的交付流程实现为「持续交付即代码」。 Jenkins Pipeline (流⽔线) 的定义通常被写⼊到⼀个⽂本⽂件——Jenkinsfile 中,该⽂件可以被放⼊项⽬的源代码控制库中。2.2 流⽔线的分类Jenkins 流⽔线分为脚本式的和声明式的脚本式流⽔线⽐较灵活,可以嵌⼊⼀些 Groovy 语⾔编程,功能⽐较强⼤,但是对于新⼿⽽⾔上⼿较难。pipeline 块是 。声明式流⽔线更具有结构化,减少对 Groovy 语⾔的依赖,对新⽤户⽐较友好。node 块是2.2 为什么使⽤流⽔线本质上,Jenkins 是⼀个⾃动化引擎,它⽀持许多⾃动模式。流⽔线向 Jenkins 中添加了⼀组强⼤的⼯具,⽀持⽤例简单的持续集成到全⾯的 CD 流⽔线。⽤户可以利⽤很多流⽔线的特性:代码:Pipeline 以代码的形式实现,通常被检⼊源代码控制,使团队能够编辑、审查和迭代其 CD 流程可持续性:Jenkins 重启或者中断后都不会影响 Pipeline Job停顿:Pipeline 可以选择停⽌并等待⼈⼯输⼊或批准,然后在继续 Pipeline 运⾏多功能:Pipeline ⽀持现实世界的复杂 CD 要求,包括 fork/join ⼦进程,循环和并⾏执⾏⼯作的能⼒可扩展:Pipeline 插件⽀持其 DSL 的⾃定义扩展以及其他插件集成的多个选项简⽽⾔之,就是使⽤ jenkins 的流⽔线⽐研发⾃⼰⼿动执⾏编译制作镜像推送镜像到 hub的流程有很多优势。3. 声明式流⽔线——jenkinsfile 的语法3.1 声明式流⽔线基础语法pipeline:声明其内容为⼀个声明式的 Pipeline 脚本agent:执⾏节点(job 运⾏的 slave 或者 master 节点)stages:阶段集合,包括所有的阶段(例如:打包、部署等各个阶段)stage:阶段,被 stages 包括,⼀个 stages 可以有多个 stagesteps: 步骤,为每个阶段的最⼩执⾏单位,被 stage 包括post:执⾏构建后的操作,根据构建结果来执⾏对应的操作3.2 典型的声明式流⽔线例⼦在声明式流⽔线语法中,pipeline 块定义了整个流⽔线中完成的所有⼯作。Jenkinsfile (Declarative Pipeline)pipeline { agent any /*1*/ stages { stage('Build') { /*2*/ steps { // /*3*/ } } stage('Test') { /*4*/ steps { // /*5*/ } } stage('Deploy') { /*6*/ steps { // /*7*/ } } }}上述定义的 1-7 的解释如下:1 -> 在任何可以⽤的代理上,执⾏流⽔线或它的任何阶段。2 -> 定义「Build」阶段3 -> 定义与 「Build」阶段相关的步骤4 -> 定义 「Test」阶段5 -> 定义与 「Test」阶段相关的步骤6 -> 定义 「Deploy」阶段7 -> 定义与 「Deploy」阶段相关的步骤注:部分 jenkins 的集群不⽀持 agent any 的写法。3.3 流⽔线基础语法详解所有有效的声明式流⽔线必须包含在⼀个
pipeline块中,⽐如:pipeline { /* insert Declarative Pipeline here */}在声明式流⽔线中有效的基本语句和表达遵循与 Groovy 的语法同样的规则。有以下例外:流⽔线顶层必须是⼀个 block,特别地:pipeline{}没有分号作为语句分隔符,每条语句必须在⾃⼰的⾏上块只能由 Sections、Directives、Steps 和赋值语句组成属性引⽤语句被视为⽆参数⽅法调⽤,因此,例如,输⼊被视为 input()注:当前存在⼀个未解决的问题,该问题限制了 pipeline {} 内代码块的⼤⼩,但此限制不适⽤与脚本化 pipeline3.3.1 agent (require)agent 声明整个 pipeline 脚本或某个 stage 脚本在 jenkins 中的运⾏环境。写在 pipeline 最外层则是声明整个 pipeline 的运⾏环境写在 stage ⾥则是 stage 的运⾏环境agent 的类型参数any:在任意可⽤代理上运⾏ pipelinenone:当在全局声明 agent 为 none 时,那么每⼀个 stage 都需声明⾃⼰的 agentlabel:按在 jenkins 环境中设定的 label 标签名声明 agent,如 label 所代表的节点。agent { label 'my-node1'}注:label 的 value 可以使⽤逻辑符号组合node:node 声明运⾏节点,与 label 功能类似,但是 node 可以附加选项参数,如 label、customWorkspace 等agent { node { label 'my-node1' }}注:以上的 node 写法与 label 的写法相同docker: ⽤于基于 docker 的 pipeline 流⽔线,在预配置的节点或指定 label 的节点上创建 docker 容器。除此之外,还可以接收docker run 的参数,以及 docker registry 等参数。agent { docker { image 'maven:3.8.1-adoptopenjdk-11' label 'my-defined-label' args '-v /tmp:/tmp' args '-v /tmp:/tmp' registryUrl '/' registryCredentialsId 'myPredefinedCredentialsInJenkins' }}dockerfile:从⼀个 Dockerfile 创建 docker 容器来运⾏ pipeline 流⽔线。默认会从构建的根⽬录寻找 Dockerfile。如果项⽬的 Dockerfile 存放在⼦⽬录,则需要通过 dir 参数声明。如果 Dockerfile 名字是其他⾃定义名则需要通过 filename 参数说明。注:还可以通过 additionBuildArgs 来设置 docker build 参数。使⽤ registryUrl 来设置 docker 仓库,使⽤registryCredentialsId 从 jenkins 获取 docker 仓库的账号密码。agent { // Equivalent to "docker build -f --build-arg version=1.0.2 ./build/ dockerfile { filename '' dir 'build' label 'my-defined-label' additionalBuildArgs '--build-arg version=1.0.2' args '-v /tmp:/tmp' registryUrl '/' registryCredentialsId 'myPredefinedCredentialsInJenkins' }}kubernetes:在 Kubernetes 集群中的⼀个 Pod 内执⾏ pipeline 流⽔线,pod 模板将定义在 kubernetes {} 模块中。如果需要在Pod 中安装 Kaniko 则可在 yaml 参数中声明。注:使⽤ Kaniko 是⽆需 docker demo 即可构建 docker 镜像的⽅式agent { kubernetes { label podlabel yaml """kind: Podmetadata: name: jenkins-agentspec: containers: - name: kaniko image: /kaniko-project/executor:debug imagePullPolicy: Always command: - /busybox/cat tty: true volumeMounts: - name: aws-secret mountPath: /root/.aws/ - name: docker-registry-config mountPath: /kaniko/.docker restartPolicy: Never volumes: - name: aws-secret secret: secretName: aws-secret - name: docker-registry-config configMap: name: docker-registry-config""" }3.3.2 stages (require)pipeline 阶段集声明部分,⾄少包含⼀个或多个 stage3.3.3 stage (require && alest one)构建阶段模块。定义构建阶段要做的事情,每个 pipeline 流⽔线⾄少包含⼀个 stage。⼀个 stage ⾥有且只有⼀个 steps。pipeline { agent any stages { stage('Example') { steps { echo 'Hello World' } } }}3.3.4 steps (require)Steps 包含⼀个或多个可执⾏指令。3.3.5 environmentenvironment 命令⽤于声明⼀系列的键值对作为整个 pipeline 或某个 stage 指令执⾏的环境变量,取决于它定义在 pipeline 的最外层或stage ⾥。该指令还⽀持通过 credentials() 获取预设的账户密码。其中⽀持的 credential 类型包括:Secret Text:该环境变量的值将会被设置为 Secret Text 的内容。Secret File:该环境变量的值将会被设置为临时创建⽂件路径。Username and Password:该环境变量的值将会被设置为 username:password ,并且还会⾃动创建两个环境变量:MYVARNAME_USR 和 MYVARNAME_PSW。SSH with Private Key:该环境变量的值将会被设置为临时创建的 ssh key ⽂件路径,并且还会⾃动创建两个环境变量:MYVARNAME_USR 和 MYVARNAME_PSW。pipeline { agent any stages { stage('Example Username/Password') { environment { SERVICE_CREDS = credentials('my-predefined-username-password') } steps { sh 'echo "Service user is $SERVICE_CREDS_USR"' sh 'echo "Service password is $SERVICE_CREDS_PSW"' sh 'curl -u $SERVICE_CREDS ' } } stage('Example SSH Username with private key') { environment { SSH_CREDS = credentials('my-predefined-ssh-creds') } steps { sh 'echo "SSH private key is located at $SSH_CREDS"' sh 'echo "SSH user is $SSH_CREDS_USR"' sh 'echo "SSH passphrase is $SSH_CREDS_PSW"' } } }}3.3.6 parametersparameters 声明当构建触发时⽤户要输⼊的所有参数,steps 指令将通过 params 对象获取这些参数。参数类型包括:stringtextbooleanchoicepassword举个例⼦
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688593058a153156.html
评论列表(0条)