"젠킨스 2.x에서 연습 가이드"연구 노트 - 환경 변수 및 도구를 구축

[TOC]

1. 환경 변수

환경 변수는 미디어 파이프 라인 및 젠킨스의 상호 작용으로 볼 수있다. 예를 들어, 파이프 라인의 현재 빌드에 BUILD_NUMBER에게 작업의 변수 수를 구축하는 방법을 알 수 있습니다. 환경 변수는 젠킨스 내장 변수와 사용자 정의 변수로 나눌 수 있습니다.

1.1 내장 변수

ENV라는 이름의 전역 변수 및 기본 환경 변수를 통해 파이프 라인의 실행, 젠킨스에서 젠킨스 노출. 사용 방법은 여러 가지 예를 들면, 그 있습니다 :

pipeline {
  agent any
  stages {
    stage('Example') {
      steps {
         echo "Running ${env.BUILDNUMBER} on ${env.JENKINS_URL}" # 方法1 推荐
         echo "Running $env.BUILDNUMBER on $env.JENKINS_URL"  # 方法2
         echo "Running ${BUILDNUMBER} on ${JENKINS_URL}"   # 方法3 不推荐,难排查
      }
    }
  }
}

액세스를 통해 <Jenkins master的地址>/pipeline-syntax/globals#env전체 목록에. 변수 "가 multibranch 프로젝트의"선언 목록에서 유일한 multibranch 프로젝트가이 변수를해야합니다 나타냅니다.

자주 사용 실제로는 여러 변수에 대한 간략한 소개합니다 다음.

  • BUILD_ NUMBER: 공사 번호, 축적 된 번호입니다. 포장 할 때, 이는 예를 들어, 문서의 이름의 일부로 제공 server-2.jar.
  • BRANCH_ NAME: 다 지점 파이프 라인 프로젝트를 지원합니다. 프로덕션 환경에 지점을 해제하는 코드를 게시하여, 예를 들어, 사용됩니다 지점에 따라 다른 일을해야하는 경우, 마스터 브랜치는 시험 환경에 배치했다.
  • BUILD_ URL: 페이지 URL의 현재 빌드. 빌드가 실패하면, 당신은 메일 알림에 링크 장애를 구축해야합니다,이 링크 될 것입니다 BUILD _URL.
  • GIT_BRANCH: 자식 풀에 의해 만들어 소스 프로젝트는이 변수를해야합니다.

사용에서 env변수는 다양한 유형의 프로젝트에 관심을 지불 할 필요가있을 때, env속성과 관련된 변수들의 값이 동일하지 않습니다. 일반 파이프 라인 작업 등의 GIT_BRANCH변수는 origin/master여러 가지 파이프 라인 작업에 GIT_BRANCH변수입니다 master.
따라서, 파이프 라인에 따라 분기 로직 처리 다른 행동,주의해야 할 때.

1.2 사용자 정의 파이프 라인의 환경 변수

파이프 라인이 복잡 할 때, 우리는 자신의 환경 변수의 요구 사항을 정의해야합니다. 선언적 파이프 라인을 제공합니다 environment쉽게 사용자 정의 변수에 대한 지침. 예를 들면 :

pipeline {
    agent any
    environment {
        CC = "clang"
    }
    stages {
        stage("Example") {
            environment {
                DEBUG_FLAGS = "-g"
            }
            steps {
                sh "${CC} ${DEBUG_FLAGS}"
                sh "printenv"
            }
        }
    }
}

environment에 정의 같은 지침이 파이프 라인에서 정의 될 수, 범위는 전체 파이프 라인이다 stage단계는 현재 stage유효한.

그러나 이러한 변수는 변수가 파이프 라인 B에 액세스 할 수 없습니다 파이프 라인으로, 파이프 라인을 통해 수 없습니다. 공유 변수 사이의 파이프 라인에서 파라 메트릭 파이프 라인을 통해 실현 될 수있다.

환경 변수는 서로 참조 :

environment {
    __server_name = 'mail-server'
    __version = "${BUILD_NUMBER}"
    __artifact_name = "${__server_name}-${__version}.jar"
}

팁 :

  1. : 파이프 라인을 디버깅 할 때, 우리는 파이프 라인의 시작 부분에 그것을 추가 할 수 있습니다 인쇄 된 변수의 속성 값. 이것은 우리가 많은 문제를 방지하는 데 도움이됩니다.sh 'printenv'env
  2. 사용자 정의 변수는 이름 충돌을 방지하기 위해, 통일은 프로젝트 또는 회사에 따라 같은 접두사를 추가 할 수 있습니다 __server_name, __그것은 접두사입니다.

1.3 사용자 정의 글로벌 환경 변수

