服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本

准备工作:
下载jenkins安装包,地址:jenkins的rpm安装包
下载maven安装包,地址:maven下载地址
下载jdk8和jdk17的tar包,地址:jdk下载地址
下载publish-over-ssh安装包,地址:插件下载

将下方内容保存为对应名称文件

vim jenkins

## Path:        Development/Jenkins
## Description: Jenkins Automation Server
## Type:        string
## Default:     "/var/lib/jenkins"
## ServiceRestart: jenkins
#
# Directory where Jenkins store its configuration and working
# files (checkouts, build reports, artifacts, ...).
#
JENKINS_HOME="/var/lib/jenkins"

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Java executable to run Jenkins
# When left empty, we'll try to find the suitable Java.
#
JENKINS_JAVA_CMD=""

## Type:        string
## Default:     "jenkins"
## ServiceRestart: jenkins
#
# Unix user account that runs the Jenkins daemon
# Be careful when you change this, as you need to update
# permissions of $JENKINS_HOME and /var/log/jenkins.
#
JENKINS_USER="root"

## Type:        string
## Default: "false"
## ServiceRestart: jenkins
#
# Whether to skip potentially long-running chown at the
# $JENKINS_HOME location. Do not enable this, "true", unless
# you know what you're doing. See JENKINS-23273.
#
#JENKINS_INSTALL_SKIP_CHOWN="false"

## Type: string
## Default:     "-Djava.awt.headless=true"
## ServiceRestart: jenkins
#
# Options to pass to java when running Jenkins.
#
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"

## Type:        integer(0:65535)
## Default:     8080
## ServiceRestart: jenkins
#
# Port Jenkins is listening on.
# Set to -1 to disable
#
JENKINS_PORT="8080"

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# IP address Jenkins listens on for HTTP requests.
# Default is all interfaces (0.0.0.0).
#
JENKINS_LISTEN_ADDRESS=""

## Type:        integer(0:65535)
## Default:     ""
## ServiceRestart: jenkins
#
# HTTPS port Jenkins is listening on.
# Default is disabled.
#
JENKINS_HTTPS_PORT=""

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Path to the keystore in JKS format (as created by the JDK 'keytool').
# Default is disabled.
#
JENKINS_HTTPS_KEYSTORE=""

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Password to access the keystore defined in JENKINS_HTTPS_KEYSTORE.
# Default is disabled.
#
JENKINS_HTTPS_KEYSTORE_PASSWORD=""

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# IP address Jenkins listens on for HTTPS requests.
# Default is disabled.
#
JENKINS_HTTPS_LISTEN_ADDRESS=""

## Type:        integer(0:65535)
## Default:     ""
## ServiceRestart: jenkins
#
# HTTP2 port Jenkins is listening on.
# Default is disabled.
#
# Notice: HTTP2 support may require additional configuration, see Winstone
# documentation for more information.
#
JENKINS_HTTP2_PORT=""

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# IP address Jenkins listens on for HTTP2 requests.
# Default is disabled.
#
# Notice: HTTP2 support may require additional configuration, see Winstone
# documentation for more information.
#
JENKINS_HTTP2_LISTEN_ADDRESS=""

## Type:        integer(1:9)
## Default:     5
## ServiceRestart: jenkins
#
# Debug level for logs -- the higher the value, the more verbose.
# 5 is INFO.
#
JENKINS_DEBUG_LEVEL="5"

## Type:        yesno
## Default:     no
## ServiceRestart: jenkins
#
# Whether to enable access logging or not.
#
JENKINS_ENABLE_ACCESS_LOG="no"

## Type:        integer
## Default:     100
## ServiceRestart: jenkins
#
# Maximum number of HTTP worker threads.
#
JENKINS_HANDLER_MAX="100"

## Type:        integer
## Default:     20
## ServiceRestart: jenkins
#
# Maximum number of idle HTTP worker threads.
#
JENKINS_HANDLER_IDLE="20"

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Folder for additional jar files to add to the Jetty class loader.
# See Winstone documentation for more information.
# Default is disabled.
#
JENKINS_EXTRA_LIB_FOLDER=""

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Pass arbitrary arguments to Jenkins.
# Full option list: java -jar jenkins.war --help
#
JENKINS_ARGS=""

vim mvn8

#!/bin/sh
JAVA_HOME=/home/jdk8
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# -----------------------------------------------------------------------------
# Apache Maven Startup Script
#
# Environment Variable Prerequisites
#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#   MAVEN_OPTS      (Optional) Java runtime options used when Maven is executed.
#   MAVEN_SKIP_RC   (Optional) Flag to disable loading of mavenrc files.
# -----------------------------------------------------------------------------

if [ -z "$MAVEN_SKIP_RC" ] ; then

  if [ -f /usr/local/etc/mavenrc ] ; then
    . /usr/local/etc/mavenrc
  fi

  if [ -f /etc/mavenrc ] ; then
    . /etc/mavenrc
  fi

  if [ -f "$HOME/.mavenrc" ] ; then
    . "$HOME/.mavenrc"
  fi

fi

# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
mingw=false;
case "`uname`" in
  CYGWIN*) cygwin=true;;
  MINGW*) mingw=true;;
esac

## resolve links - $0 may be a link to Maven's home
PRG="$0"

# need this for relative symlinks
while [ -h "$PRG" ] ; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    PRG="$link"
  else
    PRG="`dirname "$PRG"`/$link"
  fi
done

saveddir=`pwd`

MAVEN_HOME=`dirname "$PRG"`/..

# make it fully qualified
MAVEN_HOME=`cd "$MAVEN_HOME" && pwd`

cd "$saveddir"

# For Cygwin, ensure paths are in Unix format before anything is touched
if $cygwin ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`cygpath --unix "$MAVEN_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi

# For MinGW, ensure paths are in Unix format before anything is touched
if $mingw ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`(cd "$JAVA_HOME"; pwd)`
  # TODO classpath?
fi

if [ -z "$JAVA_HOME" ] ; then
  JAVACMD="`\\unset -f command; \\command -v java`"
else
  JAVACMD="$JAVA_HOME/bin/java"
fi

if [ ! -x "$JAVACMD" ] ; then
  echo "The JAVA_HOME environment variable is not defined correctly," >&2
  echo "this environment variable is needed to run this program." >&2
  exit 1
fi

CLASSWORLDS_JAR=`echo "${MAVEN_HOME}"/boot/plexus-classworlds-*.jar`
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`cygpath --path --windows "$MAVEN_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
  [ -n "$CLASSWORLDS_JAR" ] &&
    CLASSWORLDS_JAR=`cygpath --path --windows "$CLASSWORLDS_JAR"`
fi

# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
(
  basedir=`find_file_argument_basedir "$@"`
  wdir="${basedir}"
  while [ "$wdir" != '/' ] ; do
    if [ -d "$wdir"/.mvn ] ; then
      basedir=$wdir
      break
    fi
    wdir=`cd "$wdir/.."; pwd`
  done
  echo "${basedir}"
)
}

find_file_argument_basedir() {
(
  basedir=`pwd`

  found_file_switch=0
  for arg in "$@"; do
    if [ ${found_file_switch} -eq 1 ]; then
      if [ -d "${arg}" ]; then
        basedir=`cd "${arg}" && pwd -P`
      elif [ -f "${arg}" ]; then
        basedir=`dirname "${arg}"`
        basedir=`cd "${basedir}" && pwd -P`
        if [ ! -d "${basedir}" ]; then
          echo "Directory ${basedir} extracted from the -f/--file command-line argument ${arg} does not exist" >&2
          exit 1
        fi
      else
        echo "POM file ${arg} specified with the -f/--file command line argument does not exist" >&2
        exit 1
      fi
      break
    fi
    if [ "$arg" = "-f" -o "$arg" = "--file" ]; then
      found_file_switch=1
    fi
  done
  echo "${basedir}"
)
}

# concatenates all lines of a file
concat_lines() {
  if [ -f "$1" ]; then
    echo "`tr -s '\r\n' '  ' < "$1"`"
  fi
}

