jenkins自动化CICD

部署

中文文档 https://www.jenkins.io/zh/doc/book/installing/

安装 jenkins

  1. 上传yum源

  2. 安装key

    rpm --import jenkins.io.key
    yum -y install jenkins-2.301-1.1.noarch.rpm
    #注:新版 GitLab 的服务端口为 8080,和 GitLab 的服务端口相冲突,修改Jenkins的默认端口8080为198 
    
  3. 配置文件

    vim /etc/sysconfig/jenkins  
    JENKINS_PORT="8888" 
    #数据目录,建议用固态磁盘来存数据,可以自己定义
    JENKINS_HOME="/var/lib/jenkins" 
    JENKINS_USER="root" 
    
    vim /etc/init.d/jenkins
    candidates="
    /data/jdk1.8.0_152/bin/java
    "
    
  4. 修改安装插件源

    cd  ./jenkins/updates/
    sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
    sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
    
  5. 启动

    systemctl daemon-reload
    systemctl start jenkins.service
    systemctl restart jenkins.service
    
  6. 访问 Jenkins 并安装相关控件

    http://192.168.66.40:8888
    #查看初始化密码:cat /var/lib/jenkins/secrets/initialAdminPassword 
    f00b76dece1d416ba50346f21cf937d9
    
  7. 安装插件

    选择不需要默认任何插件
    创建管理员用户:admin 密码: 123456 全名: admin到些 jenkins 安装成功。
    jenkins自动化CICD_第1张图片
    jenkins自动化CICD_第2张图片
    jenkins自动化CICD_第3张图片

    把官方下载列表加载到本地
    jenkins自动化CICD_第4张图片

    进入插件列表并修改加载源

    cd /var/lib/jenkins/updates
    sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' 		default.json
    sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
    
    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    

    重启Jenkins

    http://192.168.66.101:8888/restart
    

    下载中文汉化插件
    jenkins自动化CICD_第5张图片

新增从节点

  1. 开启代理程序的TCP端口

    Manage Jenkins -> Configure Global Security
    在这里插入图片描述

  2. 新建节点

    Manage Jenkins—Manage Nodes—新建节点
    jenkins自动化CICD_第6张图片
    jenkins自动化CICD_第7张图片
    jenkins自动化CICD_第8张图片

  3. 安装和配置节点

    下载agent.jar,并上传到Slave节点,然后执行页面提示的命令:

    java -jar agent.jar -jnlpUrl http://192.168.66.101:8888/computer/slave1/slave- agent.jnlp -secret f2ecbb99e0c81331e8b7a7917a94d478f39cb9763fc6c66d9a9741c61f9ae6d6 -workDir "/root/jenkins"
    

    刷新页面
    jenkins自动化CICD_第9张图片

  4. 测试节点是否可用

    自由风格和Maven风格的项目:
    jenkins自动化CICD_第10张图片

