Jenkins流水线入门
基础语法
Jenkins流水线分成声明式和脚本式两种语法,本文主要介绍的是前者。Jenkins流水线的配置文件是Jenkinsfile,可以通过UI创建,也可以从源码管理系统中检出。声明式的流水线由pipeline、agent、stage、steps等部分组成。
-
agent:代理,为代理分配一个执行器,例如:在本机或者Docker容器中执行,可以在pipeline或者stage中声明; -
tools:工具,支持自定义maven、jdk、gradle等,可以在pipeline或者stage中声明;需要先在系统管理 > 全局工具配置功能中配置Maven、JDK、Gradle!
-
parameters:定义用户参数; -
triggers:触发器,支持cron等; -
stages:stage:阶段,例如:编译、测试、部署等等。agent也可以在stage中单独定义,作用范围是该stage;environment:设置环境变量;env:访问环境变量;params:访问用户参数;steps:步骤,每个stage执行的步骤;script:Groovy脚本块;sh '':Shell脚本行;sh ''' ''':Shell脚本块;
-
post:在执行完stage声明的steps之后,根据stage的完成情况(例如:always、success、failure等等),执行相应的步骤;
Jenkins流水线示例
编译Maven项目
-
配置
JAVA_HOME、M2_HOME:tools { maven 'Apache Maven 3.3.9' jdk 'JDK 8' } -
编译Maven项目:
stages { ... stage('Build') { steps { sh "mvn clean install -s /var/jenkins_home/tools/settings.xml -Dmaven.test.skip=true" } } ... }
打包Docker镜像
把上述Maven项目编译结果打包成Docker镜像,并推送到Docker私服(192.168.1.1:5000)。
为了能够从pom.xml文件中读取groupId、artifactId、version等参数,需要用到Pipeline Utility Steps插件中的readMavenPom方法。
stages {
...
stage('Package') {
steps {
script {
def pom = readMavenPom file: 'pom.xml'
env.POM_ARTIFACTID = pom.artifactId;
env.POM_VERSION = pom.version;
env.DOCKER_IMAGE_NAME = "192.168.1.1:5000/test/${pom.artifactId}:${pom.version}"
}
sh '''
docker image build -t ${DOCKER_IMAGE_NAME} .
docker login 192.168.1.1:5000 -u admin -p123456
docker image push ${DOCKER_IMAGE_NAME}
'''
}
}
...
}
注意:
由于使用Groovy沙盒,可能会出现
Scripts not permitted to use method org.apache.maven.model.Model getVersion. Administrators can decide whether to approve or reject this signature.错误。此时,需要在Dashboard > 系统管理 > ScriptApproval功能中配置如下内容:
method org.apache.maven.model.Model getArtifactId method org.apache.maven.model.Model getGroupId method org.apache.maven.model.Model getVersion