[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"
}
팁 :
- : 파이프 라인을 디버깅 할 때, 우리는 파이프 라인의 시작 부분에 그것을 추가 할 수 있습니다 인쇄 된 변수의 속성 값. 이것은 우리가 많은 문제를 방지하는 데 도움이됩니다.
sh 'printenv'
env
- 사용자 정의 변수는 이름 충돌을 방지하기 위해, 통일은 프로젝트 또는 회사에 따라 같은 접두사를 추가 할 수 있습니다
__server_name
,__
그것은 접두사입니다.
1.3 사용자 정의 글로벌 환경 변수
정의 글로벌 환경 변수 간 파이프 라인을 사용 할 수 있습니다.
젠킨스를 입력 → 젠킨스 → Confiure 시스템 글로벌 속성 →은 "환경 변수"체크 상자를 선택 발견 관리, 클릭 입력 변수 이름 입력 상자의 값을 '추가'버튼을.
사용자 정의 글로벌 환경 변수에 추가됩니다 env
속성 목록, 그래서 당신은 직접 사용할 수 있습니다 ${env.g_name}
참조.
2. 빌드 도구
건설 사용될 수있는 이진 공정으로 소스 코드로 변환을 의미한다. 이 과정은 포함 할 수 있지만 이러한 링크에 국한되지 않습니다, 컴파일, 패키지를 따라 다운로드합니다. 빌드 프로세스의 출력 - 같은 우편 패키지와, 우리가 제품을 전화 (일부 책은 또한 출력을 불렸다). 제품 라이브러리라는 창고 관리 제품.
선택의 2.1 빌드 도구
구축 도구의 선택뿐만 아니라 도구 자체의 팀 수용합니다. 조언은 모든 프로젝트에서 같은 팀이 같은 기술 스택이 빌드 도구를 사용합니다.
2.2 tools
지침 소개
tools
명령이 자동으로 다운로드하고 지정된 건물 도구를 설치에 추가하는 데 도움이 할 수 PATH
있는 변수입니다. 이러한 방법으로, 우리는 할 수 있습니다 sh
직접의 단계를 사용합니다. 그러나 agent none
이 상황에서 적용되지 않습니다.
tools
JDK, 메이븐, Gradle을 : 기본 명령은 세 가지 도구를 지원합니다. 플러그인을 설치하여, tools
지침은 또한 많은 서비스를 지원할 수 있습니다. 다음으로, 우리는 몇 가지가 일반적으로 빌드 환경을 구축하는 데 사용 소개합니다.
건설 2.3 JDK 환경
자동 JDK 2.3.1를 설치
젠킨스 → 전역 도구 설정 → JDK 관리 페이지에서 입력 "JDK 추가"를 클릭합니다 :
주의
- 그것은 오라클 계정 확인을해야한다.
- 젠킨스는 즉시 JDK를 다운로드하지 않지만 경우에 파이프 라인을 사용하여 직접 다운로드 작업을 수행합니다.
2.3.2 사용자 정의 JDK 경로
보안상의 이유로, 회사의 네트워크 시스템은 실패합니다 자동 다운로드를 사용하여 인터넷에 직접 액세스 할 수 없습니다. 그럼 당신은 다음, 젠킨스 에이전트에 JDK를 준비 이름을 지정하는 데 필요한 관리 젠킨스 → 전역 도구 설정 → JDK 페이지, JAVA_HOME
경로 :
주의
- 에이전트 또는 도커는 Kubernetes 화제를 사용하는 경우, 에이전트는 미러에 맞는 기본 이미지 JDK 맞춤을 설치하는데 사용될 수있다.
- 스크립트의 사용, 즉 자동화 할 수 있습니다
tools
앞서이 스크립트가 자동으로 준비, 사전 설치된 JDKJAVA_HOME
는 JDK.
2.4 메이븐
구축 2.4.1 Maven을 사용하여
명령의 기본 메이븐을 지원하는 도구의 젠킨스 파이프 라인. 따라서, 이용 Maven은 두 단계가 필요합니다.
-
젠킨스 → 전역 도구 설정 → 메이븐 관리 페이지에서 입력 "메이븐 추가"를 클릭합니다 :
- 메이븐 버전은 Jenkinsfile에 지정되고 사용
mvn
명령을 사용합니다.
2.4.2 使用Managed files设置Maven
Maven默认使用的是其官方仓库,国内下载速度很慢。所以,我们通常会使用国内的Maven镜像仓库。这时就需要修改 Maven 的配置文件 settings.xml
。settings.xml
文件的默认路径为${M2_HOME}/conf/settings.xml
。但是,我们是不可能登录上Jenkins的机器,然后手动修改这个文件的。
Config File Provider插件能很好地解决这个问题。只需要在Jenkins的界面上填入settings.xml
的内容,然后在pipeline中指定settings.xml
就可以了。也就是说,对于不同的pipeline,可以使用不同的settings.xml
。
具体实现方法如下:
- 安装Config File Provider插件。
- 进入Manage Jenkins页面,就可以看到多出一个“Managed files”菜单。
-
单击“Managed files”进入,在左侧菜单栏中选择“Add a new Config”,就会看到该插件支持很多种配置文件的格式及方式,
- 选择“Global Maven settings.xml”选项。因为我们的设置是全局的。填写“ID”字段,Jenkins pipeline会引用此变量名。假如使用的ID为maven-global-settings。
- 在编辑页将自定义的Maven
settings.xml
的内容粘贴到“Content”字段中,
- 在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的构建,只需要以下几步。
- 安装Go插件。
- 进入Manage Jenkins→Global Tool Configuration→Go页
- 在pipeline中加入
tools
部分。
pipeline {
agent none
environment {
GOPATH = "${env.WORKSPACE}/"
}
tools {
go 'go1.10'
}
stages {
stage('build') {
steps {
sh "go build"
}
}
}
}
此时,在环境变量中会增加一个GOROOT
变量。
- 设置
GOPATH
。了解Go语言开发的读者都会知道,编译时需要设置GOPATH
环境变量。直接在environment
指令中添加就可以了。
2.6 Python环境搭建
Python环境很容易产生Python版本冲突、第三方库冲突等问题。所以,Python开发通常会进行工程级别的环境隔离,也就是每个Python工程使用一个Python环境。
在Jenkins环境下,我们使用Pyenv Pipeline插件可以轻松地实现。
首先,准备Python基础环境。
- 在Jenkins机器上安装python、pip、virtualenv。
- pip:Python的包管理工具。
- virtualenv:Python中的虚拟环境管理工具。
- 安装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/ 파이프 라인 / 단계 /