安装常用插件:

  1. 管理Jenkins用户权限Role-based Authorization Strategy

    jenkins自动化CICD_第11张图片

    开启权限全局安全配置
    jenkins自动化CICD_第12张图片
    jenkins自动化CICD_第13张图片

    创建角色
    jenkins自动化CICD_第14张图片
    jenkins自动化CICD_第15张图片
    jenkins自动化CICD_第16张图片

    Global roles(全局角色)、Item roles(项目角色)、Node roles(节点角色)

  2. 凭证管理Jenkins-Credentials Binding

    凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有 仓库密码等,以便Jenkins可以和这些第三方的应用进行交互
    jenkins自动化CICD_第17张图片jenkins自动化CICD_第18张图片

    Username with password:用户名和密码
    SSH Username with private key:使用ssh用户和密钥
    Secret file:需要保密的文件文件
    Secret text:需要保存的一个加密文本串
    Certficate:通过上传证书文本方式

  3. 安装Git插件和Git工具

    为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在CentOS7上 安装Git工具。
    jenkins自动化CICD_第19张图片

    CentOS7上安装Git工具:

    yum install git -y 安装
    git --version 安装后查看版本
    
  4. 安装Maven来编译和打包项目

    Maven项目构建安装Maven Integration插件
    jenkins自动化CICD_第20张图片

    安装Maven

    tar -xzf apache-maven-3.6.2-bin.tar.gz -C /data/
    mv apache-maven-3.6.2/* /data/maven
    创建本地仓库目录
    mkdir /data/maven/repo 
    vi /data/mavenconf/settings.xml
    

    在这里插入图片描述

    添加阿里云私服地址:
    jenkins自动化CICD_第21张图片

    配置环境变量

    vim /etc/profile
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export 	MAVEN_HOME=/opt/maven export 	PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
    source /etc/profile
    

    查找Maven版本

    mvn -v 
    
  5. 全局工具配置关联JDK和Maven

    Jenkins->Global Tool Configuration->JDK->新增JDK
    jenkins自动化CICD_第22张图片

    Jenkins->Global Tool Configuration->Maven->新增Maven
    jenkins自动化CICD_第23张图片

    添加Jenkins全局变量
    Manage Jenkins->Configure System->Global Properties
    jenkins自动化CICD_第24张图片

    测试Maven是否配置成功
    jenkins自动化CICD_第25张图片

    构建->增加构建步骤->Execute Shell
    jenkins自动化CICD_第26张图片
    jenkins自动化CICD_第27张图片

    再次构建,如果可以把项目打成war包,代表maven环境配置成功啦
    jenkins自动化CICD_第28张图片

  6. Jenkins远程部署到Tomcat的功能Deploy to container

    jenkins自动化CICD_第29张图片

  7. 流水线项目构建安装插件pipeline

    Pipeline,一套运行在Jenkins上的工作流框架,将原来独立运行于单个或者多个节点的 任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作

    jenkins自动化CICD_第30张图片

  8. 邮箱服务器发送构建结果

    Email Extension插件
    在这里插入图片描述

    设置邮箱相关参数
    Manage Jenkins->Configure System
    在这里插入图片描述
    jenkins自动化CICD_第31张图片

    设置Jenkins默认邮箱信息
    jenkins自动化CICD_第32张图片

  9. 代码审查安装SonarQube

    SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检测。

    物理机安装安装SonarQube

    #创建对应数据库
    #建用户
    CREATE USER 'sonar'@'%' IDENTIFIED BY 'sonar';
    #新建库
    CREATE DATABASE `sonar`CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    #用户授权
    GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%';
    
    #安装
    unzip -o -d /data/ sonarqube-6.7.4.zip
    mv sonarqube-6.7.4/* /opt/sonarqube
    #创建sonar用户,必须sonar用于启动,否则报错
    useradd sonar
    chown -R sonar. /data/sonarqube
    

    修改sonar配置文件

    vi /data/sonarqube/conf/sonar.properties
    sonar.jdbc.username=sonar
    sonar.jdbc.password=sonar
    sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar
    #注意:sonar默认监听9000端口,如果9000端口被占用,需要更改。
    

    启动sonar

    cd /opt/sonarqube
    启动
    su sonar ./bin/linux-x86-64/sonar.sh start 
    停止
    su sonar ./bin/linux-x86-64/sonar.sh stop 
    查看状态
    su sonar ./bin/linux-x86-64/sonar.sh status 
    tail -f logs/sonar.logs 查看日志
    

    访问sonar、默认账户:admin/admin
    http://192.168.66.101:9000

    创建token
    jenkins自动化CICD_第33张图片
    #token要记下来后面要使用

    SonaQube关闭审查结果上传到SCM功能
    jenkins自动化CICD_第34张图片

    jenkins安装SonarQube Scanner插件并添加凭证
    jenkins自动化CICD_第35张图片

    凭据配置添加凭证
    jenkins自动化CICD_第36张图片jenkins自动化CICD_第37张图片

    Jenkins进行SonarQube配置
    Manage Jenkins->Configure System->SonarQube servers
    jenkins自动化CICD_第38张图片

    Manage Jenkins->Global Tool Configuration

    jenkins自动化CICD_第39张图片

  10. Publish Over SSH 插件,实现远程发送Shell命令
    jenkins自动化CICD_第40张图片

    配置远程部署服务器

    拷贝公钥到远程服务器

    ssh-copy-id 192.168.66.103
    

    系统配置->添加远程服务器
    jenkins自动化CICD_第41张图片

  11. NodeJS插件

    jenkins自动化CICD_第42张图片

    Jenkins配置Nginx服务器
    Manage Jenkins->Global Tool Configuration
    jenkins自动化CICD_第43张图片

  12. Extended Choice Parameter插件支持多选框

    jenkins自动化CICD_第44张图片

  13. 安装插件kubernetes

    用于动态创建代理
    jenkins自动化CICD_第45张图片

  14. 安装插件BlueOcean

    Jenkins团队从用户体验角度出发,专为Jenkins Pipeline重新设计的一套 UI 界面,仍 然兼容以前的 fressstyle类型的job,

    BlueOcean 具有以下的一些特性:
    连续交付(CD)Pipeline 的复杂可视化,允许快速直观的了解 Pipeline 的状态
    可以通过 Pipeline 编辑器直观的创建 Pipeline
    需要干预或者出现问题时快速定位,BlueOcean 显示了 Pipeline 需要注意的地方, 便于异常处理和提高生产力
    用于分支和拉取请求的本地集成可以在 GitHub 或者 Bitbucket 中与其他人进行 代码协作时最大限度提高开发人员的生产力。
    jenkins自动化CICD_第46张图片

使用

管理用户权限插件:Role-based Authorization Strategy

  1. 创建用户

    jenkins自动化CICD_第47张图片

  2. 给用户分配角色

    进入Mannage and Assign->Assign Roles
    jenkins自动化CICD_第48张图片

  3. 创建项目测试权限

    以itcast管理员账户创建两个项目,分别为itcast01和itheima01
    结果为:
    jenkins自动化CICD_第49张图片

    eric用户登录,只能看到itcast01项目
    jack用户登录,只能看到itheima01项目

Jenkins凭证管理

凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码 等,以便Jenkins可以和这些第三方的应用进行交互

  1. 创建凭证

    Jenkins->凭证->系统->全局凭证->添加凭证
    jenkins自动化CICD_第50张图片

  2. 普通类型

    jenkins自动化CICD_第51张图片

  3. SSH密钥类型

    #使用root用户生成公钥和私钥
    ssh-keygen -t rsa
    #在/root/.ssh/目录保存了公钥和使用
    id_rsa:私钥文件
    id_rsa.pub:公钥文件
    

    把生成的公钥放在Gitlab中
    root账户登录->点击头像->Settings->SSH Keys
    复制刚才id_rsa.pub文件的内容到这里,点击"Add Key"
    jenkins自动化CICD_第52张图片

    在Jenkins中添加凭证,配置私钥
    在Jenkins添加一个新的凭证,类型为"SSH Username with private key",把 刚才生成私有文件内容复制过来
    jenkins自动化CICD_第53张图片

  4. 测试凭证是否可用

    创建一个FreeStyle项目:新建Item->FreeStyle Project->确定
    jenkins自动化CICD_第54张图片

    找到"源码管理"->“Git”,在Repository URL复制Gitlab中的项目URL
    jenkins自动化CICD_第55张图片jenkins自动化CICD_第56张图片

    jenkins自动化CICD_第57张图片

    点击构建”Build Now“ 开始构建项目
    jenkins自动化CICD_第58张图片
    jenkins自动化CICD_第59张图片

    查看/var/lib/jenkins/workspace/目录,成功拉取了代码到Jenkins中

构建项目

自由风格软件项目(FreeStyle Project)

拉取代码->编译->打包->部署

  1. 拉取代码

    1)创建项目
    在这里插入图片描述

    2)配置源码管理,从gitlab拉取代码
    jenkins自动化CICD_第60张图片

  2. 编译打包

    构建->添加构建步骤->Executor Shell

    echo "开始编译和打包"
    mvn clean package
    echo "编译和打包结束"
    
  3. 部署

    把项目部署到远程的Tomcat里面
    1)安装 Deploy to container插件
    Jenkins本身无法实现远程部署到Tomcat的功能,
    需要安装Deploy to container插件实现
    jenkins自动化CICD_第61张图片

    2)添加Tomcat用户凭证
    jenkins自动化CICD_第62张图片

    3)添加构建后操作
    jenkins自动化CICD_第63张图片
    jenkins自动化CICD_第64张图片

    点击"Build Now",开始构建过程

    4)部署成功后,访问项目

Maven项目(Maven Project)
1)安装Maven Integration插件
2)创建Maven项目
jenkins自动化CICD_第65张图片

3)配置项目
拉取代码和远程部署的过程和自由风格项目一样,只是"构建"部分不同
jenkins自动化CICD_第66张图片

4)添加Tomcat用户凭证
jenkins自动化CICD_第67张图片

5)添加构建后操作
jenkins自动化CICD_第68张图片
jenkins自动化CICD_第69张图片
jenkins自动化CICD_第70张图片

点击"Build Now",开始构建过程
6)部署成功后,访问项目

流水线项目(Pipeline Project)
Pipeline,一套运行在Jenkins上的工作流框架,将原来独立运行于单个或者多个节点的 任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作

  1. 语法使用

    1)声明式Declarative
    jenkins自动化CICD_第71张图片

    pipeline {
    agent any
    #代表整个流水线的所有执行阶段,一般只有一个
    stages {
    #某个阶段,可能出现n个,一般分为拉取代码,编译构建,部署等阶段
    stage('拉取代码') {
    #阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等
    steps {
    checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '68f2087f-a034-4d39-a9ff-1f776dd3dfa8', url: '[email protected]:itheima_group/web_demo.git']]])
    }
    }
    stage('编译构建') {
    steps {
    sh label: '', script: 'mvn clean package'
    }
    }
    stage('项目部署') {
    steps {
    deploy adapters: [tomcat8(credentialsId: 'afc43e5e-4a4e-4de6-984f- b1d5a254e434', path: '', url: 'http://192.168.66.102:8080')], contextPath: null, war: 'target/*.war'
    }
    }
    }
    }
    

    2)脚本式Scripted Pipeline
    jenkins自动化CICD_第72张图片

    #一个Node就是一个 Jenkins 节点,Master 或者 Agent,是执行 Step 的具体运行环境
    node {
    def mvnHome
    #每个 Stage 代表一组操作
    stage('Preparation') {
    }
    stage('Build') {
    }
    stage('Results') { 
    }
    }
    
  2. 安装Pipeline插件

  3. 创建项目

    jenkins自动化CICD_第73张图片

  4. 在代码中引用该文件或者用web界面操作写入

    jenkins自动化CICD_第74张图片

构建触发器

触发远程构建

  1. 通过远程地址触发

    jenkins自动化CICD_第75张图片

    触发构建url:http://192.168.66.101:8888/job/web_demo_pipeline/build?token=6666

其他工程构建后触发

  1. 创建pre_job流水线工程

    jenkins自动化CICD_第76张图片

  2. 配置需要触发的工程

    jenkins自动化CICD_第77张图片

定时构建
jenkins自动化CICD_第78张图片

定时字符串从左往右分别为: 分 时 日 月 周
#一些定时表达式的例子:
每30分钟构建一次:H代表形参 H/30 * * * * 10:02 10:32
每2个小时构建一次: H H/2 * * *
每天的8点,12点,22点:0 8,12,22 * * *
每天中午12点定时构建一次 H 12 * * *
每天下午18点定时构建一次 H 18 * * *
在每个小时的前半个小时内的每10分钟 H(0-29)/10 * * * *
轮询SCM
轮询SCM,是指定时扫描本地代码仓库的代码是否有变更,如果代码有变更就触发项目构建。
注意:这次构建触发器,Jenkins会定时扫描本地整个项目的代码,增大系统的开销,不建议使用。
jenkins自动化CICD_第79张图片

参数化构建
有时在项目构建的过程中,我们需要根据用户的输入动态传入一些参数,从而影响 整个构建结果,这时我们可以使用参数化构建
jenkins自动化CICD_第80张图片

jenkins自动化CICD_第81张图片
jenkins自动化CICD_第82张图片

多选框
字符串参数:分支名称
jenkins自动化CICD_第83张图片

多选框:项目名称

jenkins自动化CICD_第84张图片

jenkins自动化CICD_第85张图片
jenkins自动化CICD_第86张图片jenkins自动化CICD_第87张图片

最后效果:
jenkins自动化CICD_第88张图片

代码审查安装SonarQube

SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检测。
(非流水线项目)在项目添加SonaQube代码审查

  1. 添加构建步骤:

    #在给定的SonarQube实例中必须是唯一的
    sonar.projectKey=web_demo_cxk
    sonar.projectName=web_demo_cxk
    sonar.projectVersion=1.0 
    #审查代码项目/下面那些目录当前
    sonar.sources=. 
    #在上面审查的目录下排除那些目录
    sonar.exclusions=**/test/**,**/target/** 
    sonar.java.source=1.8 
    sonar.java.target=1.8 
    sonar.sourceEncoding=UTF-8
    

    (流水线项目)在项目添加SonaQube代码审查
    项目根目录下,创建sonar-project.properties文件
    jenkins自动化CICD_第89张图片

    #在给定的SonarQube实例中必须是唯一的
    sonar.projectKey=web_demo_cxk
    sonar.projectName=web_demo_cxk
    sonar.projectVersion=1.0 
    #审查代码项目/下面那些目录当前
    sonar.sources=. 
    #在上面审查的目录下排除那些目录
    sonar.exclusions=**/test/**,**/target/** 
    sonar.java.source=1.8 
    sonar.java.target=1.8 
    sonar.sourceEncoding=UTF-8
    

    修改Jenkinsfile,加入SonarQube代码审查阶段

    pipeline { 
    agent any 
    stages { 
    stage('拉取代码') { 
    steps { 
    checkout([$class: 'GitSCM', branches: [[name: '*/master']], 
    doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], 
    userRemoteConfigs: [[credentialsId: '68f2087f-a034-4d39-a9ff-1f776dd3dfa8', url: 
    '[email protected]:itheima_group/web_demo.git']]]) 
    } 
    }
    stage('编译构建') { 
    steps { 
    sh label: '', script: 'mvn clean package' 
    } 
    }
    stage('SonarQube代码审查') { 
    steps{ 
    script { 
    scannerHome = tool 'sonarqube-scanner' 
    }
    withSonarQubeEnv('sonarqube6.7.4') { 
    sh """ 
    cd ${project_name} 	${scannerHome}/bin/sonar-scanner
    """
    } 
    } 
    }
    stage('项目部署') { 
    steps { 
    deploy adapters: [tomcat8(credentialsId: 'afc43e5e-4a4e-4de6-984f- 
    b1d5a254e434', path: '', url: 'http://192.168.66.102:8080')], contextPath: null, 
    war: 'target/*.war' 
    } 
    } 
    }
    post { 
    always { 
    emailext( 
    subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - 
    ${BUILD_STATUS}!', 
    body: '${FILE,path="email.html"}', 
    to: '[email protected]' 
    ) 
    } 
    } 
    } 
    

    构建后到SonarQube的UI界面查看审查结果
    jenkins自动化CICD_第90张图片