MAVEN_PROJECTBASEDIR="${MAVEN_BASEDIR:-`find_maven_basedir "$@"`}"
MAVEN_OPTS="`concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config"` $MAVEN_OPTS"

# For Cygwin, switch project base directory path to Windows format before
# executing Maven otherwise this will cause Maven not to consider it.
if $cygwin ; then
  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
  MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi

export MAVEN_PROJECTBASEDIR

# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS

exec "$JAVACMD" \
  $MAVEN_OPTS \
  $MAVEN_DEBUG_OPTS \
  -classpath "${CLASSWORLDS_JAR}" \
  "-Dclassworlds.conf=${MAVEN_HOME}/bin/m2.conf" \
  "-Dmaven.home=${MAVEN_HOME}" \
  "-Dlibrary.jansi.path=${MAVEN_HOME}/lib/jansi-native" \
  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${CLASSWORLDS_LAUNCHER} "$@"

vim mvn17

#!/bin/sh
JAVA_HOME=/home/jdk17
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# -----------------------------------------------------------------------------
# Apache Maven Startup Script
#
# Environment Variable Prerequisites
#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#   MAVEN_OPTS      (Optional) Java runtime options used when Maven is executed.
#   MAVEN_SKIP_RC   (Optional) Flag to disable loading of mavenrc files.
# -----------------------------------------------------------------------------

if [ -z "$MAVEN_SKIP_RC" ] ; then

  if [ -f /usr/local/etc/mavenrc ] ; then
    . /usr/local/etc/mavenrc
  fi

  if [ -f /etc/mavenrc ] ; then
    . /etc/mavenrc
  fi

  if [ -f "$HOME/.mavenrc" ] ; then
    . "$HOME/.mavenrc"
  fi

fi

# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
mingw=false;
case "`uname`" in
  CYGWIN*) cygwin=true;;
  MINGW*) mingw=true;;
esac

## resolve links - $0 may be a link to Maven's home
PRG="$0"

# need this for relative symlinks
while [ -h "$PRG" ] ; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    PRG="$link"
  else
    PRG="`dirname "$PRG"`/$link"
  fi
done

saveddir=`pwd`

MAVEN_HOME=`dirname "$PRG"`/..

# make it fully qualified
MAVEN_HOME=`cd "$MAVEN_HOME" && pwd`

cd "$saveddir"

# For Cygwin, ensure paths are in Unix format before anything is touched
if $cygwin ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`cygpath --unix "$MAVEN_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi

# For MinGW, ensure paths are in Unix format before anything is touched
if $mingw ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`(cd "$JAVA_HOME"; pwd)`
  # TODO classpath?
fi

if [ -z "$JAVA_HOME" ] ; then
  JAVACMD="`\\unset -f command; \\command -v java`"
else
  JAVACMD="$JAVA_HOME/bin/java"
fi

if [ ! -x "$JAVACMD" ] ; then
  echo "The JAVA_HOME environment variable is not defined correctly," >&2
  echo "this environment variable is needed to run this program." >&2
  exit 1
fi

CLASSWORLDS_JAR=`echo "${MAVEN_HOME}"/boot/plexus-classworlds-*.jar`
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`cygpath --path --windows "$MAVEN_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
  [ -n "$CLASSWORLDS_JAR" ] &&
    CLASSWORLDS_JAR=`cygpath --path --windows "$CLASSWORLDS_JAR"`
fi

# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
(
  basedir=`find_file_argument_basedir "$@"`
  wdir="${basedir}"
  while [ "$wdir" != '/' ] ; do
    if [ -d "$wdir"/.mvn ] ; then
      basedir=$wdir
      break
    fi
    wdir=`cd "$wdir/.."; pwd`
  done
  echo "${basedir}"
)
}

find_file_argument_basedir() {
(
  basedir=`pwd`

  found_file_switch=0
  for arg in "$@"; do
    if [ ${found_file_switch} -eq 1 ]; then
      if [ -d "${arg}" ]; then
        basedir=`cd "${arg}" && pwd -P`
      elif [ -f "${arg}" ]; then
        basedir=`dirname "${arg}"`
        basedir=`cd "${basedir}" && pwd -P`
        if [ ! -d "${basedir}" ]; then
          echo "Directory ${basedir} extracted from the -f/--file command-line argument ${arg} does not exist" >&2
          exit 1
        fi
      else
        echo "POM file ${arg} specified with the -f/--file command line argument does not exist" >&2
        exit 1
      fi
      break
    fi
    if [ "$arg" = "-f" -o "$arg" = "--file" ]; then
      found_file_switch=1
    fi
  done
  echo "${basedir}"
)
}

# concatenates all lines of a file
concat_lines() {
  if [ -f "$1" ]; then
    echo "`tr -s '\r\n' '  ' < "$1"`"
  fi
}

MAVEN_PROJECTBASEDIR="${MAVEN_BASEDIR:-`find_maven_basedir "$@"`}"
MAVEN_OPTS="`concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config"` $MAVEN_OPTS"

# For Cygwin, switch project base directory path to Windows format before
# executing Maven otherwise this will cause Maven not to consider it.
if $cygwin ; then
  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
  MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi

export MAVEN_PROJECTBASEDIR

# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS

exec "$JAVACMD" \
  $MAVEN_OPTS \
  $MAVEN_DEBUG_OPTS \
  -classpath "${CLASSWORLDS_JAR}" \
  "-Dclassworlds.conf=${MAVEN_HOME}/bin/m2.conf" \
  "-Dmaven.home=${MAVEN_HOME}" \
  "-Dlibrary.jansi.path=${MAVEN_HOME}/lib/jansi-native" \
  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${CLASSWORLDS_LAUNCHER} "$@"

vim settings.xml
可自行配置server,mirrors,docker镜像仓库账号密码等

"1.0" encoding="UTF-8"?>

"http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

    /home/repository</localRepository>

    
    </pluginGroups>

    
    </proxies>

    
        
            releases</id>
            admin</username>
            123456</password>
        </server>
        
            snapshots</id>
            admin</username>
            123456</password>
        </server>
        
            docker-aliyun</id>
            阿里云账号</username>
            阿里云密码</password>
        </server>
    </servers>

    
        
            alimaven</id>
            central</mirrorOf>
            http://maven.aliyun.com/nexus/content/groups/public</url>
        </mirror>
    </mirrors>

    
    </profiles>

    
    </activeProfiles>

</settings>

Dockerfile

需要用到jdk11基础镜像
强烈建议使用本人构建的镜像,否则jenkins构建步骤不支持中文
将下方安装包名称修改为下载的安装包名称

FROM registry.cn-qingdao.aliyuncs.com/fandai/fd-jdk11
COPY jenkins-2.332-1.1.noarch.rpm /home/jenkins-2.332-1.1.noarch.rpm
COPY apache-maven-3.8.4-bin.tar.gz /home/apache-maven-3.8.4-bin.tar.gz
COPY jdk-8u321-linux-x64.tar.gz /home/jdk-8u321-linux-x64.tar.gz
COPY jdk-17_linux-x64_bin.tar.gz /home/jdk-17_linux-x64_bin.tar.gz

WORKDIR /home/

RUN tar -zxvf apache-maven-3.8.4-bin.tar.gz && \
    tar -zxvf jdk-8u321-linux-x64.tar.gz && \
    tar -zxvf jdk-17_linux-x64_bin.tar.gz && \
    mv jdk1.8.0_321 jdk8 && \
    mv jdk-17.0.2 jdk17 && \
    mv apache-maven-3.8.4 maven && \
    yum -y install epel-release && \
    yum -y install daemonize initscripts git && \
    rpm -ivh jenkins-2.332-1.1.noarch.rpm && \
    rm -rf jenkins-2.332-1.1.noarch.rpm && \
    rm -rf apache-maven-3.8.4-bin.tar.gz && \
    rm -rf jdk-8u321-linux-x64.tar.gz && \
    rm -rf jdk-17_linux-x64_bin.tar.gz && \
    echo "export MAVEN_HOME=/home/maven" >> /etc/profile && \
    echo -e "PATH=\$PATH:\$JAVA_HOME/bin:\$MAVEN_HOME/bin" >> /etc/profile && \
    source /etc/profile

COPY settings.xml /home/maven/conf/settings.xml
COPY mvn8 /home/maven/bin/mvn8
COPY mvn17 /home/maven/bin/mvn17

COPY jenkins /var/sysconfig/jenkins

#赋予执行权限,修改编码格式
RUN chmod +x /home/maven/bin/mvn8 && sed -i "s/\r//" mvn8
RUN chmod +x /home/maven/bin/mvn17 && sed -i "s/\r//" mvn17
RUN ln -s /home/maven/bin/mvn /usr/local/bin/
RUN ln -s /home/maven/bin/mvn8 /usr/local/bin/
RUN ln -s /home/maven/bin/mvn17 /usr/local/bin/

