CentOS 8安装并配置Jenkins
概述
持续集成必备工具。
安装
启用Jenkins存储库。运行以下命令下载并导入GPG密钥:
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
输出:
已保存 “/etc/yum.repos.d/jenkins.repo” [85/85])
执行命令:
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
或者:
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
安装最新稳定版:yum install jenkins
,不要使用dnf install jenkins
。
如果这一步失败:
jenkins-2.289.1-1.1.noarch.rpm FAILED
http://pkg.jenkins.io/redhat/jenkins-2.289.1-1.1.noarch.rpm: [Errno 14] HTTPS Error 301 - Moved Permanently ] 0.0 B/s | 0 B --:--:-- ETA
正在尝试其它镜像。
Error downloading packages: jenkins-2.289.1-1.1.noarch: [Errno 256] No more mirrors to try.
可以打开页面:https://get.jenkins.io/redhat/
点击最新版,在Windows本地下载,然后上传到CentOS服务器,执行安装:rpm -i jenkins-2.299-1.1.noarch.rpm
启动Jenkins服务并启用它以在系统引导时启动:systemctl enable jenkins
启动:systemctl start jenkins
另外如果启动jenkins报错,查看详细报错:Starting Jenkins bash: /usr/bin/java: 没有那个文件或目录
创建软连接:ln -s /usr/local/java/bin/java /usr/bin/java
即可。
输入systemctl status jenkins
检查Jenkins是否正在运行。Jenkins运行正常。
注意:默认情况下,Jenkins使用8080端口,此端口也未被占用,但是http://localhost:8080打不开。
切换端口:vim /etc/sysconfig/jenkins
,
改为其他端口,并重启:systemctl restart jenkins
至此,安装成功。
查看密码:cat /var/lib/jenkins/secrets/initialAdminPassword
使用
安装插件
Jenkins初始化引导不要太棒,按照引导一步步操作即可。
允许用户注册
Manage Jenkins——security——Configure Global Security,允许用户注册。
Maven配置
JDK全局配置
Global Tool Configuration,配置JDK
之前看到各种资料提到CentOS自带OpenJDK,并强烈建议卸载之然后重新安装,一直不明所以。
配置/etc/profile
,JAVA_HOME
指向自带的OpenJDK路径,echo $JAVA_HOME
,java -version
,mvn -v
(maven配置依赖于JDK),一切正常。
直到今天碰到上面截图这个问题:Jenkins居然不能识别这个JDK路径。
原因参考:stackoverflow
解决方法:卸载,然后重新配置。
GitLab提交代码触发Jenkins构建
Jenkins需要安装GitLab和GitLab Hook插件。
参考向 GitLab 提交代码之后自动触发 Jenkins 构建,可能是全网第一吧,版本较新,图文清晰。
注意事项:
- 涉及到两个token:
- gitlab的access token,在gitlab服务器生成,用于Jenkins配置页面
- Jenkins的secret token,Jenkins生成,用于gitlab;注意在添加gitlab工程时,build trigger这里一定要点击advanced,Jenkins默认没有展开advanced,让我误以为不需要配置。点击advanced之后,点击generate生成secret token,然后粘帖到gitlab页面
- gitlab配置webhooks时,填写的URL是Jenkins生成的URL,不要乱写
- 提示webhook无法保存:Url is blocked: Requests to the local network are not allowed
报错
- 在Jenkins里面添加gitlab时,报错:
Failed to connect to repository : Error performing git command: git ls-remote -h http://192.168.20.149:8090/zhsh/file-center.git HEAD
,则需要安装Git。 - 报错(已剔除HTML标签):
Hook executed successfully but returned HTTP 403 Error 403 anonymous is missing the Job/Build permissionHTTP ERROR 403 anonymous is missing the Job/Build permission /project/test/user-center STATUS:403 MESSAGE:anonymous is missing the Job/Build permission
是因为在Jenkins端没有保存Jenkins GitLab Secret token相关配置。
3.
Jenkins部署到远程服务器
问题
用户名或密码不正确
admin账户明明已经修改过密码,但是登录失败。使用初始化密码:cat /var/lib/jenkins/secrets/initialAdminPassword
,登录成功。
ERROR: No such settings file /var/lib/jenkins/workspace/test/user-center/ /usr/local/maven/conf/settings.xml exists
新建的maven项目:
构建失败:
[ERROR] The specified user settings file does not exist: /var/lib/jenkins/workspace/test/user-center/ /usr/local/maven/conf/settings.xml
Please verify that your alternate settings file is specified properly and exists in the workspace.
全网搜索,终于找到解决方案:stackoverflow
配置出错在**build
**部分,点击高级,我当前build失败的配置的截图:
无论是Settings file
还是Global Settings file
,其选项都有三个,如上图,我使用的是第三个。根据上面StackOverflow的解释,应该把Settings file in filesystem
换成Use default maven settings
,即换成第一个。
前提:
重启后打不开页面
重启systemctl restart jenkins
后无法访问网站,再次systemctl restart jenkins
,即可。。。莫名其妙
构建业务应用时遇到release版本依赖包被更新(但是版本号不变)编辑失败的问题
编译报错信息:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project arm-service: Compilation failure: Compilation failure:
[ERROR] /var/lib/jenkins/workspace/test/arm/arm-service/src/main/java/com/central/arm/client/icp/impl/ICPApiDomainService.java:[10,32] 找不到符号
[ERROR] 符号: 类 HttpClientUtil
[ERROR] 位置: 程序包 com.central.common.utils
其中,第10行是依赖的一个release版本的jar包common-core
;
如同,maven对于release版本的依赖包,不会更新;Jenkins也是一样的处理策略。
解决方法:
新建一个Jenkins构建工程common-core
,然后设置构建规则,一旦发现common-core
这个项目又代码提交,则触发自动构建,并替换Jenkins所在服务器中已有的release版本的common-core.jar
,这样别的业务工程在代码提交之后,触发构建就不会有编译失败的问题。
引出另一个问题:
[INFO] Installing /var/lib/jenkins/workspace/test/zlt-commons/zlt-common-core/target/zlt-common-core-4.1.0.jar to /var/lib/jenkins/.m2/repository/com/gdfi/zlt-common-core/4.1.0/zlt-common-core-4.1.0.jar
两个仓库问题;Jenkins并没有使用默认的maven仓库地址?
第三方依赖包也是,Jenkins空间占用冗余问题
[INFO] — maven-install-plugin:2.4:install (default-install) @ zlt-swagger2-spring-boot-starter —
[INFO] Installing /var/lib/jenkins/workspace/test/zlt-commons/zlt-swagger2-spring-boot-starter/target/zlt-swagger2-spring-boot-starter-4.1.0.jar to /var/lib/jenkins/workspace/test/zlt-commons/.repository/com/gdfi/zlt-swagger2-spring-boot-starter/4.1.0/zlt-swagger2-spring-boot-starter-4.1.0.jar
UnknownHostException: updates.jenkins.io
- 首先确保Jenkins所在的服务器,可以联网!
- updates.jenkins.io部署在国外,连接不稳,速度慢,重试几次!!
- 如果还是有问题,替换一下update server:
找到配置文件
locate userCenter.xml
替换``为如下地址:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/stable-2.7/update-center.json
HTTP ERROR 403 No valid crumb was included in the request
刷新浏览器,重试。
CentOS 8使用Yum安装Git
安装:yum install git
,验证:git --version
环境变量
Jenkins内置许多环境变量,包括但不限于:
- BUILD_NUMBER, 唯一标识一次build;
- BUILD_ID,基本上等同于BUILD_NUMBER,字符串形式,例如2011-11-15_16-06-21;
- JOB_NAME,Job的名字
- JOB_URL,Job的URL
- BUILD_TAG, 作用同BUILD_ID,BUILD_NUMBER,用来全局地唯一标识一此build,例如jenkins-JavaHelloWorld-23;
- EXECUTOR_NUMBER, 例如0;
- NODE_NAME,slave的名字,例如MyServer01;
- NODE_LABELS,slave的label,标识slave的用处,例如JavaHelloWorld MyServer01;
- JAVA_HOME
- WORKSPACE,job的当前工作目录
- HUDSON_URL/JENKINS_URL, Jenkins的url,一般默认http://localhost:8000/;
- BUILD_URL,如http://localhost:8000/job/JavaHelloWorld/23/;
- SVN_REVISION