zoukankan      html  css  js  c++  java
  • Linux 搭建 Jenkins

    环境准备

    安装JDK

    安装 JDK 之前写过一篇文章,本文就不具体讲了:

    注意:Java版本不能是gcj,会导致Jenkins有问题,centos7搭建jenkins小记文章中提到的java版本问题导致CentOS下的Jenkins有问题。

    安装Git

    yum install git
    

    规避磁盘过满问题

    1.方法1:创建软连接,准备较大空间

    /data挂在了较大空间,然后在其中创建相关目录:

    mkdir -p /data/jenkins
    ln -s /data/jenkins/ /var/lib/jenkins
    chown -R root:root /data/jenkins
    

    2.方法2:丢弃构建

    设置构建最大保留天数或者保留个数,实现自动删除构建结果。

    参考:

    CentOS

    离线安装-推荐

    ## http://pkg.jenkins-ci.org/redhat-stable/
    wget http://pkg.jenkins-ci.org/redhat/jenkins-2.39-1.1.noarch.rpm ## 下载(也可以Windows下载再转过来)
    sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key ## 导入公钥,发现离线安装,不需要导入公钥就能安装
    rpm -ih jenkins-2.7.2-1.1.noarch.rpm
    

    自动安装完成之后:

    • /usr/lib/jenkins/jenkins.war WAR包
    • /etc/sysconfig/jenkins 配置文件
    • /var/lib/jenkins/ 默认的JENKINS_HOME目录
    • /var/log/jenkins/jenkins.log Jenkins日志文件

    在线安装

    # 添加Jenkins源
    sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
    sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
    yum repolist # Update your package manager list to get the latest packages
    # 安装
    yum install java-1.8.0-openjdk jenkins
    service jenkins start # 启动
    

    基于Tomcat安装

    • Tomcat官网下载tar包
    • 将tar包拷贝至/usr/local目录并解压:cd /usr/local/ && tar zxvf apache-tomcat-9.0.12.tar.gz
    • 访问jenkins官网下载长期维护版本的jenkins.war拷贝至/usr/local/apache-tomcat-9.0.12/webapps,启动tomcat:`cd /usr/local/apache-tomcat-9.0.12
    • 访问:http://IP:8080/jenkins

    管理员密码访问:

    cat /root/.jenkins/secrets/initialAdminPassword
    

    基于这种方式安装的Jenkins位置处于/root/.jenkins,因此,为了避免Job占用空间过大,需要执行如下命令创建软连接:

    ln -s /data/jenkins_jobs/ /root/.jenkins/jobs
    

    Jenkins设置

    为了不因为权限出现各种问题,这里直接使用root

    ## sudo vim /etc/sysconfig/jenkins
    JENKINS_USER="root" ## 原值 "jenkins" 必须修改,否则权限不足
    JENKINS_PORT="8080" ## 原值 "8080" 可以不修改
    

    修改目录权限

    chown -R root:root /var/lib/jenkins
    chown -R root:root /var/cache/jenkins
    chown -R root:root /var/log/jenkins
    

    Jenkins 启动

    启动Jenkins:

    sudo systemctl enable jenkins # 开机自启动Jenkins
    sudo systemctl start jenkins # 启动Jenkins
    

    查看服务细节:

    systemctl status jenkins.service
    

    验证Jenkins Server访问链接:

    telnet IP 8080
    

    如果访问有问题,需要把防火墙关了:

    systemctl stop firewalld
    systemctl disable firewalld.service #重启不自动开启
    

    通过如下两个命令查看防火墙是否关闭:

    systemctl list-unit-files|grep firewalld.service
    iptables -t nat -S
    

    Centos安装参考:

    Ubuntu

    • 下载https://pkg.jenkins.io/debian/jenkins.io.key
    • apt-key add jenkins.io.key

    以上两步,可以合二为一:

    wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
    
    • sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
    • apt-get update
    • apt-get install jenkins
    • /etc/init.d/jenkins start。或者service start jenkins。启动Jenkins。
    • 通过:http://{ip}:8080 访问jenkins。

    cat /var/lib/jenkins/secrets/initialAdminPassword得到默认密码填入下面的密码框中

    安装好之后,可以修改相关配置改变默认端口:

    • /etc/default/jenkins

    Ubuntu安装参考:

    Jenkins master优化

    增加同时打开文件句柄数

    增加同时打开文件句柄数,linux默认一个进程能同时打开的文件句柄是1024个,在jenkins master肯定是不够的,需要调整成65535

    CentOS系统,修改/etc/security/limits.conf,在文件最后增加一行:

    root             -       nofile          65535
    

    重启后生效,可以通过命令ulimit -a查看

    设置tomcat 日志循环,限制日志的大小

    https://stackoverflow.com/questions/8342336/how-to-set-maximum-number-of-rolls-and-maximum-log-size-for-tomcat

    Jenkisn配置

    Jenkins用户

    admin账号初始密码:

    cat /var/lib/jenkins/secrets/initialAdminPassword
    

    Jenkins使用

    Jenkins关闭、重启、重载

    http://localhost:8080/[exit/restart/reload]

    参考:

    Jenkins Job指定执行节点

    • 关联job,进入job的配置页面,勾选Restrict where this project can be run

    利用了标签的功能

    参考:

    Jenkins升级

    可以通过系统管理(System management)--> 系统信息(System Info)查找.war的文件

    executable-war	/usr/lib/jenkins/jenkins.war
    

    先列出官网地址:https://jenkins.io/download/

    升级之前,停止Jenkins服务(记得备份原来的jenkins.war,以防万一)

    http://jenkinsIP:port/exit
    

    从官网下载最新的war包,然后替换掉上面路径下的war。

    替换完成后,重启:

    systecmctl start jenkins # centos
    service jenkins start # ubunutu
    

    参考:

    Jenkins插件

    • dashboard view:Dashboard-view自定义jenkins任务集视图
    • Workspace Cleanup:这个插件可以再每次build之前清空workspace
    • Monitoring:监控一些机器的状态信息了
    • Folders:新建任务时,支持创建文件夹,可嵌套地定义文件夹来级别 views / jobs
    • SSH Slaves:添加节点时,可以采用SSH方式链接;
    • PostBuildScript:根据 Build 状态执行脚本
    • Post Build Task
    • Pipeline:必须 【请勾选】
    • Build Pipeline:用于创建pipline视图
    • Configuration Slicing:主要功能是可以批量设置job的属性,比如设置保留多少天的构建记录,神器之一,有效解决Jenkins磁盘过满的问题
    • Multijob:配置Multijob必备的插件;
    • Timestamper
    • Build Timeout plugin:构建超时插件
    • Custom Tools
    • Git:Git插件 【请勾选】
    • Git Parameter
    • GitLab
    • Gitlab Hook
    • Gitlab Authentication
    • Parameterized Trigger plugin:插件可以让你在构建完成时触发新的Job构建,并以各种方式为新Job构建指定参数。
    • Node and Label parameter
    • Publish Over SSH
    • Groovy plugins:并发任务解决
    • Windows Slaves Plugin:连接Windows Slaves,默认安装了
    • Matrix Authorization Strategy Plugin:矩阵形式认证策略插件,默认安装了

    插件使用参考:

    Jenkins Slave

    Slave机器上需要安装好git、配置好Java环境(尤其是一些类似JAVA_HOME的变量)。

    通过SSH连接node--推荐

    • 先安装SSH Slaves插件,这样在新增节点时,ssh配置将更加友好。
    • 点击 Credentials, 点击 Jenkins -> Global credentials -> Add CredentialsUsernamePassword 表示执行机的账号和密码。
    • 新建节点,「启动方式」 选择 Launch slave agents via SSHCredentials 选择刚刚新建的钥匙,Host Key Verification Strategy 选择 Manually trusted Key Verification Stragegy

    最后Launch agent即可;

    通过JNLP连接node

    该方法比较麻烦,不详细介绍了。

    注意:需要下载两个文件到agent机器上:

    • agent.jar
    • slave-agent.jnlp

    参考:

    Jenkins FAQ

    Q1: 忽略Jenkins升级提醒

    对于轻微强迫症的我来说,看着升级提醒,还不能叉掉,实在忍不了,Google之后,有解决方法:

    Manage Jenkins => Configure System => Administrative monitors configuration
    系统管理-》系统设置-》管理监控配置
    去掉“Jenkins更新通知”
    UnCheck "Jenkins Update Notification" and apply
    

    Q2: Cannot run program "java": error=2, No such file or directory

    虽然登录到master机器或者执行机上,java都配置好了,但是仍然遇到了错误,后来看到一篇博客中提到的方法,在usr/bin下创建了一个Java的软连接,就解决了。

    ln -s /usr/java/jdk1.8.0_171/bin/java /usr/bin
    

    Q3: jenkins.JenkinsException: Error in request. Possibly authentication failed [500]: Internal Server Error

    在JJB项目中,发生了上面的错误,定位问题了半天,发现可能是Jenkins本身出问题了,而不是项目出问题。以前运行OK的Jenkins怎么突然发生这个问题了呢?可能是如下原因造成:

    • var/lib/jenkins/jobs:目录下Job占据过多空间。在Jenkins中的节点管理里查看master机器的剩余磁盘空间`也可以观察到
    du -ah --max-depth=1
    

    /etc/rc.local是啥?

    参考:

    Q4: starting jenkins bash /usr/bin/java permission denied

    解决办法主要分了两步:

    1. 将原本位于/root/buildbox/javaxxx/下的目录移到了/usr/java/下,重新配置java环境;
    2. vim /etc/init.d/jenkins中的candidates字段补充上java路径/usr/java/jdk1.8.0_151/bin/java

    参考:

    Q5: 执行Jenkins服务器界面运行一段时间后就会卡死,界面显示空白

    原因:tomcat的日志(/home/apache-tomcat-8.0.30/logs)查看catalina.out日志,得知是java虚拟机内存空间溢出。
    解决:到后台tomcat的bin目录下,修改 tomcat的启动脚本:startup.sh,在最上面添加 export JAVA_OPTS=“-XX:MaxPermSize=1024m -Xms1024m -Xmx3096m”

    Q6: 构建完成后需要清除workspace

    需要安装“Workspace Cleanup Plugin插件”,在构建任务配置时,可以在“增加构建后操作步骤”中选择Delete workspace when build is done

    Q7: Linux环境变量问题,没有加载/etc/profile文件,获取不到需要的环境变量。

    添加节点时,Prefix Start Slave Command 选择输入 source /etc/profile &&

    加一个前置动作。注意&&之后要有空格!!!

    Q8:Jenkins定时构建用法

    Jenkins定时构建

    Q9:Error 403 No valid crumb was included in the request

    Q10:Jenkins Master-Slave: Key exchange was not finished, connection is closed

    挂载执行机时,报错,通过编辑 /etc/sshd_config 文件,注释 MACs 和 Kex 所在的行,解决了问题,记得注释之后,systemctl restart sshd

    Q11:清理过期的 Jobs

    #clear jenkins jobs logs
    @hourly find /var/lib/jenkins/jobs/ -mindepth 1 -maxdepth 1 -mtime +30 -type d -exec rm -rf {} ; -o -type f -exec rm -rf {} ;
    

    参考:

    说明

    博客原文:CICD-Jenkins搭建笔记一

  • 相关阅读:
    PHP vscode+XDebug 远程断点调试服务器上的代码
    Wordpress 为用户或角色 role 添加 capabilities(权限)
    Wordpress 后台文章编辑区添加模板选择功能
    CentOS 7 编译安装最新版git
    WordPress 通过文章 URL 获取文章 ID
    Web 安全问题 rel="noopener nofollw"
    Wordpress 通过 post id 获取文章 url
    git放弃修改&放弃增加文件
    Wordpress 作者模板页中的自定义帖子类型分页问题
    PHP 删除 url 中的 query string
  • 原文地址:https://www.cnblogs.com/michael-xiang/p/10467286.html
Copyright © 2011-2022 走看看