前段时间学习了一下Jenkins相关的知识,Jenkins这块使用起来需要配置的地方较多。这篇文章主要使用Jenkins的Pipeline实现一个项目的自动化构建流程。开发人员push代码到GitLab,然后自动触发Jenkins的Pipeline,Jenkins先拉取代码,然后进行测试、代码评审(评审结果推送到SonarQube)、打包等相关操作
一、安装和初始化Jenkins
1)、使用Docker安装
docker run \
-u root -d --name jenkins\
-p 8080:8080 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME":/home \
jenkinsci/blueocean:1.15.0
2)、初始化Jenkins
访问http://IP:8080/
先解锁Jenkins,/var/jenkins_home/secrets/initialAdminPassword
文件中的内容为管理员密码
[root@localhost ~]# docker exec -it jenkins /bin/bash
bash-4.4# cat /var/jenkins_home/secrets/initialAdminPassword
解锁成功后,选择安装推荐的插件,等待插件的安装
插件安装成功后,创建第一个管理员用户
实例配置这里,使用默认的Jenkins URL即可
最后点击重启Jenkins
重启后,使用刚刚创建的用户进行登录
二、配置Jenkins
1)、全局工具配置
在Jenkins主界面左侧选择系统管理,然后选择全局工具配置
配置JDK:
查看容器中JAVA_HOME位置
bash-4.4# echo $JAVA_HOME
/usr/lib/jvm/java-1.8-openjdk
安装并配置Maven:
[root@localhost ~]# ls
anaconda-ks.cfg apache-maven-3.5.3-bin.tar.gz
[root@localhost ~]# docker exec -it jenkins /bin/bash
bash-4.4# mkdir -p /usr/lib/maven
bash-4.4# exit
exit
[root@localhost ~]# docker cp apache-maven-3.5.3-bin.tar.gz jenkins:/usr/lib/maven
[root@localhost ~]# docker exec -it jenkins /bin/bash
bash-4.4# cd /usr/lib/maven/
bash-4.4# ls
apache-maven-3.5.3-bin.tar.gz
bash-4.4# tar -zxf apache-maven-3.5.3-bin.tar.gz
bash-4.4# cd apache-maven-3.5.3
bash-4.4# pwd
/usr/lib/maven/apache-maven-3.5.3
三、搭建流水线
1)、基本流程
在系统管理的插件管理中,下载Pipeline插件和Pipeline Maven Integration
在Jenkins主界面左侧选择新建任务,创建一个流水线任务
创建完成后,点击该任务,点击设置,输入Pipeline script
node{
stage('git clone'){
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'bdcdd49a-86ed-426f-b740-fb1606f0b7d0', url: 'http://192.168.126.160:8888/root/jenkins-demo.git']]])
}
stage('mvn test'){
withMaven(maven: 'maven') {
sh "mvn test"
}
}
stage('mvn build'){
withMaven(maven: 'maven') {
sh "mvn clean install -Dmaven.test.skip=true"
}
}
}
git clone阶段是从GitLab中拉取代码,点击左下方流水线语法,示例步骤选择checkout,SCM选择Git,输入Repository URL,添加凭据信息,最后点击生成流水线脚本
stage('mvn test'){
withMaven(maven: 'maven') {
sh "mvn test"
}
}
maven相关的阶段都是使用withMaven,这里必须要安装前面提到的Pipeline Maven Integration这个插件才能使用该语法,maven:后面指定的是配置maven的时候指定的Name
配置完成后,点击保存,任务左侧选择立即构建
构建结果如下图:
2)、GitLab webhook触发自动构建
Jenkins中下载GitLab插件
修改任务配置,构建触发器中勾选Build when a change is pushed to GitLab
点击高级,Secret token的位置点击生成
然后需要在GitLab中使用系统管理员登陆,在点击上方的Admin Area,在Setting中找到Outbound requests,点击Expand然后勾选Allow requests to the local network from hooks and services
在打开项目,URL为配置Jenkins构建触发器的时显示的GitLab webhook URL,Secret Token为刚刚Jenkins中生成的token,Trigger勾选的是Push events,然后add webhook
配置成功后,当push代码的时候就会自动触发该流水线任务
3)、流水线中添加代码评审
SonarQube安装和基本使用请参考:https://blog.youkuaiyun.com/qq_40378034/article/details/88768136
登录SonarQube,找到配置下的权限选择用户,生成令牌
输入令牌名称点击生成
修改流水线脚本:-Dsonar.host.url参数指定的是SonarQube的地址,-Dsonar.login参数指定的是刚刚生成的令牌
node{
stage('git clone'){
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'bdcdd49a-86ed-426f-b740-fb1606f0b7d0', url: 'http://192.168.126.160:8888/root/jenkins-demo.git']]])
}
stage('mvn test + sonar'){
withMaven(maven: 'maven') {
sh "mvn test verify sonar:sonar -Dsonar.host.url=http://192.168.126.155:9000/ -Dsonar.login=58ababa4d3264d1ae7ed4ca1a1fa6b7c90200269"
}
}
stage('mvn build'){
withMaven(maven: 'maven') {
sh "mvn clean install -Dmaven.test.skip=true"
}
}
}
这样每次执行流水线任务的时候,就可以在SonarQube中看到代码评审的结果了