Jenkins流水线入门

基础语法

Jenkins流水线分成声明式脚本式两种语法,本文主要介绍的是前者。Jenkins流水线的配置文件是Jenkinsfile,可以通过UI创建,也可以从源码管理系统中检出。声明式的流水线由pipelineagentstagesteps等部分组成。

  • agent:代理,为代理分配一个执行器,例如:在本机或者Docker容器中执行,可以在pipeline或者stage中声明;

  • tools:工具,支持自定义mavenjdkgradle等,可以在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的完成情况(例如:alwayssuccessfailure等等),执行相应的步骤;

Jenkins流水线示例

编译Maven项目
  1. 配置JAVA_HOMEM2_HOME

    tools { 
        maven 'Apache Maven 3.3.9' 
        jdk 'JDK 8' 
    }
    
  2. 编译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文件中读取groupIdartifactIdversion等参数,需要用到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
写于 2025年07月07日