邮箱服务器发送构建结果

  1. 安装插件Email Extension插件

  2. 设置邮箱相关参数

  3. 准备邮件内容

    在项目根目录编写email.html,并把文件推送到

    Gitlab,内容如下:
    <!DOCTYPE html> 
     
    
    "UTF-8"> 
    $<span class="token punctuation">{</span>ENV<span class="token punctuation">,</span> <span class="token keyword">var</span>=<span class="token string">"JOB_NAME"</span><span class="token punctuation">}</span><span class="token operator">-</span>第$<span class="token punctuation">{</span>BUILD_NUMBER<span class="token punctuation">}</span>次构建日志<<span class="token operator">/</span>title> 
    <<span class="token operator">/</span>head> 
    <body leftmargin=<span class="token string">"8"</span> marginwidth=<span class="token string">"0"</span> topmargin=<span class="token string">"8"</span> marginheight=<span class="token string">"4"</span> 
    offset=<span class="token string">"0"</span>> 
    <table width=<span class="token string">"95%"</span> cellpadding=<span class="token string">"0"</span> cellspacing=<span class="token string">"0"</span> 
    style=<span class="token string">"font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans- 
    serif"</span>> 
    <tr>
    <td><span class="token punctuation">(</span>本邮件是程序自动下发的,请勿回复!<span class="token punctuation">)</span><<span class="token operator">/</span>td> 
    <<span class="token operator">/</span>tr> 
    <tr>
    <td><h2> 
    <font color=<span class="token string">"#0000FF"</span>>构建结果 <span class="token operator">-</span> $<span class="token punctuation">{</span>BUILD_STATUS<span class="token punctuation">}</span><<span class="token operator">/</span>font> 
    <<span class="token operator">/</span>h2><<span class="token operator">/</span>td> 
    <<span class="token operator">/</span>tr> 
    <tr>
    <td><br <span class="token operator">/</span>> 
    <b><font color=<span class="token string">"#0B610B"</span>>构建信息<<span class="token operator">/</span>font><<span class="token operator">/</span>b> 
    <hr size=<span class="token string">"2"</span> width=<span class="token string">"100%"</span> align=<span class="token string">"center"</span> <span class="token operator">/</span>><<span class="token operator">/</span>td> 
    <<span class="token operator">/</span>tr> 
    <tr>
    <td>
    <ul>
    <li>项目名称 : $<span class="token punctuation">{</span>PROJECT_NAME<span class="token punctuation">}</span><<span class="token operator">/</span>li> 
    <li>构建编号 : 第$<span class="token punctuation">{</span>BUILD_NUMBER<span class="token punctuation">}</span>次构建<<span class="token operator">/</span>li> 
    <li>触发原因: $<span class="token punctuation">{</span>CAUSE<span class="token punctuation">}</span><<span class="token operator">/</span>li> 
    <li>构建日志: <a 
    href=<span class="token string">"${BUILD_URL}console"</span>>$<span class="token punctuation">{</span>BUILD_URL<span class="token punctuation">}</span>console<<span class="token operator">/</span>a><<span class="token operator">/</span>li> 
    <li>构建  Url : <a 
    href=<span class="token string">"${BUILD_URL}"</span>>$<span class="token punctuation">{</span>BUILD_URL<span class="token punctuation">}</span><<span class="token operator">/</span>a><<span class="token operator">/</span>li> 
    <li>工作目录 : <a 
    href=<span class="token string">"${PROJECT_URL}ws"</span>>$<span class="token punctuation">{</span>PROJECT_URL<span class="token punctuation">}</span>ws<<span class="token operator">/</span>a><<span class="token operator">/</span>li> 
    <li>项目  Url : <a 
    href=<span class="token string">"${PROJECT_URL}"</span>>$<span class="token punctuation">{</span>PROJECT_URL<span class="token punctuation">}</span><<span class="token operator">/</span>a><<span class="token operator">/</span>li> 
    <<span class="token operator">/</span>ul> 
    <<span class="token operator">/</span>td> 
    <<span class="token operator">/</span>tr> 
    <tr>
    <td><b><font color=<span class="token string">"#0B610B"</span>>Changes Since Last 
    Successful Build:<<span class="token operator">/</span>font><<span class="token operator">/</span>b> 
    <hr size=<span class="token string">"2"</span> width=<span class="token string">"100%"</span> align=<span class="token string">"center"</span> <span class="token operator">/</span>><<span class="token operator">/</span>td> 
    <<span class="token operator">/</span>tr>
    <tr>
    <td>
    <ul>
    <li>历史变更记录 : <a 
    href=<span class="token string">"${PROJECT_URL}changes"</span>>$<span class="token punctuation">{</span>PROJECT_URL<span class="token punctuation">}</span>changes<<span class="token operator">/</span>a><<span class="token operator">/</span>li> 
    <<span class="token operator">/</span>ul> $<span class="token punctuation">{</span>CHANGES_SINCE_LAST_SUCCESS<span class="token punctuation">,</span>reverse=true<span class="token punctuation">,</span> format=<span class="token string">"Changes for 
    Build #%n:<br />%c<br />"</span><span class="token punctuation">,</span>showPaths=true<span class="token punctuation">,</span>changesFormat=<span class="token string">"<pre>[%a]<br 
    />%m</pre>"</span><span class="token punctuation">,</span>pathFormat=<span class="token string">"    %p"</span><span class="token punctuation">}</span> 
    <<span class="token operator">/</span>td> 
    <<span class="token operator">/</span>tr> 
    <tr>
    <td><b>Failed Test Results<<span class="token operator">/</span>b> 
    <hr size=<span class="token string">"2"</span> width=<span class="token string">"100%"</span> align=<span class="token string">"center"</span> <span class="token operator">/</span>><<span class="token operator">/</span>td> 
    <<span class="token operator">/</span>tr> 
    <tr>
    <td><pre
    style=<span class="token string">"font-size: 11pt; font-family: Tahoma, Arial, Helvetica, 
    sans-serif"</span>><span class="token variable">$FAILED_TESTS</span><<span class="token operator">/</span>pre> 
    <br <span class="token operator">/</span>><<span class="token operator">/</span>td> 
    <<span class="token operator">/</span>tr> 
    <tr>
    <td><b><font color=<span class="token string">"#0B610B"</span>>构建日志 <span class="token punctuation">(</span>最后 100行<span class="token punctuation">)</span>:<<span class="token operator">/</span>font><<span class="token operator">/</span>b> 
    <hr size=<span class="token string">"2"</span> width=<span class="token string">"100%"</span> align=<span class="token string">"center"</span> <span class="token operator">/</span>><<span class="token operator">/</span>td> 
    <<span class="token operator">/</span>tr> 
    <tr>
    <td><textarea cols=<span class="token string">"80"</span> rows=<span class="token string">"30"</span> readonly=<span class="token string">"readonly"</span> 
    style=<span class="token string">"font-family: Courier New"</span>>$<span class="token punctuation">{</span>BUILD_LOG<span class="token punctuation">,</span> 
    maxLines=100<span class="token punctuation">}</span><<span class="token operator">/</span>textarea> 
    <<span class="token operator">/</span>td> 
    <<span class="token operator">/</span>tr> 
    <<span class="token operator">/</span>table> 
    <<span class="token operator">/</span>body> 
    <<span class="token operator">/</span>html>
    </code></pre> <p>编写Jenkinsfile添加构建后发送邮件</p> <pre><code class="prism language-powershell">pipeline <span class="token punctuation">{</span> 
    agent any
    stages <span class="token punctuation">{</span> 
    stage<span class="token punctuation">(</span><span class="token string">'拉取代码'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    steps <span class="token punctuation">{</span> 
    checkout<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token variable">$class</span>: <span class="token string">'GitSCM'</span><span class="token punctuation">,</span> branches: <span class="token punctuation">[</span><span class="token punctuation">[</span>name: <span class="token string">'*/master'</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">,</span> 
    doGenerateSubmoduleConfigurations: false<span class="token punctuation">,</span> extensions: <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> submoduleCfg: <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> 
    userRemoteConfigs: <span class="token punctuation">[</span><span class="token punctuation">[</span>credentialsId: <span class="token string">'68f2087f-a034-4d39-a9ff-1f776dd3dfa8'</span><span class="token punctuation">,</span> url: 
    <span class="token string">'git@192.168.66.100:itheima_group/web_demo.git'</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span> 
    <span class="token punctuation">}</span> 
    <span class="token punctuation">}</span>
    stage<span class="token punctuation">(</span><span class="token string">'编译构建'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 
    steps <span class="token punctuation">{</span> 
    sh label: <span class="token string">''</span><span class="token punctuation">,</span> script: <span class="token string">'mvn clean package'</span> 
    <span class="token punctuation">}</span> 
    <span class="token punctuation">}</span>
    stage<span class="token punctuation">(</span><span class="token string">'项目部署'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 
    steps <span class="token punctuation">{</span> 
    deploy adapters: <span class="token punctuation">[</span>tomcat8<span class="token punctuation">(</span>credentialsId: <span class="token string">'afc43e5e-4a4e-4de6-984f- 
    b1d5a254e434'</span><span class="token punctuation">,</span> path: <span class="token string">''</span><span class="token punctuation">,</span> url: <span class="token string">'http://192.168.66.102:8080'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span> contextPath: null<span class="token punctuation">,</span> 
    war: <span class="token string">'target/*.war'</span> 
    <span class="token punctuation">}</span> 
    <span class="token punctuation">}</span> 
    <span class="token punctuation">}</span>
    post <span class="token punctuation">{</span> 
    always <span class="token punctuation">{</span> 
    emailext<span class="token punctuation">(</span> 
    subject: <span class="token string">'构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - 
    ${BUILD_STATUS}!'</span><span class="token punctuation">,</span> 
    body: <span class="token string">'${FILE,path="email.html"}'</span><span class="token punctuation">,</span> 
    to: <span class="token string">'xxx@qq.com'</span> 
    <span class="token punctuation">)</span> 
    <span class="token punctuation">}</span> 
    <span class="token punctuation">}</span> 
    <span class="token punctuation">}</span>
    </code></pre> </li> 
       <li> <p>测试<br> <a href="http://img.e-com-net.com/image/info8/c0c4133ce991471f9c1c138fc157e103.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/c0c4133ce991471f9c1c138fc157e103.jpg" alt="jenkins自动化CICD_第91张图片" width="491" height="396" style="border:1px solid black;"></a></p> </li> 
      </ol> 
      <blockquote> 
       <p>喜欢的亲可以关注点赞评论哦!以后每天都会更新的哦!本文为小编原创文章; 文章中用到的文件、安装包等可以加小编联系方式获得;<br> 欢迎来交流小编联系方式VX:CXKLittleBrother 进入运维交流群</p> 
      </blockquote> 
     </div> 
    </div>
                                </div>
                            </div>
                        </div>
                        <!--PC和WAP自适应版-->
                        <div id="SOHUCS" sid="1495934468165271552"></div>
                        <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                        <!-- 文章页-底部 动态广告位 -->
                        <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                    </div>
                    <div class="col-md-3">
                        <div class="row" id="ad">
                            <!-- 文章页-右侧1 动态广告位 -->
                            <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                                <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                            </div>
                            <!-- 文章页-右侧2 动态广告位 -->
                            <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                                <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                            </div>
                            <!-- 文章页-右侧3 动态广告位 -->
                            <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                                <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="container">
            <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(jenkins,运维,linux)</h4>
            <div id="paradigm-article-related">
                <div class="recommend-post mb30">
                    <ul class="widget-links">
                        <li><a href="/article/1835513699826233344.htm"
                               title="android系统selinux中添加新属性property" target="_blank">android系统selinux中添加新属性property</a>
                            <span class="text-muted">辉色投像</span>
    
                            <div>1.定位/android/system/sepolicy/private/property_contexts声明属性开头:persist.charge声明属性类型:u:object_r:system_prop:s0图12.定位到android/system/sepolicy/public/domain.te删除neverallow{domain-init}default_prop:property</div>
                        </li>
                        <li><a href="/article/1835509391361667072.htm"
                               title="Linux下QT开发的动态库界面弹出操作(SDL2)" target="_blank">Linux下QT开发的动态库界面弹出操作(SDL2)</a>
                            <span class="text-muted">13jjyao</span>
    <a class="tag" taget="_blank" href="/search/QT%E7%B1%BB/1.htm">QT类</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/sdl2/1.htm">sdl2</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                            <div>需求:操作系统为linux,开发框架为qt,做成需带界面的qt动态库,调用方为java等非qt程序难点:调用方为java等非qt程序,也就是说调用方肯定不带QApplication::exec(),缺少了这个,QTimer等事件和QT创建的窗口将不能弹出(包括opencv也是不能弹出);这与qt调用本身qt库是有本质的区别的思路:1.调用方缺QApplication::exec(),那么我们在接口</div>
                        </li>
                        <li><a href="/article/1835504596898902016.htm"
                               title="linux sdl windows.h,Windows下的SDL安装" target="_blank">linux sdl windows.h,Windows下的SDL安装</a>
                            <span class="text-muted">奔跑吧linux内核</span>
    <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/sdl/1.htm">sdl</a><a class="tag" taget="_blank" href="/search/windows.h/1.htm">windows.h</a>
                            <div>首先你要下载并安装SDL开发包。如果装在C盘下,路径为C:\SDL1.2.5如果在WINDOWS下。你可以按以下步骤:1.打开VC++,点击"Tools",Options2,点击directories选项3.选择"Includefiles"增加一个新的路径。"C:\SDL1.2.5\include"4,现在选择"Libaryfiles“增加"C:\SDL1.2.5\lib"现在你可以开始编写你的第</div>
                        </li>
                        <li><a href="/article/1835503712899002368.htm"
                               title="linux中sdl的使用教程,sdl使用入门" target="_blank">linux中sdl的使用教程,sdl使用入门</a>
                            <span class="text-muted">Melissa Corvinus</span>
    <a class="tag" taget="_blank" href="/search/linux%E4%B8%ADsdl%E7%9A%84%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/1.htm">linux中sdl的使用教程</a>
                            <div>本文通过一个简单示例讲解SDL的基本使用流程。示例中展示一个窗口,窗口里面有个随机颜色快随机移动。当我们鼠标点击关闭按钮时间窗口关闭。基本步骤如下:1.初始化SDL并创建一个窗口。SDL_Init()初始化SDL_CreateWindow()创建窗口2.纹理渲染存储RGB和存储纹理的区别:比如一个从左到右由红色渐变到蓝色的矩形,用存储RGB的话就需要把矩形中每个点的具体颜色值存储下来;而纹理只是一</div>
                        </li>
                        <li><a href="/article/1835502578050363392.htm"
                               title="PHP环境搭建详细教程" target="_blank">PHP环境搭建详细教程</a>
                            <span class="text-muted">好看资源平台</span>
    <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a>
                            <div>PHP是一个流行的服务器端脚本语言,广泛用于Web开发。为了使PHP能够在本地或服务器上运行,我们需要搭建一个合适的PHP环境。本教程将结合最新资料,介绍在不同操作系统上搭建PHP开发环境的多种方法,包括Windows、macOS和Linux系统的安装步骤,以及本地和Docker环境的配置。1.PHP环境搭建概述PHP环境的搭建主要分为以下几类:集成开发环境:例如XAMPP、WAMP、MAMP,这</div>
                        </li>
                        <li><a href="/article/1835501948011376640.htm"
                               title="使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)" target="_blank">使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)</a>
                            <span class="text-muted">编程经验分享</span>
    <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/1.htm">开发工具</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/ssh/1.htm">ssh</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                            <div>目录前言基本使用教程新建远程连接连接主机自定义命令路由追踪前言后端开发,必然需要和服务器打交道,部署应用,排查问题,查看运行日志等等。一般服务器都是集中部署在机房中,也有一些直接是云服务器,总而言之,程序员不可能直接和服务器直接操作,一般都是通过ssh连接来登录服务器。刚接触远程连接时,使用的是XSHELL来远程连接服务器,连接上就能够操作远程服务器了,但是仅用XSHELL并没有上传下载文件的功能</div>
                        </li>
                        <li><a href="/article/1835493373906087936.htm"
                               title="libyuv之linux编译" target="_blank">libyuv之linux编译</a>
                            <span class="text-muted">jaronho</span>
    <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                            <div>文章目录一、下载源码二、编译源码三、注意事项1、银河麒麟系统(aarch64)(1)解决armv8-a+dotprod+i8mm指令集支持问题(2)解决armv9-a+sve2指令集支持问题一、下载源码到GitHub网站下载https://github.com/lemenkov/libyuv源码,或者用直接用git克隆到本地,如:gitclonehttps://github.com/lemenko</div>
                        </li>
                        <li><a href="/article/1835489588169240576.htm"
                               title="ARM驱动学习之5 LEDS驱动" target="_blank">ARM驱动学习之5 LEDS驱动</a>
                            <span class="text-muted">JT灬新一</span>
    <a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/C/1.htm">C</a><a class="tag" taget="_blank" href="/search/%E5%BA%95%E5%B1%82/1.htm">底层</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a>
                            <div>ARM驱动学习之5LEDS驱动知识点:•linuxGPIO申请函数和赋值函数–gpio_request–gpio_set_value•三星平台配置GPIO函数–s3c_gpio_cfgpin•GPIO配置输出模式的宏变量–S3C_GPIO_OUTPUT注意点:DRIVER_NAME和DEVICE_NAME匹配。实现步骤:1.加入需要的头文件://Linux平台的gpio头文件#include//三</div>
                        </li>
                        <li><a href="/article/1835485681187647488.htm"
                               title="【华为OD技术面试真题精选 - 非技术题】 -HR面,综合面_华为od hr面" target="_blank">【华为OD技术面试真题精选 - 非技术题】 -HR面,综合面_华为od hr面</a>
                            <span class="text-muted">一个射手座的程序媛</span>
    <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a>
                            <div>最后的话最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!资料预览给大家整理的视频资料:给大家整理的电子书资料:如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以点击这里获</div>
                        </li>
                        <li><a href="/article/1835482277870661632.htm"
                               title="简介Shell、zsh、bash" target="_blank">简介Shell、zsh、bash</a>
                            <span class="text-muted">zhaosuningsn</span>
    <a class="tag" taget="_blank" href="/search/Shell/1.htm">Shell</a><a class="tag" taget="_blank" href="/search/zsh/1.htm">zsh</a><a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a>
                            <div>Shell是Linux和Unix的外壳,类似衣服,负责外界与Linux和Unix内核的交互联系。例如接收终端用户及各种应用程序的命令,把接收的命令翻译成内核能理解的语言,传递给内核,并把内核处理接收的命令的结果返回给外界,即Shell是外界和内核沟通的桥梁或大门。Linux和Unix提供了多种Shell,其中有种bash,当然还有其他好多种。Mac电脑中不但有bash,还有一个zsh,预装的,据说</div>
                        </li>
                        <li><a href="/article/1835479000600899584.htm"
                               title="Linux MariaDB使用OpenSSL安装SSL证书" target="_blank">Linux MariaDB使用OpenSSL安装SSL证书</a>
                            <span class="text-muted">Meta39</span>
    <a class="tag" taget="_blank" href="/search/MySQL/1.htm">MySQL</a><a class="tag" taget="_blank" href="/search/Oracle/1.htm">Oracle</a><a class="tag" taget="_blank" href="/search/MariaDB/1.htm">MariaDB</a><a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/Windows/1.htm">Windows</a><a class="tag" taget="_blank" href="/search/ssl/1.htm">ssl</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/mariadb/1.htm">mariadb</a>
                            <div>进入到证书存放目录,批量删除.pem证书警告:确保已经进入到证书存放目录find.-typef-iname\*.pem-delete查看是否安装OpenSSLopensslversion没有则安装yuminstallopensslopenssl-devel开启SSL编辑/etc/my.cnf文件(没有的话就创建,但是要注意,在/etc/my.cnf.d/server.cnf配置了datadir的,</div>
                        </li>
                        <li><a href="/article/1835469294436184064.htm"
                               title="【从浅识到熟知Linux】Linux发展史" target="_blank">【从浅识到熟知Linux】Linux发展史</a>
                            <span class="text-muted">Jammingpro</span>
    <a class="tag" taget="_blank" href="/search/%E4%BB%8E%E6%B5%85%E5%AD%A6%E5%88%B0%E7%86%9F%E7%9F%A5Linux/1.htm">从浅学到熟知Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                            <div>归属专栏:从浅学到熟知Linux个人主页:Jammingpro每日努力一点点,技术变化看得见文章前言:本篇文章记录Linux发展的历史,因在介绍Linux过程中涉及的其他操作系统及人物,本文对相关内容也有所介绍。文章目录Unix发展史Linux发展史开源Linux官网企业应用情况发行版本在学习Linux前,我们可能都会问Linux从哪里来?它是如何发展的。但在介绍Linux之前,需要先介绍一下Un</div>
                        </li>
                        <li><a href="/article/1835467782687387648.htm"
                               title="linux 发展史" target="_blank">linux 发展史</a>
                            <span class="text-muted">种树的猴子</span>
    <a class="tag" taget="_blank" href="/search/%E5%86%85%E6%A0%B8/1.htm">内核</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">操作系统</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                            <div>linux发展史说明此前对linux认识模糊一知半解,近期通过学习将自己对于linux的发展总结一下方便大家日后的学习。那Linux是目前一款非常火热的开源操作系统,可是linux是什么时候出现的,又是因为什么样的原因被开发出来的呢。以下将对linux的发展历程进行详细的讲解。目录一、Linux发展背景二、UINIX的诞生三、UNIX的重要分支-BSD的诞生四、Minix的诞生五、GNU与Free</div>
                        </li>
                        <li><a href="/article/1835466921470947328.htm"
                               title="Some jenkins settings" target="_blank">Some jenkins settings</a>
                            <span class="text-muted">SnC_</span>
    
                            <div>Jenkins连接到特定gitlabproject的特定branch我采用的方法是在pipeline的script中使用git命令来指定branch。如下:stage('Clonerepository'){steps{gitbranch:'develop',credentialsId:'gitlab-credential-id',url:'http://gitlab.com/repo.git'}}</div>
                        </li>
                        <li><a href="/article/1835466523163062272.htm"
                               title="Linux sh命令" target="_blank">Linux sh命令</a>
                            <span class="text-muted">fengyehongWorld</span>
    <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                            <div>目录一.基本语法二.选项2.1-c字符串中读取内容,并执行2.1.1基本用法2.1.2获取当前目录下失效的超链接2.2-x每个命令执行之前,将其打印出来2.3结合Here文档使用一.基本语法⏹Linux和Unix系统中用于执行shell脚本或运行命令的命令。sh[选项][脚本文件][参数...]⏹选项-c:从字符串中读取内容,并执行。-x:在每个命令执行之前,将其打印出来。-s:从标准流中读取内容</div>
                        </li>
                        <li><a href="/article/1835466270955368448.htm"
                               title="Linux vi常用命令" target="_blank">Linux vi常用命令</a>
                            <span class="text-muted">fengyehongWorld</span>
    <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                            <div>参考资料viコマンド(vimコマンド)リファレンス目录一.保存系命令二.删除系命令三.移动系命令四.复制粘贴系命令一.保存系命令⏹保存并退出:wq⏹强制保存并退出:wq!⏹退出(文件未编辑):q⏹强制退出(忽略已编辑内容):q!⏹另存为:w新文件名二.删除系命令⏹删除当前行dd⏹清空整个文档gg:移动到文档顶部dG:删除到最后一行ggdG三.移动系命令⏹移动到文档顶部gg⏹移动到文档底部#方式1G</div>
                        </li>
                        <li><a href="/article/1835452402178813952.htm"
                               title="Linux查看服务器日志" target="_blank">Linux查看服务器日志</a>
                            <span class="text-muted">TPBoreas</span>
    <a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                            <div>一、tail这个是我最常用的一种查看方式用法如下:tail-n10test.log查询日志尾部最后10行的日志;tail-n+10test.log查询10行之后的所有日志;tail-fn10test.log循环实时查看最后1000行记录(最常用的)一般还会配合着grep用,(实时抓包)例如:tail-fn1000test.log|grep'关键字'(动态抓包)tail-fn1000test.log</div>
                        </li>
                        <li><a href="/article/1835443696431099904.htm"
                               title="笋丁网页自动回复机器人V3.0.0免授权版源码" target="_blank">笋丁网页自动回复机器人V3.0.0免授权版源码</a>
                            <span class="text-muted">希希分享</span>
    <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E5%B8%8C%E7%BD%9158soho_cn/1.htm">软希网58soho_cn</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81%E8%B5%84%E6%BA%90/1.htm">源码资源</a><a class="tag" taget="_blank" href="/search/%E7%AC%8B%E4%B8%81%E7%BD%91%E9%A1%B5%E8%87%AA%E5%8A%A8%E5%9B%9E%E5%A4%8D%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">笋丁网页自动回复机器人</a>
                            <div>笋丁网页机器人一款可设置自动回复,默认消息,调用自定义api接口的网页机器人。此程序后端语言使用Golang,内存占用最高不超过30MB,1H1G服务器流畅运行。仅支持Linux服务器部署,不支持虚拟主机,请悉知!使用自定义api功能需要有一定的建站基础。源码下载:https://download.csdn.net/download/m0_66047725/89754250更多资源下载:关注我。安</div>
                        </li>
                        <li><a href="/article/1835417097660887040.htm"
                               title="Linux CTF逆向入门" target="_blank">Linux CTF逆向入门</a>
                            <span class="text-muted">蚁景网络安全</span>
    <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/CTF/1.htm">CTF</a>
                            <div>1.ELF格式我们先来看看ELF文件头,如果想详细了解,可以查看ELF的manpage文档。关于ELF更详细的说明:e_shoff:节头表的文件偏移量(字节)。如果文件没有节头表,则此成员值为零。sh_offset:表示了该section(节)离开文件头部位置的距离+-------------------+|ELFheader|---++--------->+-------------------</div>
                        </li>
                        <li><a href="/article/1835415332345442304.htm"
                               title="NPM私库搭建-verdaccio(Linux)" target="_blank">NPM私库搭建-verdaccio(Linux)</a>
                            <span class="text-muted">Beam007</span>
    <a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                            <div>1、安装nodelinux服务器安装nodea)、官网下载所需的node版本https://nodejs.org/dist/v14.21.0/b)、解压安装包若下载的是xxx.tar.xz文件,解压命令为tar-xvfxxx.tar.xzc)、修改环境变量修改:/etc/profile文件#SETPATHFORNODEJSexportNODE_HOME=NODEJS解压安装的路径exportPAT</div>
                        </li>
                        <li><a href="/article/1835400463676174336.htm"
                               title="C++常见知识掌握" target="_blank">C++常见知识掌握</a>
                            <span class="text-muted">nfgo</span>
    <a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                            <div>1.Linux软件开发、调试与维护内核与系统结构Linux内核是操作系统的核心,负责管理硬件资源,提供系统服务,它是系统软件与硬件之间的桥梁。主要组成部分包括:进程管理:内核通过调度器分配CPU时间给各个进程,实现进程的创建、调度、终止等操作。使用进程描述符(task_struct)来存储进程信息,包括状态(就绪、运行、阻塞等)、优先级、内存映射等。内存管理:包括物理内存和虚拟内存管理。通过页表映</div>
                        </li>
                        <li><a href="/article/1835399577818198016.htm"
                               title="linux脚本sed替换变量,sed 命令中替换值为shell变量" target="_blank">linux脚本sed替换变量,sed 命令中替换值为shell变量</a>
                            <span class="text-muted">诺坎普之约</span>
    <a class="tag" taget="_blank" href="/search/linux%E8%84%9A%E6%9C%ACsed%E6%9B%BF%E6%8D%A2%E5%8F%98%E9%87%8F/1.htm">linux脚本sed替换变量</a>
                            <div>文章目录sed命令中替换值为shell变量替换基本语法sed中替换使用shell变量总结参考文档sed命令中替换值为shell变量替换基本语法大家都是sed有很多用法,最多就应该是替换一些值了。让我们先回忆sed的替换语法。在sed进行替换的时候sed-i's/old/new/g'1.txtecho"hellooldfrank"|sed's/old/new/g'结果如下:hellonewfrank</div>
                        </li>
                        <li><a href="/article/1835398694636187648.htm"
                               title="RK3229_Android9.0_Box 4G模块EC200A调试" target="_blank">RK3229_Android9.0_Box 4G模块EC200A调试</a>
                            <span class="text-muted">suifen_</span>
    <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                            <div>0、kernel修改这部分完全可以参考Linux的移植:RK3588EC200A-CN【4G模块】调试_rkec200a-cn-CSDN博客1、修改device/rockchip/rk322xdiff--gita/device.mkb/device.mkindexec6bfaa..e7c32d1100755---a/device.mk+++b/device.mk@@-105,6+105,8@@en</div>
                        </li>
                        <li><a href="/article/1835390878806536192.htm"
                               title="linux 安装Sublime Text 3" target="_blank">linux 安装Sublime Text 3</a>
                            <span class="text-muted">hhyiyuanyu</span>
    <a class="tag" taget="_blank" href="/search/Python%E5%AD%A6%E4%B9%A0/1.htm">Python学习</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/sublime/1.htm">sublime</a><a class="tag" taget="_blank" href="/search/text/1.htm">text</a>
                            <div>方法/步骤打开官网http://www.sublimetext.com/3,选择64位进行下载执行命令wgethttps://download.sublimetext.com/sublime_text_3_build_3126_x64.tar.bz2进行下载3、下载完成进行解压,执行tar-xvvfsublime_text_3_build_3126_x64.tar.bz解压4、解压完成以后,移动到</div>
                        </li>
                        <li><a href="/article/1835387473346260992.htm"
                               title="2020年最新程序员职业发展路线指南,超详细!" target="_blank">2020年最新程序员职业发展路线指南,超详细!</a>
                            <span class="text-muted">编程流川枫</span>
    <a class="tag" taget="_blank" href="/search/11/1.htm">11</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/1.htm">编程语言</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E4%BA%92%E8%81%94%E7%BD%91/1.htm">互联网</a><a class="tag" taget="_blank" href="/search/IT/1.htm">IT</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E4%B8%9A/1.htm">职业</a>
                            <div>【文章来源微信公众号:每天学编程】01、程序员的特性技术出身的职场人特性很明显,与做市场、业务出身的职场人区别尤其明显。IT行业中常见的一些职场角色:老板、项目经理、产品经理、需求分析师、设计师、开发工程师、运维工程师等。开发工程师具有如下特征:1、逻辑思维清晰、严谨和细腻;但是有时不容易转弯,有些程序员容易较劲、钻牛角尖。2、性格偏内向、不善于沟通、表达和交际;但是在网络聊天工具上,有些显为幽默</div>
                        </li>
                        <li><a href="/article/1835379662918873088.htm"
                               title="【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(二十八)" target="_blank">【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(二十八)</a>
                            <span class="text-muted">向往风的男子</span>
    <a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                            <div>本站以分享各种运维经验和运维所需要的技能为主《python零基础入门》:python零基础入门学习《python运维脚本》:python运维脚本实践《shell》:shell学习《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战《k8》从问题中去学习k8s《docker学习》暂未更新《ceph学习》ceph日常问题解决分享《日志收集》ELK+各种中间件《运维日常》</div>
                        </li>
                        <li><a href="/article/1835378901174546432.htm"
                               title="KVM虚拟机源代码分析【转】" target="_blank">KVM虚拟机源代码分析【转】</a>
                            <span class="text-muted">xidianjiapei001</span>
    <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E5%8C%96%E6%8A%80%E6%9C%AF/1.htm">虚拟化技术</a>
                            <div>1.KVM结构及工作原理1.1KVM结构KVM基本结构有两部分组成。一个是KVMDriver,已经成为Linux内核的一个模块。负责虚拟机的创建,虚拟内存的分配,虚拟CPU寄存器的读写以及虚拟CPU的运行等。另外一个是稍微修改过的Qemu,用于模拟PC硬件的用户空间组件,提供I/O设备模型以及访问外设的途径。KVM基本结构如图1所示。其中KVM加入到标准的Linux内核中,被组织成Linux中标准</div>
                        </li>
                        <li><a href="/article/1835369569800253440.htm"
                               title="史上最全git命令,git回滚,git命令大全" target="_blank">史上最全git命令,git回滚,git命令大全</a>
                            <span class="text-muted">騒周</span>
    <a class="tag" taget="_blank" href="/search/%E5%85%B6%E4%BB%96/1.htm">其他</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a>
                            <div>git命令大全一、Git整体理解二、由暂存区本地仓库三、由本地仓->远程仓库四、冲突处理五、Git分支操作六、bug的分支七、feature分支八、暂存的使用九、远程仓的操作十、标签的使用十一、Git配置全局信息十二、Linux的一些简单操作和一些符号的解释十三、符号解释十四、显示安装详细信息十五、gitconfig十六、Gitclone十七、Gitinit十八、gitstatus十九、gitre</div>
                        </li>
                        <li><a href="/article/1835369443379736576.htm"
                               title="【显示 后台运行 & 的命令】" target="_blank">【显示 后台运行 & 的命令】</a>
                            <span class="text-muted">晨春计</span>
    <a class="tag" taget="_blank" href="/search/debug/1.htm">debug</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                            <div>目录背景步骤详解示例背景当你在Linuxshell中使用&符号将一个命令放到后台运行时,你可以使用jobs命令来查看这些后台进程的状态。但是,jobs命令并不会直接显示进程的PID(进程ID)。它会显示一个作业列表,其中包括每个作业的状态和一个作业标识符(通常是百分号%后面跟着一个数字),但不会直接显示PID。获取后台进程的PID步骤:1、使用jobs命令查看后台作业。2、使用ps命令配合grep</div>
                        </li>
                        <li><a href="/article/1835369316342657024.htm"
                               title="Android shell 常用 debug 命令" target="_blank">Android shell 常用 debug 命令</a>
                            <span class="text-muted">晨春计</span>
    <a class="tag" taget="_blank" href="/search/Audio/1.htm">Audio</a><a class="tag" taget="_blank" href="/search/debug/1.htm">debug</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                            <div>目录1、查看版本2、am命令3、pm命令4、dumpsys命令5、sed命令6、log定位查看APK进程号7、log定位使用场景1、查看版本1.1、Android串口终端执行getpropro.build.version.release#获取Android版本uname-a#查看linux内核版本信息uname-r#单独查看内核版本1.2、linux服务器执行lsb_release-a#查看Lin</div>
                        </li>
                                    <li><a href="/article/116.htm"
                                           title="ViewController添加button按钮解析。(翻译)" target="_blank">ViewController添加button按钮解析。(翻译)</a>
                                        <span class="text-muted">张亚雄</span>
    <a class="tag" taget="_blank" href="/search/c/1.htm">c</a>
                                        <div><div class="it610-blog-content-contain" style="font-size: 14px"></div>//  ViewController.m 
    //  Reservation software 
    // 
    //  Created by 张亚雄 on 15/6/2. 
    </div>
                                    </li>
                                    <li><a href="/article/243.htm"
                                           title="mongoDB 简单的增删改查" target="_blank">mongoDB 简单的增删改查</a>
                                        <span class="text-muted">开窍的石头</span>
    <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                                        <div>   在上一篇文章中我们已经讲了mongodb怎么安装和数据库/表的创建。在这里我们讲mongoDB的数据库操作 
          在mongo中对于不存在的表当你用db.表名 他会自动统计 
    下边用到的user是表明,db代表的是数据库 
     
          添加(insert): 
    </div>
                                    </li>
                                    <li><a href="/article/370.htm"
                                           title="log4j配置" target="_blank">log4j配置</a>
                                        <span class="text-muted">0624chenhong</span>
    <a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a>
                                        <div>1) 新建java项目 
    2) 导入jar包,项目右击,properties—java build path—libraries—Add External jar,加入log4j.jar包。 
    3) 新建一个类com.hand.Log4jTest 
     
    
    package com.hand;
    
    import org.apache.log4j.Logger;
    
    
    public class </div>
                                    </li>
                                    <li><a href="/article/497.htm"
                                           title="多点触摸(图片缩放为例)" target="_blank">多点触摸(图片缩放为例)</a>
                                        <span class="text-muted">不懂事的小屁孩</span>
    <a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%82%B9%E8%A7%A6%E6%91%B8/1.htm">多点触摸</a>
                                        <div>多点触摸的事件跟单点是大同小异的,上个图片缩放的代码,供大家参考一下 
     
    
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener</div>
                                    </li>
                                    <li><a href="/article/624.htm"
                                           title="有关浏览器窗口宽度高度几个值的解析" target="_blank">有关浏览器窗口宽度高度几个值的解析</a>
                                        <span class="text-muted">换个号韩国红果果</span>
    <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a>
                                        <div>1 元素的 offsetWidth 包括border padding  content  整体的宽度。 
    clientWidth  只包括内容区 padding 不包括border。 
    clientLeft =  offsetWidth -clientWidth  即这个元素border的值 
    offsetLeft  若无已定位的包裹元素</div>
                                    </li>
                                    <li><a href="/article/751.htm"
                                           title="数据库产品巡礼:IBM DB2概览" target="_blank">数据库产品巡礼:IBM DB2概览</a>
                                        <span class="text-muted">蓝儿唯美</span>
    <a class="tag" taget="_blank" href="/search/db2/1.htm">db2</a>
                                        <div>IBM DB2是一个支持了NoSQL功能的关系数据库管理系统,其包含了对XML,图像存储和Java脚本对象表示(JSON)的支持。DB2可被各种类型的企 业使用,它提供了一个数据平台,同时支持事务和分析操作,通过提供持续的数据流来保持事务工作流和分析操作的高效性。 DB2支持的操作系统 
    DB2可应用于以下三个主要的平台: 
      
     
     工作站,DB2可在Linus、Unix、Windo</div>
                                    </li>
                                    <li><a href="/article/878.htm"
                                           title="java笔记5" target="_blank">java笔记5</a>
                                        <span class="text-muted">a-john</span>
    <a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                        <div>控制执行流程: 
    1,true和false 
       利用条件表达式的真或假来决定执行路径。例:(a==b)。它利用条件操作符“==”来判断a值是否等于b值,返回true或false。java不允许我们将一个数字作为布尔值使用,虽然这在C和C++里是允许的。如果想在布尔测试中使用一个非布尔值,那么首先必须用一个条件表达式将其转化成布尔值,例如if(a!=0)。 
    2,if-els</div>
                                    </li>
                                    <li><a href="/article/1005.htm"
                                           title="Web开发常用手册汇总" target="_blank">Web开发常用手册汇总</a>
                                        <span class="text-muted">aijuans</span>
    <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                        <div>一门技术,如果没有好的参考手册指导,很难普及大众。这其实就是为什么很多技术,非常好,却得不到普遍运用的原因。
     正如我们学习一门技术,过程大概是这个样子:
     ①我们日常工作中,遇到了问题,困难。寻找解决方案,即寻找新的技术;
     ②为什么要学习这门技术?这门技术是不是很好的解决了我们遇到的难题,困惑。这个问题,非常重要,我们不是为了学习技术而学习技术,而是为了更好的处理我们遇到的问题,才需要学习新的</div>
                                    </li>
                                    <li><a href="/article/1132.htm"
                                           title="今天帮助人解决的一个sql问题" target="_blank">今天帮助人解决的一个sql问题</a>
                                        <span class="text-muted">asialee</span>
    <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a>
                                        <div>            今天有个人问了一个问题,如下: 
    type     AD      value           
    A  </div>
                                    </li>
                                    <li><a href="/article/1259.htm"
                                           title="意图对象传递数据" target="_blank">意图对象传递数据</a>
                                        <span class="text-muted">百合不是茶</span>
    <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E6%84%8F%E5%9B%BEIntent/1.htm">意图Intent</a><a class="tag" taget="_blank" href="/search/Bundle%E5%AF%B9%E8%B1%A1%E6%95%B0%E6%8D%AE%E7%9A%84%E4%BC%A0%E9%80%92/1.htm">Bundle对象数据的传递</a>
                                        <div>学习意图将数据传递给目标活动; 初学者需要好好研究的 
       
       1,将下面的代码添加到main.xml中 
       
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http:/</div>
                                    </li>
                                    <li><a href="/article/1386.htm"
                                           title="oracle查询锁表解锁语句" target="_blank">oracle查询锁表解锁语句</a>
                                        <span class="text-muted">bijian1013</span>
    <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/object/1.htm">object</a><a class="tag" taget="_blank" href="/search/session/1.htm">session</a><a class="tag" taget="_blank" href="/search/kill/1.htm">kill</a>
                                        <div>一.查询锁定的表 
    如下语句,都可以查询锁定的表 
    语句一: 
    select a.sid,
           a.serial#,
           p.spid,
           c.object_name,
           b.session_id,
           b.oracle_username,
           b.os_user_name
      from v$process p, v$s</div>
                                    </li>
                                    <li><a href="/article/1513.htm"
                                           title="mac osx 10.10 下安装 mysql 5.6 二进制文件[tar.gz]" target="_blank">mac osx 10.10 下安装 mysql 5.6 二进制文件[tar.gz]</a>
                                        <span class="text-muted">征客丶</span>
    <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/osx/1.htm">osx</a>
                                        <div>场景:在 mac osx 10.10 下安装 mysql 5.6 的二进制文件。 
     
    环境:mac osx 10.10、mysql 5.6 的二进制文件 
     
    步骤:[所有目录请从根“/”目录开始取,以免层级弄错导致找不到目录] 
    1、下载 mysql 5.6 的二进制文件,下载目录下面称之为 mysql5.6SourceDir; 
    下载地址:http://dev.mysql.com/downl</div>
                                    </li>
                                    <li><a href="/article/1640.htm"
                                           title="分布式系统与框架" target="_blank">分布式系统与框架</a>
                                        <span class="text-muted">bit1129</span>
    <a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                                        <div>RPC框架 Dubbo 
    什么是Dubbo 
      
    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。其核心部分包含:    远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。    集群容错: 提供基于接</div>
                                    </li>
                                    <li><a href="/article/1767.htm"
                                           title="那些令人蛋痛的专业术语" target="_blank">那些令人蛋痛的专业术语</a>
                                        <span class="text-muted">白糖_</span>
    <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/SSO/1.htm">SSO</a><a class="tag" taget="_blank" href="/search/IOC/1.htm">IOC</a>
                                        <div> 
     spring 
     
    【控制反转(IOC)/依赖注入(DI)】: 
    由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。 
    简单的说:对象的创建又容器(比如spring容器)来执行,程序里不直接new对象。 
     
     Web 
     
    【单点登录(SSO)】:SSO的定义是在多个应用系统中,用户</div>
                                    </li>
                                    <li><a href="/article/1894.htm"
                                           title="《给大忙人看的java8》摘抄" target="_blank">《给大忙人看的java8》摘抄</a>
                                        <span class="text-muted">braveCS</span>
    <a class="tag" taget="_blank" href="/search/java8/1.htm">java8</a>
                                        <div>函数式接口:只包含一个抽象方法的接口 
    lambda表达式:是一段可以传递的代码 
      
      
      
    你最好将一个lambda表达式想象成一个函数,而不是一个对象,并记住它可以被转换为一个函数式接口。 
    事实上,函数式接口的转换是你在Java中使用lambda表达式能做的唯一一件事。 
      
    方法引用:又是要传递给其他代码的操作已经有实现的方法了,这时可以使</div>
                                    </li>
                                    <li><a href="/article/2021.htm"
                                           title="编程之美-计算字符串的相似度" target="_blank">编程之美-计算字符串的相似度</a>
                                        <span class="text-muted">bylijinnan</span>
    <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a>
                                        <div>
    
    public class StringDistance {
    
    	/**
    	 * 编程之美 计算字符串的相似度
    	 * 我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:
    	 * 1.修改一个字符(如把“a”替换为“b”);
    	 * 2.增加一个字符(如把“abdd”变为“aebdd”);
    	 * 3.删除一个字符(如把“travelling”变为“trav</div>
                                    </li>
                                    <li><a href="/article/2148.htm"
                                           title="上传、下载压缩图片" target="_blank">上传、下载压缩图片</a>
                                        <span class="text-muted">chengxuyuancsdn</span>
    <a class="tag" taget="_blank" href="/search/%E4%B8%8B%E8%BD%BD/1.htm">下载</a>
                                        <div>/**
    	 * 
    	 * @param uploadImage --本地路径(tomacat路径)
    	 * @param serverDir   --服务器路径
    	 * @param imageType   --文件或图片类型
    	 * 此方法可以上传文件或图片.txt,.jpg,.gif等
    	 */
    	public void upload(String uploadImage,Str</div>
                                    </li>
                                    <li><a href="/article/2275.htm"
                                           title="bellman-ford(贝尔曼-福特)算法" target="_blank">bellman-ford(贝尔曼-福特)算法</a>
                                        <span class="text-muted">comsci</span>
    <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/F%23/1.htm">F#</a>
                                        <div>Bellman-Ford算法(根据发明者 Richard Bellman 和 Lester Ford 命名)是求解单源最短路径问题的一种算法。单源点的最短路径问题是指:给定一个加权有向图G和源点s,对于图G中的任意一点v,求从s到v的最短路径。有时候这种算法也被称为 Moore-Bellman-Ford 算法,因为 Edward F. Moore zu 也为这个算法的发展做出了贡献。 
     
    与迪科</div>
                                    </li>
                                    <li><a href="/article/2402.htm"
                                           title="oracle ASM中ASM_POWER_LIMIT参数" target="_blank">oracle ASM中ASM_POWER_LIMIT参数</a>
                                        <span class="text-muted">daizj</span>
    <a class="tag" taget="_blank" href="/search/ASM/1.htm">ASM</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/ASM_POWER_LIMIT/1.htm">ASM_POWER_LIMIT</a><a class="tag" taget="_blank" href="/search/%E7%A3%81%E7%9B%98%E5%B9%B3%E8%A1%A1/1.htm">磁盘平衡</a>
                                        <div>ASM_POWER_LIMIT 
    该初始化参数用于指定ASM例程平衡磁盘所用的最大权值,其数值范围为0~11,默认值为1。该初始化参数是动态参数,可以使用ALTER  SESSION或ALTER  SYSTEM命令进行修改。示例如下: 
     
    SQL>ALTER  SESSION  SET   Asm_power_limit=2; 
    </div>
                                    </li>
                                    <li><a href="/article/2529.htm"
                                           title="高级排序:快速排序" target="_blank">高级排序:快速排序</a>
                                        <span class="text-muted">dieslrae</span>
    <a class="tag" taget="_blank" href="/search/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F/1.htm">快速排序</a>
                                        <div>
        public void quickSort(int[] array){
            this.quickSort(array, 0, array.length - 1);
        }
        
        public void quickSort(int[] array,int left,int right){
            if(right - left <= 0</div>
                                    </li>
                                    <li><a href="/article/2656.htm"
                                           title="C语言学习六指针_何谓变量的地址 一个指针变量到底占几个字节" target="_blank">C语言学习六指针_何谓变量的地址 一个指针变量到底占几个字节</a>
                                        <span class="text-muted">dcj3sjt126com</span>
    <a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a>
                                        <div># include <stdio.h>
    
    int main(void)
    {
    	/*
    	1、一个变量的地址只用第一个字节表示
    	2、虽然他只使用了第一个字节表示,但是他本身指针变量类型就可以确定出他指向的指针变量占几个字节了
    	3、他都只存了第一个字节地址,为什么只需要存一个字节的地址,却占了4个字节,虽然只有一个字节,
    		但是这些字节比较多,所以编号就比较大,
    		</div>
                                    </li>
                                    <li><a href="/article/2783.htm"
                                           title="phpize使用方法" target="_blank">phpize使用方法</a>
                                        <span class="text-muted">dcj3sjt126com</span>
    <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                        <div>phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块,下面介绍一个它的使用方法,需要的朋友可以参考下 
    安装(fastcgi模式)的时候,常常有这样一句命令: 
    代码如下: 
    /usr/local/webserver/php/bin/phpize 
      
    一、phpize是干嘛的? 
    phpize是什么? 
    phpize是用来扩展php扩展模块的,通过phpi</div>
                                    </li>
                                    <li><a href="/article/2910.htm"
                                           title="Java虚拟机学习 - 对象引用强度" target="_blank">Java虚拟机学习 - 对象引用强度</a>
                                        <span class="text-muted">shuizhaosi888</span>
    <a class="tag" taget="_blank" href="/search/JAVA%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">JAVA虚拟机</a>
                                        <div> 
     本文原文链接:http://blog.csdn.net/java2000_wl/article/details/8090276 转载请注明出处! 
     无论是通过计数算法判断对象的引用数量,还是通过根搜索算法判断对象引用链是否可达,判定对象是否存活都与“引用”相关。 
     引用主要分为 :强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Wea</div>
                                    </li>
                                    <li><a href="/article/3037.htm"
                                           title=".NET Framework 3.5 Service Pack 1(完整软件包)下载地址" target="_blank">.NET Framework 3.5 Service Pack 1(完整软件包)下载地址</a>
                                        <span class="text-muted">happyqing</span>
    <a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/%E4%B8%8B%E8%BD%BD/1.htm">下载</a><a class="tag" taget="_blank" href="/search/framework/1.htm">framework</a>
                                        <div>  
    Microsoft .NET Framework 3.5 Service Pack 1(完整软件包)  
    http://www.microsoft.com/zh-cn/download/details.aspx?id=25150 
    Microsoft .NET Framework 3.5 Service Pack 1 是一个累积更新,包含很多基于 .NET Framewo</div>
                                    </li>
                                    <li><a href="/article/3164.htm"
                                           title="JAVA定时器的使用" target="_blank">JAVA定时器的使用</a>
                                        <span class="text-muted">jingjing0907</span>
    <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/timer/1.htm">timer</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a><a class="tag" taget="_blank" href="/search/%E5%AE%9A%E6%97%B6%E5%99%A8/1.htm">定时器</a>
                                        <div>1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。 
    对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。 
    privatejava.util.Timer timer; 
    timer = newTimer(true); 
    timer.schedule( 
    newjava.util.TimerTask() { public void run() 
    </div>
                                    </li>
                                    <li><a href="/article/3291.htm"
                                           title="Webbench" target="_blank">Webbench</a>
                                        <span class="text-muted">流浪鱼</span>
    <a class="tag" taget="_blank" href="/search/webbench/1.htm">webbench</a>
                                        <div>首页下载地址 http://home.tiscali.cz/~cz210552/webbench.html 
    Webbench是知名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发。 
    Webbench能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相</div>
                                    </li>
                                    <li><a href="/article/3418.htm"
                                           title="第11章 动画效果(中)" target="_blank">第11章 动画效果(中)</a>
                                        <span class="text-muted">onestopweb</span>
    <a class="tag" taget="_blank" href="/search/%E5%8A%A8%E7%94%BB/1.htm">动画</a>
                                        <div>index.html 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/</div>
                                    </li>
                                    <li><a href="/article/3545.htm"
                                           title="windows下制作bat启动脚本." target="_blank">windows下制作bat启动脚本.</a>
                                        <span class="text-muted">sanyecao2314</span>
    <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/cmd/1.htm">cmd</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a><a class="tag" taget="_blank" href="/search/bat/1.htm">bat</a>
                                        <div>java -classpath C:\dwjj\commons-dbcp.jar;C:\dwjj\commons-pool.jar;C:\dwjj\log4j-1.2.16.jar;C:\dwjj\poi-3.9-20121203.jar;C:\dwjj\sqljdbc4.jar;C:\dwjj\voucherimp.jar com.citsamex.core.startup.MainStart </div>
                                    </li>
                                    <li><a href="/article/3672.htm"
                                           title="Java进行RSA加解密的例子" target="_blank">Java进行RSA加解密的例子</a>
                                        <span class="text-muted">tomcat_oracle</span>
    <a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                        <div>加密是保证数据安全的手段之一。加密是将纯文本数据转换为难以理解的密文;解密是将密文转换回纯文本。     数据的加解密属于密码学的范畴。通常,加密和解密都需要使用一些秘密信息,这些秘密信息叫做密钥,将纯文本转为密文或者转回的时候都要用到这些密钥。     对称加密指的是发送者和接收者共用同一个密钥的加解密方法。     非对称加密(又称公钥加密)指的是需要一个私有密钥一个公开密钥,两个不同的密钥的</div>
                                    </li>
                                    <li><a href="/article/3799.htm"
                                           title="Android_ViewStub" target="_blank">Android_ViewStub</a>
                                        <span class="text-muted">阿尔萨斯</span>
    <a class="tag" taget="_blank" href="/search/ViewStub/1.htm">ViewStub</a>
                                        <div>public final class ViewStub extends View 
     
     
     java.lang.Object 
       
       android.view.View 
         
         android.view.ViewStub 
          
        
     
     类摘要: ViewStub 是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件。当 ViewSt</div>
                                    </li>
                    </ul>
                </div>
            </div>
        </div>
    
    <div>
        <div class="container">
            <div class="indexes">
                <strong>按字母分类:</strong>
                <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                    href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                    href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                    href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                    href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                    href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                    href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                    href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                    href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
            </div>
        </div>
    </div>
    <footer id="footer" class="mb30 mt30">
        <div class="container">
            <div class="footBglm">
                <a target="_blank" href="/">首页</a> -
                <a target="_blank" href="/custom/about.htm">关于我们</a> -
                <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
                <a target="_blank" href="/sitemap.txt">Sitemap</a> -
                <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
            </div>
            <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
    <!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
            </div>
        </div>
    </footer>
    <!-- 代码高亮 -->
    <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
    <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
    <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
    <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
    <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>
    
    
    
    
    
    </body>
    
    </html><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>