 ------
 Administrator's Guides
 ------
 Emmanuel Venisse
 ------
 2010-02-18
 ------

~~ 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.

Administrator's Guides

 * {{{./security/index.html}Managing Users and Security}}

 * {{{./projectgroup.html}Managing Project Groups}}

 * {{{./builder.html}Managing Installations}}

 * {{{./buildEnvironment.html}Managing Build Environments}}

 * {{{./build-agents.html}Managing Build Agents}}

 * {{{./build-agent-groups.html}Managing Build Agent Groups}}

 * {{{./schedules.html}Managing Schedules}}

 * {{{./configuration.html}Managing General Configuration}}

 * {{{./localRepository.html}Managing Local Repositories}}

 * {{{./purgeConfiguration.html}Managing Purge Configuration}}

 * {{{./parallelBuilds.html}Managing Parallel Builds}}

 * {{{./buildQueue.html}Managing Build Queues}}

 * {{{./queues.html}Managing Project Queues}}

 * {{{./external-db.html}External Databases}}

 * {{{./monitoring.html}Monitoring Continuum}}

 * {{{./logging/index.html} Log Files}}

 * {{{./appearance.html}Appearance Configuration}}

 * {{{./builddefTemplate.html}Build Definition Templates}}

 * {{{./shutdown.html}Shutting Down Continuum}}

 * {{{./distributed-builds.html}Understanding Distributed Builds}}

 * {{{./webdav.html} Accessing remote working copies using WebDAV}}