EXPOSE 8080
EXPOSE 50000

deoply.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: fandai
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
        - name: jenkins
          image: registry.cn-qingdao.aliyuncs.com/fandai/jenkins  # 可使用本人生成的镜像,或通过dockerfile自行构建
          command: ["java","-jar","/usr/lib/jenkins/jenkins.war"]
          env:
            - name: USER_UID
              value: "1000"
            - name: USER_GID
              value: "1000"
          volumeMounts:
            - name: jenkins
              mountPath: /root/.jenkins
      volumes:
        - name: jenkins
          nfs:
            server: fandai-nfs  #nfs服务器地址
            path: /home/nfs/jenkins #共享文件路径
---
apiVersion: v1  # 资源版本
kind: Service  # 资源类型
metadata: # 元数据
  name: jenkins # 资源名称
  namespace: fandai # 命名空间
spec: # 描述
  selector: # 标签选择器,用于确定当前service代理哪些pod
    app: jenkins
  type: NodePort # service类型
  ports: # 端口信息
    - protocol: TCP
      name: jenkins1
      port: 8080  # service端口
      targetPort: 8080 # pod端口
    - protocol: TCP
      name: jenkins2
      port: 50000  # service端口
      targetPort: 50000 # pod端口
    - protocol: TCP
      name: jenkins3
      port: 38742  # service端口
      targetPort: 38742 # pod端口
kubectl apply -f deploy.yaml

修改jenkins插件仓库地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

jenkins配置中文界面

下载插件Locale和chinese
配置中修改Locale为zh_cn
服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第1张图片

maven和jdk配置

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第2张图片
服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第3张图片

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第4张图片

配置webhook

下载插件
下方以gitea私有git仓库为例,github、gitee等类似,gitea安装请参考本人其他教程

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第5张图片
服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第6张图片

配置token

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第7张图片
服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第8张图片

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第9张图片

构建完成发送邮件

安装插件

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第10张图片
服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第11张图片

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第12张图片

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第13张图片

邮件模板:email.html

