持续集成的构建环境

功能介绍

构建环境是指用来运行构建任务的环境,它通常是一个预装了开发语言 SDK、命令行工具的操作系统环境或者 Docker 环境。

CODING 持续集成会为每个构建任务分配一台 VM 作为构建资源,您可以通过内置的 agent label 来使用不同的环境进行构建。目前支持的构建环境有三种:

  • 默认环境:在 CODING 提供的云主机上执行 Pipeline 或 stage
  • Docker 环境:在指定的 Docker 镜像启动的容器环境中执行 Pipeline 或 stage
  • Dockerfile 环境:使用代码仓库中指定的 Dockerfile 脚本构建的容器环境中执行 Pipeline 或 stage

默认环境

这种方式必须设置 agent 为 agent any,持续集成将在操作系统下运行构建程序。

pipeline {
    agent any
    stages  {
        stage("检出") {
            steps {
                checkout(
                    [$class: 'GitSCM',branches: [[name: env.GIT_BUILD_REF]],userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]]
                )
            }
        }
        ...
    }
}

Docker 环境

这种方式需要给出 Docker 镜像名称,您可以使用 hub.docker.com 上的公有镜像,或者私有的 Docker 镜像作为构建环境,还可以使用多个 Docker 镜像。

使用公有 Docker 镜像

pipeline {
    agent {
        docker { 
            image 'node:7-alpine'
            args '-v /etc/hosts:/etc/hosts' //  args 为非必填参数,可以为 docker 执行运行时的参数
        }
    }
    stages {
        stage('Test') {
            steps {
                sh 'node --version'
            }
        }
    }
}

使用私有 Docker 镜像

pipeline {
    agent {
        docker { 
            image 'my-docker-image:1.0.0'
            registryUrl 'my-docker-registry.com' // 填写想要使用的 registry 地址
            registryCredentialsId 'my-credentials-id' // 非必填参数,若填写的 docker registry 需要认证后才可以拉取,需要提供一个有效的凭据 ID 
        }
    }
    stages {
        stage('Test') {
            steps {
                sh 'echo hello world'
            }
        }
    }
}

使用多个 Docker 镜像

pipeline {
    agent none
    stages {
        stage('Back-end') {
            agent {
                docker { image 'maven:3-alpine' }
            }
            steps {
                sh 'mvn --version'
            }
        }
        stage('Front-end') {
            agent {
                docker { image 'node:7-alpine' }
            }
            steps {
                sh 'node --version'
            }
        }
    }
}

Dockerfile 环境

有时候,您可能并不希望直接拉取现有的 Docker 镜像作为构建环境,而是想通过 Dockerfile 来构建和运行一个容器作为构建环境。

  1. 您需要在代码仓库中添加 Dockerfile 文件,如下所示,并提交到代码仓库中:
FROM node:7-alpine

RUN apk add -U subversion
  1. 再按照如下所示修改 Jenkinsfile 配置:
pipeline {
    agent any
    stages {
        // 需要检出代码后,才可以使用代码仓库内的 Dockerfile
        stage('Checkout') {
            steps {
                checkout([
                    $class: 'GitSCM', 
                    branches: [[name: env.GIT_BUILD_REF]], 
                    userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]])
            }
        }
        stage('Use Docker') {
            agent { 
                dockerfile {
                    filename 'Dockerfile' // 用户可以指定 Dockerfile 的名称
                    dir '/root/workspace' // 一般填写 /root/workspace, 用户也可以填写其他指定路径

                }
            }
            stages {
                stage('Test') {
                    steps {
                        sh 'node --version'
                        sh 'svn --version'
                    }
                }
            }
        }
    }
}

使用 Dockerfile 的完整参数说明:

    agent { 
        dockerfile {
            filename 'Dockerfile.build' // 自定义的 Dockerfile 文件名
            dir 'build' // Dockerfile 文件目录
            additionalBuildArgs  '--build-arg version=1.0.2' // 执行 docker build 时可以指定参数
            label 'my-defined-label' // 注意:CODING 持续集成暂时不支持
        }
    }

如果您想了解更多 agent 相关内容,可以拓展阅读:Jenkins 官方文档——在流水线中使用 Docker 的 agent 语法说明

上一篇如何构建持续集成?
文档是否对您有用?
感谢反馈有用
感谢反馈没用