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/profileJAVA_HOME指向自带的OpenJDK路径,echo $JAVA_HOMEjava -versionmvn -v(maven配置依赖于JDK),一切正常。

直到今天碰到上面截图这个问题:Jenkins居然不能识别这个JDK路径。

原因参考:stackoverflow

解决方法:卸载,然后重新配置。

GitLab提交代码触发Jenkins构建

Jenkins需要安装GitLab和GitLab Hook插件。
参考向 GitLab 提交代码之后自动触发 Jenkins 构建,可能是全网第一吧,版本较新,图文清晰。
注意事项:

  1. 涉及到两个token:
    1. gitlab的access token,在gitlab服务器生成,用于Jenkins配置页面
    2. Jenkins的secret token,Jenkins生成,用于gitlab;注意在添加gitlab工程时,build trigger这里一定要点击advanced,Jenkins默认没有展开advanced,让我误以为不需要配置。点击advanced之后,点击generate生成secret token,然后粘帖到gitlab页面
  2. gitlab配置webhooks时,填写的URL是Jenkins生成的URL,不要乱写
    在这里插入图片描述
  3. 提示webhook无法保存:Url is blocked: Requests to the local network are not allowed

报错

  1. 在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。
  2. 报错(已剔除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部署到远程服务器

参考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

  1. 首先确保Jenkins所在的服务器,可以联网!
  2. updates.jenkins.io部署在国外,连接不稳,速度慢,重试几次!!
  3. 如果还是有问题,替换一下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

参考

posted @ 2021-06-25 20:06  johnny233  阅读(118)  评论(0编辑  收藏  举报  来源