정의 글로벌 환경 변수 간 파이프 라인을 사용 할 수 있습니다.
젠킨스를 입력 → 젠킨스 → Confiure 시스템 글로벌 속성 →은 "환경 변수"체크 상자를 선택 발견 관리, 클릭 입력 변수 이름 입력 상자의 값을 '추가'버튼을.

사용자 정의 전역 변수를 추가

사용자 정의 글로벌 환경 변수에 추가됩니다 env속성 목록, 그래서 당신은 직접 사용할 수 있습니다 ${env.g_name}참조.

2. 빌드 도구

건설 사용될 수있는 이진 공정으로 소스 코드로 변환을 의미한다. 이 과정은 포함 할 수 있지만 이러한 링크에 국한되지 않습니다, 컴파일, 패키지를 따라 다운로드합니다. 빌드 프로세스의 출력 - 같은 우편 패키지와, 우리가 제품을 전화 (일부 책은 또한 출력을 불렸다). 제품 라이브러리라는 창고 관리 제품.

선택의 2.1 빌드 도구

구축 도구의 선택뿐만 아니라 도구 자체의 팀 수용합니다. 조언은 모든 프로젝트에서 같은 팀이 같은 기술 스택이 빌드 도구를 사용합니다.

2.2 tools지침 소개

tools명령이 자동으로 다운로드하고 지정된 건물 도구를 설치에 추가하는 데 도움이 할 수 PATH있는 변수입니다. 이러한 방법으로, 우리는 할 수 있습니다 sh직접의 단계를 사용합니다. 그러나 agent none이 상황에서 적용되지 않습니다.

toolsJDK, 메이븐, Gradle을 : 기본 명령은 세 가지 도구를 지원합니다. 플러그인을 설치하여, tools지침은 또한 많은 서비스를 지원할 수 있습니다. 다음으로, 우리는 몇 가지가 일반적으로 빌드 환경을 구축하는 데 사용 소개합니다.

건설 2.3 JDK 환경

자동 JDK 2.3.1를 설치

젠킨스 → 전역 도구 설정 → JDK 관리 페이지에서 입력 "JDK 추가"를 클릭합니다 :

JDK를 추가

주의

  1. 그것은 오라클 계정 확인을해야한다.
  2. 젠킨스는 즉시 JDK를 다운로드하지 않지만 경우에 파이프 라인을 사용하여 직접 다운로드 작업을 수행합니다.

2.3.2 사용자 정의 JDK 경로

보안상의 이유로, 회사의 네트워크 시스템은 실패합니다 자동 다운로드를 사용하여 인터넷에 직접 액세스 할 수 없습니다. 그럼 당신은 다음, 젠킨스 에이전트에 JDK를 준비 이름을 지정하는 데 필요한 관리 젠킨스 → 전역 도구 설정 → JDK 페이지, JAVA_HOME경로 :

JDK의 경로를 지정

주의

  1. 에이전트 또는 도커는 Kubernetes 화제를 사용하는 경우, 에이전트는 미러에 맞는 기본 이미지 JDK 맞춤을 설치하는데 사용될 수있다.
  2. 스크립트의 사용, 즉 자동화 할 수 있습니다 tools앞서이 스크립트가 자동으로 준비, 사전 설치된 JDK JAVA_HOME는 JDK.

2.4 메이븐

구축 2.4.1 Maven을 사용하여

명령의 기본 메이븐을 지원하는 도구의 젠킨스 파이프 라인. 따라서, 이용 Maven은 두 단계가 필요합니다.

  1. 젠킨스 → 전역 도구 설정 → 메이븐 관리 페이지에서 입력 "메이븐 추가"를 클릭합니다 :
    받는다는-3.5.4 추가

  2. 메이븐 버전은 Jenkinsfile에 지정되고 사용 mvn명령을 사용합니다.

2.4.2 使用Managed files设置Maven

Maven默认使用的是其官方仓库,国内下载速度很慢。所以,我们通常会使用国内的Maven镜像仓库。这时就需要修改 Maven 的配置文件 settings.xmlsettings.xml 文件的默认路径为${M2_HOME}/conf/settings.xml。但是,我们是不可能登录上Jenkins的机器,然后手动修改这个文件的。
Config File Provider插件能很好地解决这个问题。只需要在Jenkins的界面上填入settings.xml的内容,然后在pipeline中指定settings.xml就可以了。也就是说,对于不同的pipeline,可以使用不同的settings.xml
具体实现方法如下:

  1. 安装Config File Provider插件。
  2. 进入Manage Jenkins页面,就可以看到多出一个“Managed files”菜单。
  3. 单击“Managed files”进入,在左侧菜单栏中选择“Add a new Config”,就会看到该插件支持很多种配置文件的格式及方式,
    설정 파일

  4. 选择“Global Maven settings.xml”选项。因为我们的设置是全局的。填写“ID”字段,Jenkins pipeline会引用此变量名。假如使用的ID为maven-global-settings。
  5. 在编辑页将自定义的Maven settings.xml的内容粘贴到“Content”字段中,

