Jenkins自动化部署-教程

<html> <head></head> <body> <div class="content ql-editor"> <p><strong>1 Jenkins介绍</strong></p> <p><strong>1.1 软件开发周期</strong></p> <ul> <li>需求分析</li> <li>设计</li> <li>实现</li> <li>测试</li> <li>进化</li> <li>维护</li> </ul> <p><strong>1.2 持续集成</strong></p> <ul> <li>英文是 continuous integration,简称CI</li> <li>持续集成是指频繁的将代码集成到项目主干上去</li> <li>目的是让产品快速的迭代,同时保持高质量</li> </ul> <p><strong>1.2.1 持续集成步骤</strong></p> <ul> <li>提交</li> <li>测试(第一轮)</li> <li>构建</li> <li>测试(第二轮)</li> <li>部署</li> <li>回滚</li> </ul> <p><strong>1.2.2 组成要素</strong></p> <ul> <li>自动构建</li> <li>代码存储库</li> <li>集成服务器</li> </ul> <p><strong>1.3 Jenkins</strong></p> <ul> <li>Jenkins是一个开源的持续集成工具</li> </ul> <p><strong>2 Jenkins安装和持续集成环境配置</strong></p> <p><strong>2.1 集成流程</strong></p> <ul> <li>代码提交到git仓库</li> <li>Jenkins将代码拉取到集成服务器,完成编译、打包等工作</li> <li>Jenkins将打包好的jar包部署到生产/测试服务器</li> </ul> <p><strong>2.2 Jenkins安装</strong></p> <p><strong>2.2.1 安装jdk</strong></p> <blockquote> Jenkins依赖依赖JDK,所以需要先安装JDK </blockquote> <p><strong>2.2.2 获取Jenkins安装包</strong></p> <ul> <li>下载地址:<a href="https://jenkins.io/zh/download" target="_blank">https://jenkins.io/zh/download/</a></li> <li>安装文件:Jenkins-2.190.3-1.1.noarch.rpm</li> </ul> <p><strong>2.2.3 上传到服务器,进行安装</strong></p> <p>&nbsp;rpm <span style="color: rgb(117, 117, 228);">-ivh</span> Jenkins-2.190.3-1.1.noarch.rpm</p> <p><strong>2.2.4 修改Jenkins配置</strong></p> <p><strong>2.2.4.1 centos</strong></p> <p>&nbsp;<span style="color: rgb(243, 179, 248);">vim</span> /etc/sysconfig/jenkins</p> <p>修改内容:</p> <p>&nbsp;JENKINS_USER="root"</p> <p>&nbsp;JENKINS_PORT="8888"</p> <p><strong>2.2.4.2 unbuntu</strong></p> <p>&nbsp;<span style="color: rgb(243, 179, 248);">vim</span> /usr/lib/systemd/system/jenkins.service</p> <p>修改内容:</p> <p>&nbsp;<span style="color: rgb(141, 141, 240);">USER</span><span style="color: rgb(184, 191, 198);">=</span>root</p> <p>&nbsp;<span style="color: rgb(141, 141, 240);">Environment</span><span style="color: rgb(184, 191, 198);">=</span><span style="color: rgb(210, 107, 107);">"JENKINS_PORT=8888"</span></p> <p>&nbsp;<span style="color: rgb(243, 179, 248);">vim</span> /etc/default/jenkins</p> <p>修改内容:</p> <p>&nbsp;JENKINS_USER="root"</p> <p>&nbsp;JENKINS_PORT="8888"</p> <p>&nbsp;<span style="color: rgb(243, 179, 248);">vim</span> /etc/init.d/jenkins</p> <p>修改内容:</p> <ul> <li>修改do_start_cmd_override()函数中调用check_tcp_port()函数传入的端口号</li> </ul> <p>&nbsp;check_tcp_port “http” “$HTTP_PORT” “8888” || return 2</p> <p><strong>2.2.4.3 Jenkins</strong></p> <p>在以上修改完成后,记得在Jenkins - system manage - Jenkins location将Jenkins的URL地址修改为正确的端口号</p> <p><strong>2.2.5 启动Jenkins</strong></p> <p>&nbsp;systemctl <span style="color: rgb(243, 179, 248);">start</span> jenkins</p> <p><strong>2.2.6 添加安全组/防火墙规则</strong></p> <p><strong>2.2.7 访问Jenkins</strong></p> <p>打开浏览器访问:&lt;服务器ip&gt;:8888</p> <p><strong>2.2.8 跳过插件安装</strong></p> <p>Jenkins插件默认连接官网下载,速度很慢,经常失败</p> <p><strong>3 Jenkins插件安装</strong></p> <p><strong>3.1 修改插件下载地址</strong></p> <ul> <li>Jenkins插件国外的下载地址很慢,修改为国内的</li> <li>jenkins - manage jenkins - manage plugins</li> <li>点击available,等待插件列表加载完成</li> <li>修改地址文件,替换为国内地址</li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">cd</span> /var/lib/jenkins/updates</li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">sed</span> <span style="color: rgb(117, 117, 228);">-i</span> <span style="color: rgb(210, 107, 107);">'s/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g'</span> default.json &amp;&amp; <span style="color: rgb(243, 179, 248);">sed</span> <span style="color: rgb(117, 117, 228);">-i</span> <span style="color: rgb(210, 107, 107);">'s/http:\/\/</span><a href="http://www.google.com/https:/www.baidu.com/g'" target="_blank" style="color: rgb(210, 107, 107);">www.google.com/https:\/\/www.baidu.com/g'</a> default.json</li> <li>manage plugins中点击advanced,修改update site</li> <li>&nbsp;<a href="https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json" target="_blank">https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</a></li> <li>点击submit</li> <li>在浏览器输入:&lt;服务器ip&gt;:8888/restart,重启Jenkins</li> </ul> <p><strong>3.2 安装中文汉化插件</strong></p> <ul> <li>Jenkins - manage Jenkins - manage plugins</li> <li>点击available,搜索Chinese</li> <li>重启Jenkins,Jenkins汉化就完成了</li> <li>部分菜单汉化会失败</li> </ul> <p><strong>3.3 Jenkins权限管理插件</strong></p> <ul> <li>安装role - based - authorization strategy 插件</li> <li>开启权限全局安全配置:manage Jenkins - configure global security</li> <li>授权策略切换为 role - based strategy,保存</li> <li>创建角色:manage Jenkins - manage and assign roles - manage roles</li> <li>三种角色:</li> <li class="ql-indent-1">global roles: 全局角色</li> <li class="ql-indent-1">project roles:项目角色</li> <li class="ql-indent-1">slave roles:节点角色</li> <li>新建全局角色</li> <li class="ql-indent-1">base Role - 分配read权限</li> <li>新建项目角色</li> <li class="ql-indent-1">roleName - 分配所有权限</li> <li class="ql-indent-1">pattern : 可管理的项目名表达式</li> <li>授予角色(在此之前需要新建好用户):manage Jenkins - manage and assign roles - assign roles</li> </ul> <p><strong>3.4 jenkins凭证管理插件</strong></p> <ul> <li>安装credential binding插件</li> <li>安装完成后,主页菜单出现credentials</li> </ul> <p><strong>3.4.1 安装git插件</strong></p> <p><strong>3.4.1.1 安装插件(略)</strong></p> <p><strong>3.4.1.2 创建凭证</strong></p> <ul> <li>Jenkins - 凭证 - 系统 - 全局凭证 - 添加凭证</li> </ul> <p><strong>3.4.1.2.1 用户密码凭证</strong></p> <ul> <li>使用用户密码凭证,在构建项目时仓库地址只能选择http或https</li> </ul> <p><strong>3.4.1.2.2 ssh密钥</strong></p> <ul> <li>使用root用户生成公钥和私钥</li> <li>&nbsp;ssh-keygen <span style="color: rgb(117, 117, 228);">-t</span> rsa</li> <li>生成的公钥和私钥保存在/root/.ssh/目录下</li> <li class="ql-indent-1">id_rsa:私钥</li> <li class="ql-indent-1">id_rsa.pub:公钥</li> <li>把生成的公钥放在代码仓库(gitee、GitHub、gitlab)中</li> <li>登录代码仓库服务器 - settings - SSH keys</li> <li>将id_rsa.pub中的内容放到这里</li> <li>然后在Jenkins中添加私钥凭证</li> <li>将私钥的内容放到凭证中,用户名为创建公钥和私钥的用户(这里是root)</li> <li>此时构建项目时仓库地址需要选择ssh</li> </ul> <p><strong>3.4.2 jenkins服务器安装git工具</strong></p> <p><strong>3.4.2.1 ubuntu</strong></p> <p>&nbsp;apt-get install <span style="color: rgb(243, 179, 248);">git</span></p> <p><strong>3.4.2.2 centos</strong></p> <p>&nbsp;yum install <span style="color: rgb(243, 179, 248);">git</span> <span style="color: rgb(117, 117, 228);">-y</span></p> <p><strong>4 maven安装</strong></p> <p><strong>4.1 安装maven</strong></p> <p><strong>4.1.1 ubuntu</strong></p> <p>&nbsp;apt-get install maven</p> <ul> <li>检查是否安装成功:mvn -version</li> <li>默认安装路径:usr/share/maven</li> </ul> <p><strong>4.2 配置环境变量</strong></p> <ul> <li>在/etc/profile.d目录下新建文件maven.sh</li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">vim</span> /etc/profile.d/maven.sh <span style="color: rgb(218, 146, 74);"># 不采用</span></li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">vim</span> ~/.bashrc <span style="color: rgb(218, 146, 74);"># 采用 root用户</span></li> <li>内容如下</li> <li>&nbsp;<span style="color: rgb(200, 143, 208);">export</span> <span style="color: rgb(141, 141, 240);">JAVA_HOME</span><span style="color: rgb(184, 191, 198);">=</span>/usr/lib/jvm/java-8-openjdk-amd64</li> <li>&nbsp;<span style="color: rgb(200, 143, 208);">export</span> <span style="color: rgb(141, 141, 240);">M2_HOME</span><span style="color: rgb(184, 191, 198);">=</span>/usr/share/maven</li> <li>&nbsp;<span style="color: rgb(200, 143, 208);">export</span> <span style="color: rgb(141, 141, 240);">MAVEN_HOME</span><span style="color: rgb(184, 191, 198);">=</span>/usr/share/maven</li> <li>&nbsp;<span style="color: rgb(200, 143, 208);">export</span> <span style="color: rgb(141, 141, 240);">PATH</span><span style="color: rgb(184, 191, 198);">=</span><span style="color: rgb(141, 141, 240);">$JAVA_HOME</span>/bin:<span style="color: rgb(141, 141, 240);">$M2_HOME</span>/bin:<span style="color: rgb(141, 141, 240);">$PATH</span></li> <li>&nbsp;<span style="color: rgb(200, 143, 208);">export</span> <span style="color: rgb(141, 141, 240);">CLASSPATH</span><span style="color: rgb(184, 191, 198);">=</span>.:<span style="color: rgb(141, 141, 240);">$JAVA_HOME</span>/lib/dt.jar:<span style="color: rgb(141, 141, 240);">$JAVA_HOME</span>/lib/tools.jar</li> <li>加载配置</li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">source</span> ~/.bashrc</li> </ul> <p><strong>4.3 更换源和本地仓库地址</strong></p> <p>创建仓库目录</p> <p>&nbsp;<span style="color: rgb(243, 179, 248);">mkdir</span> /root/maven_repo</p> <p>修改镜像和仓库地址</p> <p>&nbsp;vim $MAVEN_HOME/conf/settings.xml</p> <p>添加仓库地址,镜像源地址</p> <p>&nbsp;&lt;localRepository&gt;/root/maven_repo&lt;/localRepository&gt;</p> <p>&nbsp;&lt;mirror&gt;</p> <p>&nbsp;&nbsp;&nbsp;&lt;id&gt;alimaven&lt;/id&gt;</p> <p>&nbsp;&nbsp;&nbsp;&lt;name&gt;aliyun maven&lt;/name&gt;</p> <p>&nbsp; &nbsp; &nbsp; &lt;url&gt;<a href="http://maven.aliyun.com/nexus/content/groups/public/%3C/url%3E" target="_blank">http://maven.aliyun.com/nexus/content/groups/public/&lt;/url&gt;</a></p> <p>&nbsp;&nbsp;&nbsp;&lt;mirrorOf&gt;central&lt;/mirrorOf&gt;</p> <p>&nbsp;&lt;/mirror&gt;</p> <p><strong>4.4 Jenkins配置</strong></p> <ul> <li>Jenkins - global tool configuration</li> <li>配置JDK:JAVA_HOME填写Jenkins服务器上的JAVA_HOME路径即可</li> <li>配置maven:MAVEN_HOME填写Jenkins服务器上的MAVEN_HOME路径即可</li> <li>点击应用 - 保存</li> <li>Jenkins - system configuration - global properties</li> <li>添加Jenkins全局环境变量</li> <li class="ql-indent-1">JAVA_HOME</li> <li class="ql-indent-1">M2_HOME</li> <li class="ql-indent-1">PATH+EXTRA : $M2_HOME/bin</li> <li>点击 应用 - 保存</li> </ul> <p><strong>5 jenkins构建maven项目</strong></p> <p><strong>5.1 构建项目类型</strong></p> <ul> <li>FreeStyle Project:自由风格软件项目</li> <li>Maven Project:Maven项目</li> <li>Pipeline Project:流水线项目,灵活度非常高-推荐</li> </ul> <p>所有的项目创建完成后都放在/var/lib/jenkins/workspace目录下</p> <p><strong>5.2 FreeStyle Project构建</strong></p> <ul> <li>创建项目</li> <li>拉取代码</li> <li class="ql-indent-1">源码管理 - git</li> <li class="ql-indent-1">填好仓库地址和选择对应的凭证</li> <li>编译打包</li> <li class="ql-indent-1">构建 - 添加构建步骤 - executor shell</li> <li class="ql-indent-1">填入mvn clean package命令</li> <li>部署</li> <li class="ql-indent-1">安装deploy to container插件</li> <li>回到配置 - 构建 - 增加构建后操作步骤 - deploy war/ear to a container</li> <li class="ql-indent-2">war/ear files:target/*war</li> <li class="ql-indent-2">context path:略</li> <li>containers - tomcat 8.x remote</li> <li class="ql-indent-3">添加凭证,tomcat所在服务器的一个用户+密码(可以专门创建一个用户来进行部署)</li> <li class="ql-indent-1">tomcat url:&lt;tomcat所在服务器ip&gt;:&lt;tomcat端口号&gt;</li> </ul> <p><strong>5.3 maven project构建</strong></p> <p><strong>5.3.1 安装maven integration插件</strong></p> <p><strong>5.3.2 构建项目</strong></p> <ul> <li>创建项目</li> <li>拉取代码</li> <li class="ql-indent-1">源码管理 - git</li> <li class="ql-indent-1">填好仓库地址和选择对应的凭证</li> <li>编译打包</li> <li>build</li> <li class="ql-indent-2">Root POM:选择pom文件的位置,项目相对路径</li> <li class="ql-indent-1">Goals and options:编译命令,默认使用mvn执行 - clean package这样填写就可以了</li> <li>部署</li> <li class="ql-indent-1">使用deploy to container部署到生产服务器上</li> <li class="ql-indent-1">如果Jenkins服务器和部署服务器是同一台服务器(个人项目)</li> <li class="ql-indent-1">可以使用脚本</li> <li>post steps - add post-build step - excitor shell</li> <li>添加下面内容</li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">cd</span> /home/xaopng/apps <span style="color: rgb(218, 146, 74);"># 打开脚本所在目录</span></li> <li class="ql-indent-2">&nbsp;<span style="color: rgb(243, 179, 248);">sh</span> xiying <span style="color: rgb(218, 146, 74);"># 执行脚本</span></li> <li>脚本内容(针对spring boot项目)</li> <li>&nbsp;<span style="color: rgb(183, 179, 179);">#!/bin/bash</span></li> <li>&nbsp;<span style="color: rgb(218, 146, 74);"># app=$1</span></li> <li>&nbsp;<span style="color: rgb(218, 146, 74);"># port=$2</span></li> <li>&nbsp;<span style="color: rgb(141, 141, 240);">app</span><span style="color: rgb(184, 191, 198);">=</span>xiying-1.0-SNAPSHOT <span style="color: rgb(218, 146, 74);"># 打包后的jar包名</span></li> <li>&nbsp;<span style="color: rgb(141, 141, 240);">port</span><span style="color: rgb(184, 191, 198);">=</span><span style="color: rgb(100, 171, 143);">8080</span> <span style="color: rgb(218, 146, 74);"># 项目端口号</span></li> <li>&nbsp;<span style="color: rgb(141, 141, 240);">path</span><span style="color: rgb(184, 191, 198);">=</span>/home/xaopng/apps <span style="color: rgb(218, 146, 74);"># jar包存放的位置,需要编译好的jar包移动到此目录</span></li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">echo</span> this is app : <span style="color: rgb(141, 141, 240);">$app</span></li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">echo</span> port : <span style="color: rgb(141, 141, 240);">$port</span></li> <li>&nbsp;<span style="color: rgb(218, 146, 74);">#若项目已启动,杀死旧进程</span></li> <li>&nbsp;<span style="color: rgb(141, 141, 240);">api_pid</span><span style="color: rgb(184, 191, 198);">=</span><span style="color: rgb(87, 172, 87);">`ps -ef | grep "</span><span style="color: rgb(141, 141, 240);">$app</span><span style="color: rgb(87, 172, 87);">.jar" | grep -v grep | awk '{print </span><span style="color: rgb(141, 141, 240);">$2</span><span style="color: rgb(87, 172, 87);">}'`</span></li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">echo</span> api_pid <span style="color: rgb(184, 191, 198);">=</span> <span style="color: rgb(141, 141, 240);">$api_pid</span></li> <li>&nbsp;​</li> <li>&nbsp;<span style="color: rgb(200, 143, 208);">if</span> [ <span style="color: rgb(210, 107, 107);">"</span><span style="color: rgb(141, 141, 240);">$api_pid</span><span style="color: rgb(210, 107, 107);">"</span> !<span style="color: rgb(184, 191, 198);">=</span> <span style="color: rgb(210, 107, 107);">""</span> ]; <span style="color: rgb(200, 143, 208);">then</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(243, 179, 248);">echo</span> <span style="color: rgb(243, 179, 248);">kill</span> api</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(243, 179, 248);">kill</span> <span style="color: rgb(117, 117, 228);">-9</span> <span style="color: rgb(141, 141, 240);">$api_pid</span></li> <li>&nbsp;​</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(243, 179, 248);">echo</span> <span style="color: rgb(243, 179, 248);">sleep</span> 3s</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(243, 179, 248);">sleep</span> <span style="color: rgb(100, 171, 143);">1</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(243, 179, 248);">echo</span> <span style="color: rgb(243, 179, 248);">sleep</span> 2s</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(243, 179, 248);">sleep</span> <span style="color: rgb(100, 171, 143);">1</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(243, 179, 248);">echo</span> <span style="color: rgb(243, 179, 248);">sleep</span> 1s</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(243, 179, 248);">sleep</span> <span style="color: rgb(100, 171, 143);">1</span></li> <li>&nbsp;<span style="color: rgb(200, 143, 208);">fi</span></li> <li>&nbsp;​</li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">rm</span> <span style="color: rgb(117, 117, 228);">-rf</span> <span style="color: rgb(141, 141, 240);">$path</span>/<span style="color: rgb(141, 141, 240);">$app</span>.jar</li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">rm</span> <span style="color: rgb(117, 117, 228);">-rf</span> <span style="color: rgb(141, 141, 240);">$path</span>/nohup.out</li> <li>&nbsp;<span style="color: rgb(218, 146, 74);">#将jar包从jenkins工作空间中移动到指定路径下</span></li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">mv</span> /var/lib/jenkins/workspace/xiying/target/<span style="color: rgb(141, 141, 240);">$app</span>.jar <span style="color: rgb(141, 141, 240);">$path</span></li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">cd</span> <span style="color: rgb(141, 141, 240);">$path</span></li> <li>&nbsp;​</li> <li>&nbsp;<span style="color: rgb(218, 146, 74);">#防止进程被杀死</span></li> <li>&nbsp;<span style="color: rgb(141, 141, 240);">BUILD_ID</span><span style="color: rgb(184, 191, 198);">=</span>dontKillMe</li> <li>&nbsp;<span style="color: rgb(218, 146, 74);">#后台进程形式启动项目</span></li> <li>&nbsp;nohup java <span style="color: rgb(117, 117, 228);">-jar</span> <span style="color: rgb(117, 117, 228);">-Dserver</span><span style="color: rgb(141, 141, 240);">.port</span><span style="color: rgb(184, 191, 198);">=</span><span style="color: rgb(141, 141, 240);">$port</span> <span style="color: rgb(117, 117, 228);">-Xmx256m</span> <span style="color: rgb(117, 117, 228);">-Xms128m</span>&nbsp;<span style="color: rgb(141, 141, 240);">$app</span>.jar &amp;</li> <li>&nbsp;<span style="color: rgb(243, 179, 248);">echo</span> <span style="color: rgb(141, 141, 240);">$app</span> <span style="color: rgb(243, 179, 248);">start</span> success</li> <li class="ql-indent-1">&nbsp;<span style="color: rgb(200, 143, 208);">exit</span> <span style="color: rgb(100, 171, 143);">0</span></li> </ul> <p><strong>6 构建触发器</strong></p> <p><strong>6.1 Jenkins内置4种触发器</strong></p> <ul> <li>触发远程构建:通过访问给定地址并在地址种携带token远程构建项目</li> <li>其他工程构建后触发</li> <li>定时构建</li> <li>轮询SCM</li> </ul> <p><strong>6.2 git hook自动触发构建</strong></p> <p><strong>6.2.1 gitee</strong></p> <ul> <li>安装gitee插件</li> <li>回到项目配置 - 构建触发器 - Gitee webhook 触发构建</li> <li class="ql-indent-1">生成密码</li> <li>登录gitee,进入项目,管理 - webhooks</li> <li>填写Jenkins给的URL和生成的密码就可以了</li> <li>有些时候url端口号可能会给错,填写Jenkins启动的端口号就可以了</li> </ul> <p><strong>7 idea插件</strong></p> <p><strong>7.1 idea安装Jenkins control plugin</strong></p> <ul> <li>设置中配置好Jenkins服务器ip、Jenkins用户</li> <li class="ql-indent-1">jenkins用户的密码是Jenkins中生成API token,并不是用户密码</li> </ul> <p><strong>7.2 Jenkins开启csrf</strong></p> <p><strong>7.2.1 jenkins 1.x</strong></p> <ul> <li>Jenkins - Configure Global Security</li> <li>取消”防止跨站点请求伪造“复选框</li> </ul> <p><strong>7.2.2 jenkins 2.x</strong></p> <p><strong>7.2.2.1 centos</strong></p> <p>&nbsp;<span style="color: rgb(243, 179, 248);">vim</span> /etc/sysconfig/jenkins</p> <p>修改内容:</p> <p>&nbsp;JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"</p> <p><strong>7.2.2.1 ubuntu</strong></p> <p>&nbsp;<span style="color: rgb(243, 179, 248);">vim</span> /etc/default/jenkins</p> <p>修改内容:</p> <p>&nbsp;JAVA_ARGS="-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"</p> <p><br></p> </div> </body> </html>

下载 APP