Jenkisn全局工具配置
Jenkins环境安装完之后,就可以开始使用Jenkins来进行一些自动化构建发布工作。但是开始之前我们还需要配置一些全局的构建工具,比如maven和npm等。
maven+maven私服设置
安装配置maven
安全装maven全局工具
如果你安装了Jenkins推荐安装的插件,那么Maven插件已经安装好了。
选择一个合适的Maven版本。
经过上面的配置,Jenkins会自动从Apache官网下载对应的Maven版本。
在流水线脚本中直接使用 maven 进行构建了。
pipeline {
agent any
tools {
maven 'maven3.8.4'
}
stages {
stage('Hello') {
steps {
echo 'Hello World'
sh 'mvn -v'
}
}
}
}
关联Jenkins宿主机上面的maven(不推荐)
上面的方式会自动从Apache下载对应的maven程序,如果Jenkisn所在的宿主机上面已经安装了Maven程序,那么Jenkins可以直接关联使用。
使用上面这种方式的话,首先需要将宿主机上的maven安装路径挂载到Jenkins容器。
使用方式的话,是和上面的方式类似的。
pipeline {
agent any
tools {
maven 'maven3.6'
}
stages {
stage('Hello') {
steps {
echo 'Hello World'
sh 'mvn -v'
}
}
}
}
使用Docker的方式
除了上面的几种方式,还可以使用maven的docker镜像来进行编译打包。需要安装Docker Pipeline插件
pipeline {
agent {
docker {
image 'maven:3.8-jdk-8-slim'
args '-u root:root'
}
}
stages {
stage('Hello') {
steps {
echo 'Hello World'
sh 'mvn -v'
}
}
}
}
# 或者只是让maven构建的阶段在maven容器中执行
pipeline {
agent any
stages {
stage('Hello') {
agent {
docker {
image 'maven:3.8-jdk-8-slim'
}
}
steps {
echo 'Hello World'
sh 'mvn -v'
}
}
}
}
下面是执行的日志。从执行日志上可以看出,虽然使用docker容器来执行maven构建,但是Jenkins还是会先在master节点上创建一个workspace,然后将这个workspace路径挂载到启动的maven容器中。所以后续maven容器执行的操作最后都会持久化到master节点上的workspace目录。
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/test-docker-agent
[Pipeline] {
[Pipeline] isUnix
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ docker inspect -f . maven:3.8.4-jdk-8-slim
Error: No such object: maven:3.8.4-jdk-8-slim
[Pipeline] isUnix
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ docker pull maven:3.8.4-jdk-8-slim
3.8.4-jdk-8-slim: Pulling from library/maven
... 省略部分日志
Digest: sha256:70b47ad1e281a2d44b4dcf8d8dddf81ac24bb8d07c4d49bcf634e1d29853b4a8
Status: Downloaded newer image for maven:3.8.4-jdk-8-slim
docker.io/library/maven:3.8.4-jdk-8-slim
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] withDockerContainer
Jenkins seems to be running inside container f49c25fadd254f131ab9e286157c92e7e4226d54525fb01aa7c221c6e9f639a6
$ docker run -t -d -u 0:0 -w /var/jenkins_home/workspace/test-docker-agent --volumes-from f49c25fadd254f131ab9e286157c92e7e4226d54525fb01aa7c221c6e9f639a6 -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** maven:3.8.4-jdk-8-slim cat
$ docker top b0014eec7191267a33f1842e20afad3f56a548b32a92cc78d67876772c2afc7b -eo pid,comm
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Hello)
[Pipeline] echo
Hello World
[Pipeline] sh
+ mvn -v
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: /usr/share/maven
Java version: 1.8.0_322, vendor: Oracle Corporation, runtime: /usr/local/openjdk-8/jre
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
$ docker stop --time=1 b0014eec7191267a33f1842e20afad3f56a548b32a92cc78d67876772c2afc7b
$ docker rm -f b0014eec7191267a33f1842e20afad3f56a548b32a92cc78d67876772c2afc7b
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Maven私服设置
很多时候,Maven都会连接企业内部的私服,所以我们需要提供自定义的setting文件。这边介绍两种方式,第一种就是直接去修改maven软件config目录下的setting文件,第二种是通过Config File Provider插件来提供配置文件。
直接修改maven软件config目录下的配置文件
对于第一种方式来说,上面提到的三种安装方式都是类似的,这边就拿上面的第一种安装方式来举列子。
通过Jenkisn全局工具配置安装了maven以后,Jenkins会将所有的全局工具都下载到一个tools目录下,如果你没调整过Jenkins的home目录,那么应该是下面的目录。
bash-5.1# pwd
/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.8.4
所以,如果我们想用公司内部的setting文件,可以进入这个目录下的conf目录去修改setting文件。
通过Config File Provider插件提供配置
上面提供了一种设置全局setting文件的方法,但是不是一种好的方法。因为一般只有Jenkins的管理员才能对上面提到的全局setting文件进行修改,如果普通用户想要修改,或者自定义自己的文件的话不可能每次让管理员帮忙修改。而且setting文件中也经常会涉及到一些用户密码,这些密码怎么管理也是一个问题。
这里推荐一个Jenkisn的配置文件管理工具:Config File Provider。可以通过这个工具配置自己私有的配置文件。(这个插件没有安装的话先自己安装下)
添加自己的maven配置文件,这个插件还可以使用Jenkins的密码凭证托管功能。
配置server、新增加自定义的配置。
使用下面的方式使用配置文件
configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')])
{
sh 'mvn -s $MAVEN_SETTINGS clean package'
}
node+npm私服配置
安装NodeJs
step1:安装NodeJs插件
step2:选择版本
注意:NodeJS 自动安装在Global npm packages to install 输入 淘宝镜像,提高安装速度
cnpm --registry=https://registry.npm.taobao.org
step3:在流水线中使用
pipeline {
agent any
tools {
nodejs "node17.3.0"
}
stages {
stage('Hello') {
steps {
echo 'Hello World'
sh 'node -v'
}
}
}
}
使用npm私服
step1:通过config-file-provider插件配置npm配置文件
config-file-provider这个插件一般情况下是已经安装好的。如果没装的话,自己先安装下。
step2:在流水线中使用
pipeline {
agent any
stages {
stage('Build') {
steps {
nodejs(nodeJSInstallationName: 'node17.3.0', configId: 'npm-private') {
sh 'npm -v'
sh 'npm install'
}
}
}
}
}
用好NodeJS这个插件,还可以实现很多功能:
- Provides NodeJS auto-installer, allowing to create as many NodeJS installations "profiles" as you want.
The auto-installer will automatically install a given version of NodeJS, on every jenkins agent where it will be needed- Allows to install globally some npm packages inside each installations, these npm packages will be made available to the PATH
- Allows to execute some NodeJS script, under a given NodeJS installation
- Allows use custom NPM user configuration file defined with config-file-provider plugin to setup custom NPM settings
- Add a lightweight support to DSL pipeline
- Force 32bit architecture
- Relocate npm cache folder using pre defined strategies
- Allow use of a mirror repo for downloading and installing NodeJS.