편집 구성 파일

  1. 在Jenkins pipeline中使用的方法如下:
configFileProvider([configFile(fileId: "maven-global-settings", variable: "MAVEN_GLOBAL_ENV")]) {
    sh "mvn -s $MAVEN_GLOBAL_ENV clean install"
}

2.5 Go语言环境搭建

Jenkins支持Golang的构建,只需要以下几步。

  1. 安装Go插件
  2. 进入Manage Jenkins→Global Tool Configuration→Go页

추가 이동

  1. 在pipeline中加入tools部分。
pipeline {
    agent none
    environment {
        GOPATH = "${env.WORKSPACE}/"
    }
    tools {
        go 'go1.10'
    }    
    stages {
        stage('build') {
            steps {
                sh "go build"
            }
        }
    }
}

此时,在环境变量中会增加一个GOROOT变量。

  1. 设置GOPATH。了解Go语言开发的读者都会知道,编译时需要设置GOPATH环境变量。直接在environment指令中添加就可以了。

2.6 Python环境搭建

Python环境很容易产生Python版本冲突、第三方库冲突等问题。所以,Python开发通常会进行工程级别的环境隔离,也就是每个Python工程使用一个Python环境。

在Jenkins环境下,我们使用Pyenv Pipeline插件可以轻松地实现。
首先,准备Python基础环境。

  1. 在Jenkins机器上安装python、pip、virtualenv。
    • pip:Python的包管理工具。
    • virtualenv:Python中的虚拟环境管理工具。
  2. 安装Pyenv Pipeline插件。
    然后,在pipeline中使用Pyenv Pipeline插件提供的withPythonEnv方法。
withPythonEnv("/usr/bin/python") {
    sh "python --version"
}

withPythonEnv方法会根据第一个参数——可执行python路径——在当前工作空间下创建一个virtualenv环境。
withPythonEnv方法的第二个参数是一个闭包。闭包内的代码就执行在新建的virtualenv环境下。

3. 利用环境变量支持更多的构建工具

모든 빌드 도구는 해당 플러그인 젠킨스가 사용할 수있는 설치하는 데 필요한 것은 아닙니다.
먼저 PATH 환경 변수에 다음 건물 도구 디렉토리, 기계 도구 건물에 설치 : 일반적으로, 개발자들은 개발 환경을 설정하는 경우 않습니다.
더 젠킨스 구축 도구를 지원하려면, 같은 접근 방식은 다음과 같습니다 젠킨스 에이전트에 설치 도구를 구축하고 그 명령을 실행 디렉토리 녹화에서 다음 PATH 환경에게이 명령 젠킨스 파이프 라인을 사용하는 변수의 필요성을 추가 실행 명령의 내용. 다음 예는 다음과 같다 :

pipeline {
    agent none
    environment {
        PATH = "/usr/local/customtool/bin:$PATH"
    }
    stages {
        stage('build') {
            steps {
                sh "customtool build"
            }
        }
    }
}

또 다른 방법이있을 수 있습니다 :

pipeline {
    agent none
    environment {
        CUSTOM_TOOL_HOME = "/usr/local/customtool/bin"
    }
    stages {
        stage('build') {
            steps {
                sh "${CUSTOM_TOOL_HOME}/customtool build"
            }
        }
    }
}

컴파일러 4. 도구 멀티 범위 버전

실제로, 때때로 우리는 컴파일러의 여러 버전의 소스를 컴파일 할 필요가있다. tools명령 파이프 라인의 범위를 지원할뿐만 아니라, 또한 지원하는 stage범위. 그래서, 우리는 같은 파이프 라인의 컴파일 된 버전의 이상을 달성 할 수있다. 다음과 같이 코드입니다 :

pipeline {
    agent none
    stages {
        stage('build with jdk-10.0.2') {
            tools {
                jdk "jdk-10.0.2"
            }
            steps {
                sh "printenv"
            }
        }
        stage('build with jdk-9.0.4') {
            tools {
                jdk "jdk-9.0.4"
            }
            steps {
                sh "printenv"
            }
        }       
    }
}

의 로그 아웃 인쇄, 당신은 각 단계에서 발견 할 것이다 JAVA_HOME변수의 값이 다르다.

참고 문헌 :
[1] "젠킨스 2.X 전투 가이드"
[2] https://jenkins.io/zh/doc/book/pipeline/syntax/
[3] https://jenkins.io/zh/doc/ 파이프 라인 / 단계 /

추천

출처blog.51cto.com/ygqygq2/2446717