<!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>本邮件是Jenkins程序自动下发的,请勿回复!<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>
                <<span class="token operator">!</span>-<span class="token operator">-</span>
                <li>SVN 版本: $<span class="token punctuation">{</span>SVN_REVISION<span class="token punctuation">}</span><<span class="token operator">/</span>li>
                <span class="token operator">--</span>>
                <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>构建地址:<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>项目地址:<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>
                <li>变更集:$<span class="token punctuation">{</span>JELLY_SCRIPT<span class="token punctuation">,</span>template=<span class="token string">"html"</span><span class="token punctuation">}</span><<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><font color=<span class="token string">"#0B610B"</span>>Failed Test Results:<<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>
            <pre style=<span class="token string">"font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"</span>>$<span class="token punctuation">{</span>FAILED_TESTS<span class="token punctuation">}</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>Test Logs <span class="token punctuation">(</span><span class="token keyword">if</span> test has ran<span class="token punctuation">)</span>: <a
                href=<span class="token string">"${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip"</span>>$<span class="token punctuation">{</span>PROJECT_URL<span class="token punctuation">}</span><span class="token operator">/</span>ws<span class="token operator">/</span>TestResult<span class="token operator">/</span>archive_logs<span class="token operator">/</span>Log<span class="token operator">-</span>Build<span class="token operator">-</span>$<span class="token punctuation">{</span>BUILD_NUMBER<span class="token punctuation">}</span><span class="token punctuation">.</span>zip<<span class="token operator">/</span>a>
            <br<span class="token operator">/</span>>
            <br<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> 
  <blockquote> 
   <p>jenkinsfile中添加配置</p> 
  </blockquote> 
  <pre><code class="prism language-powershell">post<span class="token punctuation">{</span>
    always<span class="token punctuation">{</span>
    	emailext body: <span class="token string">'${FILE,path="email.html"}'</span><span class="token punctuation">,</span> subject: <span class="token string">'构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!'</span><span class="token punctuation">,</span> to: <span class="token string">'******@163.com'</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h3>sonarqube代码审查</h3> 
  <blockquote> 
   <p>sonarqube服务端搭建请参考:服务器搭建系列之8:k8s安装sonarQube代码审查工具,2022最新版本</p> 
  </blockquote> 
  <blockquote> 
   <p>下载插件</p> 
  </blockquote> 
  <p><a href="http://img.e-com-net.com/image/info8/f32a6304f6ef439099b6f1be04dd5383.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/f32a6304f6ef439099b6f1be04dd5383.jpg" alt="服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第14张图片" width="650" height="119" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/c4c18910e4f84190b2df3ef35a4d0d6f.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/c4c18910e4f84190b2df3ef35a4d0d6f.jpg" alt="服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第15张图片" width="650" height="322" style="border:1px solid black;"></a></p> 
  <p><a href="http://img.e-com-net.com/image/info8/e5df3729ab414750bb12961557e088ac.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/e5df3729ab414750bb12961557e088ac.jpg" alt="服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第16张图片" width="650" height="320" style="border:1px solid black;"></a></p> 
  <h3>publish over ssh</h3> 
  <blockquote> 
   <p>jenkins容器运行,生成秘钥,要求是旧版</p> 
  </blockquote> 
  <pre><code class="prism language-powershell">ssh<span class="token operator">-</span>keygen <span class="token operator">-</span>m PEM <span class="token operator">-</span>t rsa <span class="token operator">-</span>b 4096
</code></pre> 
  <blockquote> 
   <p>将/root/.ssh/id_rsa拷贝到要访问的机器的/root/.ssh/authorized_keys<br> <a href="http://img.e-com-net.com/image/info8/7bd0b8a64ec84b0988728b4146abce76.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/7bd0b8a64ec84b0988728b4146abce76.jpg" alt="服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第17张图片" width="650" height="421" style="border:1px solid black;"></a></p> 
  </blockquote> 
  <h3>构建多选框</h3> 
  <blockquote> 
   <p>下载插件</p> 
  </blockquote> 
  <p><a href="http://img.e-com-net.com/image/info8/21ad6bb9b6ac4507a1a2b21a33523db8.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/21ad6bb9b6ac4507a1a2b21a33523db8.jpg" alt="服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第18张图片" width="650" height="156" style="border:1px solid black;"></a></p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1727682390656102400"></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,服务器,自动化)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1947302357234675712.htm"
                           title="pyautocad 的项目扩展与二次开发" target="_blank">pyautocad 的项目扩展与二次开发</a>
                        <span class="text-muted"></span>

                        <div>pyautocad的项目扩展与二次开发1.项目的基础介绍pyautocad是一个开源项目,它提供了一个Python库,用于与AutoCAD进行交互。通过这个库,开发者可以在Python脚本中调用AutoCAD的功能,实现自动化的绘图、修改和管理等功能。该项目的目标是让开发者能够更加便捷地控制AutoCAD,提高工作效率。2.项目的核心功能pyautocad的核心功能包括:与AutoCAD的COM接</div>
                    </li>
                    <li><a href="/article/1947299837074534400.htm"
                           title="springboot+vue生态系统的气象数据可视化平台Java+python-计算机毕业设计" target="_blank">springboot+vue生态系统的气象数据可视化平台Java+python-计算机毕业设计</a>
                        <span class="text-muted"></span>

                        <div>目录功能和技术介绍具体实现截图开发核心技术:开发环境开发步骤编译运行核心代码部分展示系统设计详细视频演示可行性论证软件测试源码获取功能和技术介绍该系统基于浏览器的方式进行访问,采用springboot集成快速开发框架,前端使用vue方式,基于es5的语法,开发工具IntelliJIDEAx64,因为该开发工具,内嵌了Tomcat服务运行机制,可不用单独下载Tomcatserver服务器。由于考虑到</div>
                    </li>
                    <li><a href="/article/1947295428160581632.htm"
                           title="如何使用爬虫简单的爬取一个网页的静态前端代码" target="_blank">如何使用爬虫简单的爬取一个网页的静态前端代码</a>
                        <span class="text-muted"></span>

                        <div>什么是爬虫?Python爬虫是一种使用Python语言编写的程序,用于自动访问网页并提取所需信息。它通常用于网络数据抓取、数据挖掘和信息收集。Python爬虫可以模拟浏览器行为,向服务器发送请求并接收响应数据,然后解析这些数据以获取有用的信息。爬虫的基本原理(流程)发送请求:爬虫向目标网站的服务器发送HTTP请求(通常是GET请求)。获取响应:服务器返回网页的HTML内容。解析内容:爬虫解析HTM</div>
                    </li>
                    <li><a href="/article/1947295175877390336.htm"
                           title="Shell 脚本编程全面学习指南" target="_blank">Shell 脚本编程全面学习指南</a>
                        <span class="text-muted"></span>

                        <div>前言Shell脚本编程是Linux和Unix系统管理、自动化任务的核心工具之一。通过Shell脚本,你可以自动化重复性操作、简化复杂流程、提高系统管理效率,甚至构建完整的自动化运维工具。本文将带你从基础到进阶,全面学习Shell脚本编程,涵盖语法、结构、调试、最佳实践等内容。一、Shell简介与环境搭建1.1什么是Shell?Shell是命令行解释器,是用户与操作系统内核之间的桥梁。它接收用户输入</div>
                    </li>
                    <li><a href="/article/1947294797924462592.htm"
                           title="B/S 架构通信原理详解" target="_blank">B/S 架构通信原理详解</a>
                        <span class="text-muted">步行cgn</span>
<a class="tag" taget="_blank" href="/search/JavaWeb/1.htm">JavaWeb</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>B/S架构通信原理详解一、核心架构Browser/Server(浏览器/服务器)模型:前端:浏览器作为统一客户端(Chrome/Firefox/Edge等)后端:服务器处理业务逻辑+数据存储(Nginx/Apache/Tomcat等)通信协议:基于HTTP/HTTPS的请求-响应模型二、完整通信流程sequenceDiagramparticipant用户participant浏览器particip</div>
                    </li>
                    <li><a href="/article/1947294419044593664.htm"
                           title="Python连接AutoCAD第三方库pyautocad基础介绍(一)" target="_blank">Python连接AutoCAD第三方库pyautocad基础介绍(一)</a>
                        <span class="text-muted">Smile丶Life丶</span>
<a class="tag" taget="_blank" href="/search/AutoCAD%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91/1.htm">AutoCAD插件开发</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</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/AutoCAD/1.htm">AutoCAD</a><a class="tag" taget="_blank" href="/search/pyautocad/1.htm">pyautocad</a>
                        <div>一、前言在开始探索Python连接CAD实现自动化绘图之前,让我们先明确一下读懂本教程所需的技术及知识基础。首先需要你熟练使用Python编程语言,其次,对于CAD软件,本教程将以常见的AutoCAD平台为例,但您至少需要对CAD的基本操作和绘图原理有初步的认识。了解如何创建、编辑图形对象,设置图层、颜色、线型等属性,以及保存和导出CAD图纸的基本流程。以下是本文所使用的开发环境:Python解释</div>
                    </li>
                    <li><a href="/article/1947294292250783744.htm"
                           title="低速信号设计之 RGMII 篇" target="_blank">低速信号设计之 RGMII 篇</a>
                        <span class="text-muted"></span>

                        <div>一、引言在服务器的信号接口设计中,高速信号固然是性能的核心,但中低速信号的稳定运行同样是保障系统可靠性的基础。RGMII(ReducedGigabitMediaIndependentInterface,简化的千兆媒体独立接口)作为一种兼顾速率与简化设计的以太网接口标准,在服务器的中低速千兆以太网通信场景中扮演着重要角色。本文将从RGMII总线在服务器中的应用场景、工作原理、关键参数、设计及布局布线</div>
                    </li>
                    <li><a href="/article/1947292907648118784.htm"
                           title="筑牢网络安全防线:DDoS/CC 攻击全链路防护技术解析" target="_blank">筑牢网络安全防线:DDoS/CC 攻击全链路防护技术解析</a>
                        <span class="text-muted">上海云盾-高防顾问</span>
<a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/ddos/1.htm">ddos</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a>
                        <div>在数字化时代,DDoS(分布式拒绝服务攻击)和CC(ChallengeCollapsar)攻击已成为威胁网络服务稳定性的“头号杀手”。DDoS通过海量流量淹没目标服务器,CC则通过模拟合法请求耗尽应用资源。本文将深入解析这两种攻击的防护技术,构建从网络层到应用层的全链路防御体系。一、DDoS/CC攻击原理与威胁1.DDoS攻击:流量洪泛的“数字洪水”原理:利用僵尸网络向目标发送大量数据包(如UDP</div>
                    </li>
                    <li><a href="/article/1947289884410572800.htm"
                           title="机器人运动学仿真软件:RobWork_(10).C++编程基础" target="_blank">机器人运动学仿真软件:RobWork_(10).C++编程基础</a>
                        <span class="text-muted">kkchenjj</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E4%BA%BA%E4%BB%BF%E7%9C%9F/1.htm">机器人仿真</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">机器人</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E4%BA%BA%E4%BB%BF%E7%9C%9F/1.htm">机器人仿真</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/%E6%A8%A1%E6%8B%9F%E4%BB%BF%E7%9C%9F/1.htm">模拟仿真</a>
                        <div>C++编程基础1.C++语言简介C++是一种静态类型的、编译式的通用编程语言,它支持过程化、面向对象和泛型编程。C++由丹麦计算机科学家BjarneStroustrup在1980年代初期在贝尔实验室开发,是C语言的扩展。C++具有高效性、灵活性和广泛的适用性,特别是在系统软件、应用软件、高性能服务器和客户端应用程序的开发中。</div>
                    </li>
                    <li><a href="/article/1947286480472829952.htm"
                           title="通过Netplan为Ubuntu服务器新增DNS以解析内部域名" target="_blank">通过Netplan为Ubuntu服务器新增DNS以解析内部域名</a>
                        <span class="text-muted"></span>

                        <div>在企业网络环境中,Ubuntu服务器常常需要访问内部服务,这些服务通常通过内部域名进行寻址。如果服务器默认配置的DNS无法解析这些内部域名,就需要手动添加公司的内部DNS服务器地址。本章节将详细介绍如何在Ubuntu22.04LTS服务器上使用Netplan工具新增DNS服务器IP,并提供解决配置后可能遇到的常见问题的步骤,确保服务器能够顺利解析内部域名。前提条件拥有一台运行Ubuntu22.04</div>
                    </li>
                    <li><a href="/article/1947285974912397312.htm"
                           title="线上故障排查神器!用strace和ftrace揪出系统调用的“幕后黑手“" target="_blank">线上故障排查神器!用strace和ftrace揪出系统调用的“幕后黑手“</a>
                        <span class="text-muted">悠悠12138</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>前几天凌晨2点,我又被监控报警给吵醒了。服务器CPU飙到90%,但是top看了半天也找不到罪魁祸首。这种时候,就得请出我们运维人员的两大法宝了——strace和ftrace。说实话,刚开始接触这两个工具的时候,我也是一脸懵逼。什么系统调用、内核跟踪,听起来就很高大上的样子。但是用多了你就会发现,这玩意儿简直就是排查问题的神器!今天就跟大家分享一下我这些年用下来的一些心得。先说说系统调用这个东西你可</div>
                    </li>
                    <li><a href="/article/1947285344714027008.htm"
                           title="【laravel+redis】分布式锁的实现" target="_blank">【laravel+redis】分布式锁的实现</a>
                        <span class="text-muted">起灵人</span>
<a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/laravel/1.htm">laravel</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/laravel/1.htm">laravel</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a>
                        <div>laravel官方支持“原子锁”,并且说“要使用这个功能,应用必须使用memcached、dynamodb、redis、database或array缓存驱动作为应用默认的缓存驱动,此外,所有服务器必须和同一台中央缓存服务器进行通信”。前半句不多解释,后半句也强调了laravel的原子锁不负责在集群架构中保障故障转移期间的数据安全性。我贴一下laravel的源码看一下它是怎样用redis实现的分布式</div>
                    </li>
                    <li><a href="/article/1947283579935453184.htm"
                           title="使用 .NET 6.0 的简单 WebSocket 客户端和服务器应用程序" target="_blank">使用 .NET 6.0 的简单 WebSocket 客户端和服务器应用程序</a>
                        <span class="text-muted"></span>

                        <div>几个月前,有同事来找我,问能否用.NET创建一个简单的WebSocket服务器(以及之后的客户端)。据我了解,他想用它来控制对方电脑上的进程。或许对其他人也有用,所以我把它发布在这里。让我们从服务器开始。我这里使用的是.NET6和ASP.NETCore,不需要任何额外的配置。它实际上是一个准系统应用程序,没有任何花哨的附加功能。Console.Title="Server";varbuilder=W</div>
                    </li>
                    <li><a href="/article/1947283453020008448.htm"
                           title="Supervisor 入门指南一篇就够 —— 安装、项目配置与常见报错速查" target="_blank">Supervisor 入门指南一篇就够 —— 安装、项目配置与常见报错速查</a>
                        <span class="text-muted">逻极</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><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/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E5%85%B7/1.htm">工具</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91/1.htm">开发</a><a class="tag" taget="_blank" href="/search/supervisor/1.htm">supervisor</a>
                        <div>Supervisor入门指南一篇就够——安装、项目配置与常见报错速查一、Supervisor是什么在服务器进程管理中,Supervisor是一款用Python编写的进程守护与管理工具。它的核心功能是将普通的命令行进程转变为后台daemon进程,并且在进程因意外情况退出时,能够自动将其重启,保证进程的持续运行。在实际应用中,它常出现在多层架构里。比如在Nginx→Gunicorn/Django→Su</div>
                    </li>
                    <li><a href="/article/1947280301088632832.htm"
                           title="LVS-----TUN模式配置" target="_blank">LVS-----TUN模式配置</a>
                        <span class="text-muted">KellenKellenHao</span>
<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/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/LVS/1.htm">LVS</a><a class="tag" taget="_blank" href="/search/TUN%E6%A8%A1%E5%BC%8F/1.htm">TUN模式</a>
                        <div>一、实验环境主机名称ip角色lvs-tun192.168.100.100lvs调度器web1192.168.100.1后端web服务器1web2192.168.100.2后端web服务器2client192.168.100.200客户端二、搭建lvs调度器的TUN模式1、lvs-tun调度器配置#清除DR模式的策略ipvsadm-C#查看策略ipvsadm-L[root@lvs-tun~]#ipv</div>
                    </li>
                    <li><a href="/article/1947275638490591232.htm"
                           title="PHP 性能优化全攻略:提升 Web 应用速度的关键" target="_blank">PHP 性能优化全攻略:提升 Web 应用速度的关键</a>
                        <span class="text-muted">来恩1003</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/1.htm">从入门到精通</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>PHP学习资料PHP学习资料PHP学习资料在Web开发领域,PHP凭借其简单易用、开源免费等特性,成为众多开发者构建网站和应用的首选语言。然而,随着业务的发展和用户量的增加,PHP应用的性能问题逐渐凸显。性能不佳不仅会导致用户体验下降,还可能影响业务的发展。因此,对PHP代码进行性能优化至关重要。本文将深入探讨PHP性能优化的各个方面,包括缓存的使用、代码优化策略以及服务器配置优化等,帮助开发者打</div>
                    </li>
                    <li><a href="/article/1947271229102682112.htm"
                           title="【Nacos无压力源码领读】(二) 集成 LoadBalancer 与 OpenFeign" target="_blank">【Nacos无压力源码领读】(二) 集成 LoadBalancer 与 OpenFeign</a>
                        <span class="text-muted">Dexu7</span>
<a class="tag" taget="_blank" href="/search/SpringCloud/1.htm">SpringCloud</a><a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a><a class="tag" taget="_blank" href="/search/ribbon/1.htm">ribbon</a>
                        <div>上一篇文章中,详细介绍了Nacos注册中心的原理,相信看完后,大家应该完全掌握了Nacos客户端是如何自动进行服务注册的,以及Nacos客户端是如何订阅服务实例信息的,以及Nacos服务器是如何处理客户端的注册和订阅请求的;本文承上启下,在订阅服务实例的基础上,介绍如何在实例之间进行选择,实现负载均衡;并详细介绍了负载均衡组件LocaBanlancer和函数式调用组件OpenFeign是如何与Na</div>
                    </li>
                    <li><a href="/article/1947265682433437696.htm"
                           title="从零开始学 Linux:循序渐进的学习指南" target="_blank">从零开始学 Linux:循序渐进的学习指南</a>
                        <span class="text-muted">我爱学嵌入式</span>
<a class="tag" taget="_blank" href="/search/Linux%E5%9F%BA%E7%A1%80/1.htm">Linux基础</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>
                        <div>Linux作为一款开源、稳定且安全的操作系统,在服务器领域、嵌入式开发、云计算等场景中占据着举足轻重的地位。对于程序员、运维工程师或IT爱好者而言,掌握Linux技能已成为一项核心竞争力。但面对命令行界面和复杂的系统架构,很多初学者往往感到无从下手。本文将为你梳理一条清晰的Linux学习路径,助你从入门到精通。一、明确学习目标:为什么学Linux?学习Linux前需明确目标,不同目标对应不同的学习</div>
                    </li>
                    <li><a href="/article/1947255594553503744.htm"
                           title="基于 MySQL 8.0.40 MGR 与 ProxySQL 的高可用集群部署实践" target="_blank">基于 MySQL 8.0.40 MGR 与 ProxySQL 的高可用集群部署实践</a>
                        <span class="text-muted">derek2026</span>
<a class="tag" taget="_blank" href="/search/%E9%83%A8%E7%BD%B2%E5%AE%9E%E8%B7%B5/1.htm">部署实践</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>构建高可用MySQL8.0.40集群:MGR+ProxySQL实战指南一、部署架构图流量路径:应用→ProxySQL(DNS解析ProxySQLIP)→MySQLMGR集群二、环境准备1.系统要求**操作系统:**CentOS7.x服务器配置3台节点(建议最小配置:4核CPU/8GB内存/100GB磁盘)网络互通(关闭防火墙或开放端口:3306,33081,6032,6033节点规划节点1:192</div>
                    </li>
                    <li><a href="/article/1947247523085217792.htm"
                           title="如何打CTF竞赛?" target="_blank">如何打CTF竞赛?</a>
                        <span class="text-muted">jieyu1119</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>一、首先需要认识CTF竞赛1、什么是CTF竞赛?CTF(CaptureTheFlag)一般译作“夺旗赛”,在网络安全领域中指网络安全技术人员之间进行技术竞技的一种比赛形式。[11]通过各种攻击手法,获取服务器后寻找指定的字段,或者文件中某一个固定格式的字段,这个字段叫做Flag,其形式一般为Flag{xxxxxxxX},提交到裁判机就可以得分。2、竞赛模式解题模式(Jeopardy)在解题模式CT</div>
                    </li>
                    <li><a href="/article/1947247396643729408.htm"
                           title="2025年服务器技术全景解析:量子计算、液冷革命与未来生态构建" target="_blank">2025年服务器技术全景解析:量子计算、液冷革命与未来生态构建</a>
                        <span class="text-muted">国际云1688</span>
<a class="tag" taget="_blank" href="/search/%E8%85%BE%E8%AE%AF%E4%BA%91%E5%9B%BD%E9%99%85/1.htm">腾讯云国际</a><a class="tag" taget="_blank" href="/search/%E9%87%8F%E5%AD%90%E8%AE%A1%E7%AE%97/1.htm">量子计算</a><a class="tag" taget="_blank" href="/search/%E8%85%BE%E8%AE%AF%E4%BA%91/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/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>2025年服务器技术全景解析:量子计算、液冷革命与未来生态构建一、量子计算:从实验室到产业化的跨越1.中国量子计算产业化突破•本源量子“悟空”超导计算机:搭载72位自主超导量子芯片“悟空芯”,支持198个量子比特并行计算,已为全球139个国家完成超32万个计算任务。在金融领域,其投资组合优化应用使资源消耗较经典计算机降低50%,黑石集团等机构已将其用于高频交易策略优化;在生物医药领域,量子混合神经</div>
                    </li>
                    <li><a href="/article/1947241598987333632.htm"
                           title="hive的sql优化思路-明白底层运行逻辑" target="_blank">hive的sql优化思路-明白底层运行逻辑</a>
                        <span class="text-muted">ycllycll</span>
<a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a>
                        <div>一、首先要明白底层map、shuffle、reduce的顺序之中服务器hdfs数据文件在内存与存储之中是怎么演变的,因为hive的性能瓶颈基本在内存,具体参考以下他人优秀文章:1.HiveSQL底层执行过程详细剖析2.HiveJOIN性能调优二是要明白hive对应的sql它底层的mapreduce的过程中sql字段的执行顺序,来理解map的key、value会填充什么值,才能深刻理解怎么一步一步的</div>
                    </li>
                    <li><a href="/article/1947240082838712320.htm"
                           title="XSS介绍及利用" target="_blank">XSS介绍及利用</a>
                        <span class="text-muted">0x00dream</span>
<a class="tag" taget="_blank" href="/search/%E5%B8%B8%E8%A7%81%E6%BC%8F%E6%B4%9E/1.htm">常见漏洞</a><a class="tag" taget="_blank" href="/search/web/1.htm">web</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>XSS——跨站脚本攻击XSS介绍及利用**XSS的三种类型****构造xss脚本****自动化XSS——BeEF**XSS介绍及利用1、XSS介绍XSS(crosssitescripting)跨站脚本攻击,恶意攻击者往web页面里插入恶意script代码,当用户浏览该页面时,代码就会被执行2、XSS原理在HTML中常用到字符实体,对常用到的字符实体没有进行转译,导致完整的标签出现,在可输入的文本框</div>
                    </li>
                    <li><a href="/article/1947238567084355584.htm"
                           title="Ubuntu 安装 Gitlab" target="_blank">Ubuntu 安装 Gitlab</a>
                        <span class="text-muted">Kesling</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E9%83%A8%E7%BD%B2/1.htm">服务部署</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/gitlab/1.htm">gitlab</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>Ubuntu安装Gitlab安装依赖打开终端,运行如下命令:sudoaptupdatesudoaptupgradesudoaptinstallcurlopenssh-serverca-certificatespostfix安装GitLab前往GitLab官网,需要根据服务器系统,搜索需要安装的版本号。根据官网提示下载源文件,执行如命令curl-shttps://packages.gitlab.co</div>
                    </li>
                    <li><a href="/article/1947238314922799104.htm"
                           title="Centos7下搭建Gitlab服务器" target="_blank">Centos7下搭建Gitlab服务器</a>
                        <span class="text-muted">行远大于想</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E5%85%B7%E7%AF%87/1.htm">工具篇</a><a class="tag" taget="_blank" href="/search/gitlab/1.htm">gitlab</a><a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E4%BA%91/1.htm">阿里云</a>
                        <div>Centos7下搭建Gitlab服务器1简介2安装配置依赖2.1安装启动ssh服务2.2配置防火墙2.3安装邮件服务3安装配置gitlab3.1配置yum源3.2yum安装3.3配置访问地址3.4重新配置应用3.5启动gitlab3.6防火墙开放端口4登录gitlab4.1阿里云配置安全规则4.2修改密码5卸载Gitlab6Gitlab忘记root密码7Gitlab汉化8参考文献1简介gitlab</div>
                    </li>
                    <li><a href="/article/1947237558815617024.htm"
                           title="GitLab系列2 GitLab Workhorse" target="_blank">GitLab系列2 GitLab Workhorse</a>
                        <span class="text-muted">weixin_34326558</span>
<a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ViewUI/1.htm">ViewUI</a>
                        <div>GitLabWorkhorse上一回介绍了GitLab的基础功能和架构,但还没具体讲解用户的请求是怎么被处理的,只是将各个组件的功能职责介绍了一遍,本节将简单介绍gitlab-workhorse的功能首先回顾一下:GitLab利用Nginx将前端的http/https请求代理至gitlab-workhorse,gitlab-workhorse再将请求转发至UnicornWeb服务器。默认情况下gi</div>
                    </li>
                    <li><a href="/article/1947236045917581312.htm"
                           title="ubuntu部署gitlab-ce及数据迁移" target="_blank">ubuntu部署gitlab-ce及数据迁移</a>
                        <span class="text-muted">SilentCodeY</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</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/gitlab/1.htm">gitlab</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a>
                        <div>ubuntu部署gitlab-ce及数据迁移进行前梳理:在esxi7.0Update3基础上使用ubuntu22.04.5-server系统对gitlab-ce16.10进行部署,以及将gitlab-ee16.9数据进行迁移到gitlab-ce16.10进行后总结:起初安装了极狐17.8.3-jh版本(不支持全局中文,就没用了)又安装了gitlab-ce16.10.10,(和旧服务器版本不一致,备</div>
                    </li>
                    <li><a href="/article/1947234912151072768.htm"
                           title="gitlab修改DNS解析配置文件" target="_blank">gitlab修改DNS解析配置文件</a>
                        <span class="text-muted">中东大鹅</span>
<a class="tag" taget="_blank" href="/search/gitlab/1.htm">gitlab</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a>
                        <div>在Linux(CentOS7.9)云服务器上解压gitlab时提示需要Python的环境[root@rainyun-v1vct1josrc]#rpm-ivhgitlab-ce-10.8.4-ce.0.el7.x86_64.rpmwarning:gitlab-ce-10.8.4-ce.0.el7.x86_64.rpm:HeaderV4RSA/SHA1Signature,keyIDf27eab47:N</div>
                    </li>
                    <li><a href="/article/1947231507852619776.htm"
                           title="虚拟机Ubuntu搭建gitlab服务器,ssh连接" target="_blank">虚拟机Ubuntu搭建gitlab服务器,ssh连接</a>
                        <span class="text-muted">yizhiyu_hh</span>
<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/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/gitlab/1.htm">gitlab</a>
                        <div>任务:在一台新的计算机上搭建gitlab环境,用于版本管理并使用ssh连接要求:1、要在Windows系统下运行2、gitlab可以在局域网内被任何pc访问3、搭建完后,使用ssh工具管理4、工具要免费SP1:下载安装虚拟机和ubuntu系统虚拟机选择virtualbox,链接https://www.virtualbox.org/wiki/Downloads现在的virtualbox版本都比较高,</div>
                    </li>
                    <li><a href="/article/1947229237236789248.htm"
                           title="使用Python Scrapy打造个性化爬虫" target="_blank">使用Python Scrapy打造个性化爬虫</a>
                        <span class="text-muted"></span>

                        <div>使用PythonScrapy打造个性化爬虫——知识金字塔构建1.引入与连接:从“手动复制”到“自动化采集”的跨越你是否遇到过这样的场景?想整理1000条知乎优质回答做数据分析,却要逐条复制;想追踪某电商平台的商品价格波动,却要每天手动刷新页面……这些重复劳动,正是“个性化爬虫”的用武之地!与已有知识的连接:你可能用过requests+BeautifulSoup写过简单爬虫,但面对大规模数据、复杂反</div>
                    </li>
                                <li><a href="/article/69.htm"
                                       title="对股票分析时要注意哪些主要因素?" target="_blank">对股票分析时要注意哪些主要因素?</a>
                                    <span class="text-muted">会飞的奇葩猪</span>
<a class="tag" taget="_blank" href="/search/%E8%82%A1%E7%A5%A8+%E5%88%86%E6%9E%90+%E4%BA%91%E6%8E%8C%E8%82%A1%E5%90%A7/1.htm">股票 分析 云掌股吧</a>
                                    <div> 
  众所周知,对散户投资者来说,股票技术分析是应战股市的核心武器,想学好股票的技术分析一定要知道哪些是重点学习的,其实非常简单,我们只要记住三个要素:成交量、价格趋势、振荡指标。 
 
    一、成交量 
 
  大盘的成交量状态。成交量大说明市场的获利机会较多,成交量小说明市场的获利机会较少。当沪市的成交量超过150亿时是强市市场状态,运用技术找综合买点较准;</div>
                                </li>
                                <li><a href="/article/196.htm"
                                       title="【Scala十八】视图界定与上下文界定" target="_blank">【Scala十八】视图界定与上下文界定</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a>
                                    <div>Context Bound,上下文界定,是Scala为隐式参数引入的一种语法糖,使得隐式转换的编码更加简洁。 
  
隐式参数 
首先引入一个泛型函数max,用于取a和b的最大值 
  def max[T](a: T, b: T) = {
    if (a > b) a else b
  } 
 因为T是未知类型,只有运行时才会代入真正的类型,因此调用a > </div>
                                </li>
                                <li><a href="/article/323.htm"
                                       title="C语言的分支——Object-C程序设计阅读有感" target="_blank">C语言的分支——Object-C程序设计阅读有感</a>
                                    <span class="text-muted">darkblue086</span>
<a class="tag" taget="_blank" href="/search/apple/1.htm">apple</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/cocoa/1.htm">cocoa</a>
                                    <div>自从1972年贝尔实验室Dennis Ritchie开发了C语言,C语言已经有了很多版本和实现,从Borland到microsoft还是GNU、Apple都提供了不同时代的多种选择,我们知道C语言是基于Thompson开发的B语言的,Object-C是以SmallTalk-80为基础的。和C++不同的是,Object C并不是C的超集,因为有很多特性与C是不同的。 
Object-C程序设计这本书</div>
                                </li>
                                <li><a href="/article/450.htm"
                                       title="去除浏览器对表单值的记忆" target="_blank">去除浏览器对表单值的记忆</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E8%AE%B0%E5%BF%86/1.htm">记忆</a><a class="tag" taget="_blank" href="/search/autocomplete/1.htm">autocomplete</a><a class="tag" taget="_blank" href="/search/form/1.htm">form</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88/1.htm">浏览</a>
                                    <div>  
                                   &n</div>
                                </li>
                                <li><a href="/article/577.htm"
                                       title="java的树形通讯录" target="_blank">java的树形通讯录</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>最近用到企业通讯录,虽然以前也开发过,但是用的是jsf,拼成的树形,及其笨重和难维护。后来就想到直接生成json格式字符串,页面上也好展现。 
	// 首先取出每个部门的联系人
			for (int i = 0; i < depList.size(); i++) {
				List<Contacts> list = getContactList(depList.get(i</div>
                                </li>
                                <li><a href="/article/704.htm"
                                       title="Nginx安装部署" target="_blank">Nginx安装部署</a>
                                    <span class="text-muted">510888780</span>
<a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源</div>
                                </li>
                                <li><a href="/article/831.htm"
                                       title="java servelet异步处理请求" target="_blank">java servelet异步处理请求</a>
                                    <span class="text-muted">墙头上一根草</span>
<a class="tag" taget="_blank" href="/search/%EF%BD%8A%EF%BD%81%EF%BD%96%EF%BD%81/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E6%AD%A5%E8%BF%94%E5%9B%9E/1.htm">异步返回</a><a class="tag" taget="_blank" href="/search/%EF%BD%93%EF%BD%85%EF%BD%92%EF%BD%96%EF%BD%8C%EF%BD%85%EF%BD%94/1.htm">servlet</a>
                                    <div>servlet3.0以后支持异步处理请求,具体是使用AsyncContext ,包装httpservletRequest以及httpservletResponse具有异步的功能, 
   
  
  final AsyncContext ac = request.startAsync(request, response); 
  ac.s</div>
                                </li>
                                <li><a href="/article/958.htm"
                                       title="我的spring学习笔记8-Spring中Bean的实例化" target="_blank">我的spring学习笔记8-Spring中Bean的实例化</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/Spring+3/1.htm">Spring 3</a>
                                    <div>在Spring中要实例化一个Bean有几种方法: 
 
1、最常用的(普通方法) 
 
 
<bean id="myBean" class="www.6e6.org.MyBean" /> 
 
使用这样方法,按Spring就会使用Bean的默认构造方法,也就是把没有参数的构造方法来建立Bean实例。 
 
(有构造方法的下个文细说) 
 
2、还</div>
                                </li>
                                <li><a href="/article/1085.htm"
                                       title="为Mysql创建最优的索引" target="_blank">为Mysql创建最优的索引</a>
                                    <span class="text-muted">annan211</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E7%B4%A2%E5%BC%95/1.htm">索引</a>
                                    <div>


	索引对于良好的性能非常关键,尤其是当数据规模越来越大的时候,索引的对性能的影响越发重要。
	索引经常会被误解甚至忽略,而且经常被糟糕的设计。
	索引优化应该是对查询性能优化最有效的手段了,索引能够轻易将查询性能提高几个数量级,最优的索引会比
	较好的索引性能要好2个数量级。
	
	1 索引的类型
	  (1) B-Tree
	    不出意外,这里提到的索引都是指 B-</div>
                                </li>
                                <li><a href="/article/1212.htm"
                                       title="日期函数" target="_blank">日期函数</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%97%A5%E6%9C%9F%E5%87%BD%E6%95%B0/1.htm">日期函数</a><a class="tag" taget="_blank" href="/search/%E6%9F%A5%E8%AF%A2/1.htm">查询</a>
                                    <div>  
ORACLE日期时间函数大全

   TO_DATE格式(以时间:2007-11-02   13:45:25为例)
   
        Year:      
        yy two digits 两位年                显示值:07
        yyy three digits 三位年                显示值:007
   </div>
                                </li>
                                <li><a href="/article/1339.htm"
                                       title="线程优先级" target="_blank">线程优先级</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a>
                                    <div>多线程运行时需要定义线程运行的先后顺序。 
线程优先级是用数字表示,数字越大线程优先级越高,取值在1到10,默认优先级为5。 
实例: 
package com.bijian.study;

/**
 * 因为在代码段当中把线程B的优先级设置高于线程A,所以运行结果先执行线程B的run()方法后再执行线程A的run()方法
 * 但在实际中,JAVA的优先级不准,强烈不建议用此方法来控制执</div>
                                </li>
                                <li><a href="/article/1466.htm"
                                       title="适配器模式和代理模式的区别" target="_blank">适配器模式和代理模式的区别</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>一.简介        适配器模式:适配器模式(英语:adapter pattern)有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中。      &nbs</div>
                                </li>
                                <li><a href="/article/1593.htm"
                                       title="【持久化框架MyBatis3三】MyBatis3 SQL映射配置文件" target="_blank">【持久化框架MyBatis3三】MyBatis3 SQL映射配置文件</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Mybatis3/1.htm">Mybatis3</a>
                                    <div> SQL映射配置文件一方面类似于Hibernate的映射配置文件,通过定义实体与关系表的列之间的对应关系。另一方面使用<select>,<insert>,<delete>,<update>元素定义增删改查的SQL语句, 
这些元素包含三方面内容 
1. 要执行的SQL语句 
2. SQL语句的入参,比如查询条件 
3. SQL语句的返回结果</div>
                                </li>
                                <li><a href="/article/1720.htm"
                                       title="oracle大数据表复制备份个人经验" target="_blank">oracle大数据表复制备份个人经验</a>
                                    <span class="text-muted">bitcarter</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E8%A1%A8%E5%A4%87%E4%BB%BD/1.htm">大表备份</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E8%A1%A8%E6%95%B0%E6%8D%AE%E5%A4%8D%E5%88%B6/1.htm">大表数据复制</a>
                                    <div>前提: 
   数据库仓库A(就拿oracle11g为例)中有两个用户user1和user2,现在有user1中有表ldm_table1,且表ldm_table1有数据5千万以上,ldm_table1中的数据是从其他库B(数据源)中抽取过来的,前期业务理解不够或者需求有变,数据有变动需要重新从B中抽取数据到A库表ldm_table1中。 
    </div>
                                </li>
                                <li><a href="/article/1847.htm"
                                       title="HTTP加速器varnish安装小记" target="_blank">HTTP加速器varnish安装小记</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/http+varnish+%E5%8A%A0%E9%80%9F/1.htm">http varnish 加速</a>
                                    <div>上午共享的那个varnish安装手册,个人看了下,有点不知所云,好吧~看来还是先安装玩玩! 
苦逼公司服务器没法连外网,不能用什么wget或yum命令直接下载安装,每每看到别人博客贴出的在线安装代码时,总有一股羡慕嫉妒“恨”冒了出来。。。好吧,既然没法上外网,那只能麻烦点通过下载源码来编译安装了! 
Varnish 3.0.4下载地址: http://repo.varnish-cache.org/</div>
                                </li>
                                <li><a href="/article/1974.htm"
                                       title="java-73-输入一个字符串,输出该字符串中对称的子字符串的最大长度" target="_blank">java-73-输入一个字符串,输出该字符串中对称的子字符串的最大长度</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class LongestSymmtricalLength {

	/*
	 * Q75题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。
	 * 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
	 */
	
	public static void main(String[] args) {
		Str</div>
                                </li>
                                <li><a href="/article/2101.htm"
                                       title="学习编程的一点感想" target="_blank">学习编程的一点感想</a>
                                    <span class="text-muted">Cb123456</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E6%84%9F%E6%83%B3/1.htm">感想</a><a class="tag" taget="_blank" href="/search/Gis/1.htm">Gis</a>
                                    <div>       写点感想,总结一些,也顺便激励一些自己.现在就是复习阶段,也做做项目. 
  
   本专业是GIS专业,当初觉得本专业太水,靠这个会活不下去的,所以就报了培训班。学习的时候,进入状态很慢,而且当初进去的时候,已经上到Java高级阶段了,所以.....,呵呵,之后有点感觉了,不过,还是不好好写代码,还眼高手低的,有</div>
                                </li>
                                <li><a href="/article/2228.htm"
                                       title="[能源与安全]美国与中国" target="_blank">[能源与安全]美国与中国</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E8%83%BD%E6%BA%90/1.htm">能源</a>
                                    <div> 
 
     现在有一个局面:地球上的石油只剩下N桶,这些油只够让中国和美国这两个国家中的一个顺利过渡到宇宙时代,但是如果这两个国家为争夺这些石油而发生战争,其结果是两个国家都无法平稳过渡到宇宙时代。。。。而且在战争中,剩下的石油也会被快速消耗在战争中,结果是两败俱伤。。。 
 
 
      在这个大</div>
                                </li>
                                <li><a href="/article/2355.htm"
                                       title="SEMI-JOIN执行计划突然变成HASH JOIN了 的原因分析" target="_blank">SEMI-JOIN执行计划突然变成HASH JOIN了 的原因分析</a>
                                    <span class="text-muted">cwqcwqmax9</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>甲说: 
A B两个表总数据量都很大,在百万以上。 
idx1  idx2字段表示是索引字段 
A B 两表上都有 
col1字段表示普通字段 
 
select xxx from A 
where A.idx1 between mmm and nnn 
     and exists (select 1 from B where B.idx2 =</div>
                                </li>
                                <li><a href="/article/2482.htm"
                                       title="SpringMVC-ajax返回值乱码解决方案" target="_blank">SpringMVC-ajax返回值乱码解决方案</a>
                                    <span class="text-muted">dashuaifu</span>
<a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a><a class="tag" taget="_blank" href="/search/response/1.htm">response</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">中文乱码</a>
                                    <div>  
SpringMVC-ajax返回值乱码解决方案 
  
一:(自己总结,测试过可行) 
ajax返回如果含有中文汉字,则使用:(如下例:) 
@RequestMapping(value="/xxx.do")       public @ResponseBody void getPunishReasonB</div>
                                </li>
                                <li><a href="/article/2609.htm"
                                       title="Linux系统中查看日志的常用命令" target="_blank">Linux系统中查看日志的常用命令</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/OS/1.htm">OS</a>
                                    <div>因为在日常的工作中,出问题的时候查看日志是每个管理员的习惯,作为初学者,为了以后的需要,我今天将下面这些查看命令共享给各位 
cat 
tail -f 
日 志 文 件 说 明 
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 
/var/log/secure 与安全相关的日志信息 
/var/log/maillog 与邮件相关的日志信</div>
                                </li>
                                <li><a href="/article/2736.htm"
                                       title="[应用结构]应用" target="_blank">[应用结构]应用</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii2/1.htm">yii2</a>
                                    <div>应用主体 
应用主体是管理 Yii 应用系统整体结构和生命周期的对象。 每个Yii应用系统只能包含一个应用主体,应用主体在 入口脚本中创建并能通过表达式 \Yii::$app 全局范围内访问。 
 
 补充: 当我们说"一个应用",它可能是一个应用主体对象,也可能是一个应用系统,是根据上下文来决定[译:中文为避免歧义,Application翻译为应</div>
                                </li>
                                <li><a href="/article/2863.htm"
                                       title="assertThat用法" target="_blank">assertThat用法</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/JUnit/1.htm">JUnit</a><a class="tag" taget="_blank" href="/search/assertThat/1.htm">assertThat</a>
                                    <div>junit4.0  assertThat用法 
一般匹配符1、assertThat( testedNumber, allOf( greaterThan(8), lessThan(16) ) ); 
注释: allOf匹配符表明如果接下来的所有条件必须都成立测试才通过,相当于“与”(&&) 
2、assertThat( testedNumber, anyOf( g</div>
                                </li>
                                <li><a href="/article/2990.htm"
                                       title="android点滴2" target="_blank">android点滴2</a>
                                    <span class="text-muted">gundumw100</span>
<a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%BA%94%E7%94%A8/1.htm">网络应用</a><a class="tag" taget="_blank" href="/search/OS/1.htm">OS</a><a class="tag" taget="_blank" href="/search/HTC/1.htm">HTC</a>
                                    <div>如何让Drawable绕着中心旋转? 
 

Animation a = new RotateAnimation(0.0f, 360.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
a.setRepeatCount(-1);
a.setDuration(1000);
 
 
如何控制Andro</div>
                                </li>
                                <li><a href="/article/3117.htm"
                                       title="超简洁的CSS下拉菜单" target="_blank">超简洁的CSS下拉菜单</a>
                                    <span class="text-muted">ini</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                                    <div>效果体验:http://hovertree.com/texiao/css/3.htmHTML文件: 
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>简洁的HTML+CSS下拉菜单-HoverTree</title></div>
                                </li>
                                <li><a href="/article/3244.htm"
                                       title="kafka consumer防止数据丢失" target="_blank">kafka consumer防止数据丢失</a>
                                    <span class="text-muted">kane_xie</span>
<a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/offset+commit/1.htm">offset commit</a>
                                    <div>kafka最初是被LinkedIn设计用来处理log的分布式消息系统,因此它的着眼点不在数据的安全性(log偶尔丢几条无所谓),换句话说kafka并不能完全保证数据不丢失。 
  
尽管kafka官网声称能够保证at-least-once,但如果consumer进程数小于partition_num,这个结论不一定成立。 
  
考虑这样一个case,partiton_num=2</div>
                                </li>
                                <li><a href="/article/3371.htm"
                                       title="@Repository、@Service、@Controller 和 @Component" target="_blank">@Repository、@Service、@Controller 和 @Component</a>
                                    <span class="text-muted">mhtbbx</span>
<a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/prototype/1.htm">prototype</a>
                                    <div>@Repository、@Service、@Controller 和 @Component 将类标识为Bean 
Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发。@Repository注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。具体只需将该注解标注在 DAO类上即可。同时,为了让 Spring 能够扫描类</div>
                                </li>
                                <li><a href="/article/3498.htm"
                                       title="java 多线程高并发读写控制 误区" target="_blank">java 多线程高并发读写控制 误区</a>
                                    <span class="text-muted">qifeifei</span>
<a class="tag" taget="_blank" href="/search/java+thread/1.htm">java thread</a>
                                    <div>先看一下下面的错误代码,对写加了synchronized控制,保证了写的安全,但是问题在哪里呢? 
public class testTh7 {
	private String data;
	public String read(){
		System.out.println(Thread.currentThread().getName() + "read data " </div>
                                </li>
                                <li><a href="/article/3625.htm"
                                       title="mongodb replica set(副本集)设置步骤" target="_blank">mongodb replica set(副本集)设置步骤</a>
                                    <span class="text-muted">tcrct</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                                    <div>网上已经有一大堆的设置步骤的了,根据我遇到的问题,整理一下,如下: 
 
首先先去下载一个mongodb最新版,目前最新版应该是2.6 
 

cd /usr/local/bin
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.0.tgz
tar -zxvf  mongodb-linux-x86_64-2.6.0.t</div>
                                </li>
                                <li><a href="/article/3752.htm"
                                       title="rust学习笔记" target="_blank">rust学习笔记</a>
                                    <span class="text-muted">wudixiaotie</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">学习笔记</a>
                                    <div>1.rust里绑定变量是let,默认绑定了的变量是不可更改的,所以如果想让变量可变就要加上mut。 
let x = 1; let mut y = 2; 
2.match 相当于erlang中的case,但是case的每一项后都是分号,但是rust的match却是逗号。 
3.match 的每一项最后都要加逗号,但是最后一项不加也不会报错,所有结尾加逗号的用法都是类似。 
4.每个语句结尾都要加分</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>