Add preparing dev and test envs to Fuel Plugin SDK guide
Change-Id: Iabb4a4ab3260dea6ada8cb7b8e9c7ac4afde3d8f
This commit is contained in:
parent
de47e3a072
commit
985e4bdec7
|
@ -12,6 +12,7 @@ Fuel Plugin SDK Guide
|
||||||
fuel-plugin-sdk-guide/introduction.rst
|
fuel-plugin-sdk-guide/introduction.rst
|
||||||
fuel-plugin-sdk-guide/how-plugins-work.rst
|
fuel-plugin-sdk-guide/how-plugins-work.rst
|
||||||
fuel-plugin-sdk-guide/existing-plugins.rst
|
fuel-plugin-sdk-guide/existing-plugins.rst
|
||||||
|
fuel-plugin-sdk-guide/create-environment.rst
|
||||||
fuel-plugin-sdk-guide/create-plugin.rst
|
fuel-plugin-sdk-guide/create-plugin.rst
|
||||||
fuel-plugin-sdk-guide/requirements.rst
|
fuel-plugin-sdk-guide/requirements.rst
|
||||||
fuel-plugin-sdk-guide/limitations.rst
|
fuel-plugin-sdk-guide/limitations.rst
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
.. _create-environment:
|
||||||
|
|
||||||
|
Create a development environment
|
||||||
|
================================
|
||||||
|
|
||||||
|
To create a development environment, you must:
|
||||||
|
|
||||||
|
* Set up a repository and adhere to the workflow.
|
||||||
|
* Set up Continuous Integration and Continuous Deployment (CI/CD).
|
||||||
|
* Set up a testing framework.
|
||||||
|
|
||||||
|
This section includes the following topics:
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
create-environment/development-requirements.rst
|
||||||
|
create-environment/code-style.rst
|
||||||
|
create-environment/repository-workflow.rst
|
||||||
|
create-environment/repository-branching.rst
|
||||||
|
create-environment/launchpad-project.rst
|
||||||
|
create-environment/plugin-repo.rst
|
||||||
|
create-environment/plugin-ci.rst
|
||||||
|
create-environment/autotests.rst
|
|
@ -0,0 +1,70 @@
|
||||||
|
.. _autotests:
|
||||||
|
|
||||||
|
Prepare a testing environment
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
You must configure a testing environment to ensure you plugin code quality.
|
||||||
|
|
||||||
|
Use the following resources to download test, examples, and instructions on
|
||||||
|
how to configure a testing environment:
|
||||||
|
|
||||||
|
* `Fuel tests <https://github.com/openstack/fuel-qa>`_.
|
||||||
|
* `Plugin test cases example <https://github.com/openstack/fuel-qa/blob/master/fuelweb_test/tests/plugins/plugin_example/test_fuel_plugin_example.py>`_.
|
||||||
|
* `Instructions on configuring an environment <https://docs.fuel-infra.org/fuel-dev/devops.html>`_.
|
||||||
|
|
||||||
|
Follow these additional guidelines on creating and formating your own tests:
|
||||||
|
|
||||||
|
* When creating your own test class, you must inherit this test class from the
|
||||||
|
``TestBasic`` class in ``base_test_case.py``, where the Fuel web client
|
||||||
|
initialization is performed.
|
||||||
|
* Each test class and method must be decorated with ``@test``.
|
||||||
|
* Each class in the test group has groups to run all test cases together
|
||||||
|
and each test case has groups for a separate run.
|
||||||
|
* Test cases have the ``depends_on`` method or ``test`` which means that this
|
||||||
|
test case does not run until the ``depends_on`` method or ``test`` is done.
|
||||||
|
|
||||||
|
**Prepare a testing environment**
|
||||||
|
|
||||||
|
#. Clone the ``fuel-qa`` Git repository:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
git clone https://github.com/stackforge/fuel-qa
|
||||||
|
|
||||||
|
#. Activate the virtual environment:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
source ~/venv-nailgun-tests-2.9/bin/activate
|
||||||
|
|
||||||
|
#. Export the Fuel ISO:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
export ISO_PATH=path-to-iso
|
||||||
|
|
||||||
|
#. Go to ``fuel-qa``:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
cd fuel-qa/
|
||||||
|
|
||||||
|
#. Start the tests:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
./utils/jenkins/system_tests.sh -t test -w\
|
||||||
|
$(pwd) -j fuelweb_test -i $ISO_PATH -o --group=setup
|
||||||
|
|
||||||
|
#. For additional information, type:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
./utils/jenkins/system_tests.sh -h
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 3
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
autotests/autotests-workflow.rst
|
||||||
|
autotests/autotests-files.rst
|
|
@ -0,0 +1,26 @@
|
||||||
|
.. _autotests-files:
|
||||||
|
|
||||||
|
Automation test files
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Main files and modules:
|
||||||
|
|
||||||
|
* ``system_tests.sh`` - The file where tests start execution. This file processes
|
||||||
|
the parameters specified from the command line and invokes ``run_tests.py``.
|
||||||
|
* ``run_tests.py`` - Used to import your test files inside this file to run your
|
||||||
|
test.
|
||||||
|
* ``settings.py`` - Contains environment variables used for environment
|
||||||
|
customization. With this file, you can set such variables as path to ISO,
|
||||||
|
nodes quantity, etc.
|
||||||
|
* ``environment.py`` - Contains methods for environment deploying, virtual machines
|
||||||
|
creation and networking, installation of Fuel on the Fuel Master node, etc.
|
||||||
|
* ``nailgun_client.py`` - Contains functionality for nailgun handlers, methods and
|
||||||
|
API that are supported by the nailgun client. The nailgun client uses the
|
||||||
|
HTTP client that located in the ``helpers`` folder. The nailgun client is
|
||||||
|
used in the Fuel web client.
|
||||||
|
* ``checkers.py`` - Has methods for the SSH client to verify nodes access.
|
||||||
|
* ``common.py`` - Has methods for OpenStack API access, instances creation, etc.
|
||||||
|
* ``decorators.py`` - Has different decorators; the most usable is
|
||||||
|
‘’log_snapshot_on_error’’; it is recommended to use this decorator for all
|
||||||
|
tests, if any error diagnostic and environment snapshots will be created.
|
||||||
|
* ``os_actions.py`` - Has methods to work with OpenStack.
|
|
@ -0,0 +1,26 @@
|
||||||
|
.. _autotests-workflow:
|
||||||
|
|
||||||
|
Automation tests execution order
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
#. Base test cases are executed: these are the tests that set up environment
|
||||||
|
and install the Fuel Master node.
|
||||||
|
#. After passing these tests, snapshots are created which will be used by
|
||||||
|
the tests for creating clusters.
|
||||||
|
#. Revert to the previously created snapshots.
|
||||||
|
#. Set up the cluster and deploy it.
|
||||||
|
#. Run OSTF.
|
||||||
|
|
||||||
|
For test execution debugging, use ``dos.py``.
|
||||||
|
|
||||||
|
To create a snapshot, run:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
dos.py snapshot <myenv> --snapshot-name=<snapshot_name>
|
||||||
|
|
||||||
|
To revert a snapshot, run:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
dos.py revert <myenv> --snapshot-name=<snapshot_name>
|
|
@ -0,0 +1,24 @@
|
||||||
|
.. _code-style:
|
||||||
|
|
||||||
|
Install style checkers
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
To keep the code readable, reviewable, and maintainable, adhere to the
|
||||||
|
standardized style of `Puppet <https://docs.puppet.com/guides/style_guide.html>`_
|
||||||
|
and `Python <https://www.python.org/dev/peps/pep-0008/>`_.
|
||||||
|
|
||||||
|
Integrate the code style checkers to your Continuous Integration (CI) workflow.
|
||||||
|
|
||||||
|
**To install a Puppet code style checker:**
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
gem install puppet-lint
|
||||||
|
puppet-lint --with-context ./myplugin/deployment_scripts
|
||||||
|
|
||||||
|
**To install a Python code style checker:**
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
pip install pep8
|
||||||
|
pep8 --show-source --show-pep8 ./myplugin/deployment_scripts
|
|
@ -0,0 +1,13 @@
|
||||||
|
.. _development-requirements:
|
||||||
|
|
||||||
|
Development requirements
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Your development environment must meet the following requirements:
|
||||||
|
|
||||||
|
* Provide DEB and RPM packages and the dependencies. For instructions
|
||||||
|
on creating packages, see `Fedora project wiki <https://fedoraproject.org/wiki/How_to_create_an_RPM_package>`_
|
||||||
|
and `Ubuntu Packaging Guide <http://packaging.ubuntu.com/html/>`_.
|
||||||
|
|
||||||
|
* Create Puppet manifests according to the Official OpenStack documentation.
|
||||||
|
See `Puppet in OpenStack <https://wiki.openstack.org/wiki/Puppet>`_.
|
|
@ -0,0 +1,25 @@
|
||||||
|
.. _launchpad-project:
|
||||||
|
|
||||||
|
Launchpad project
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Launchpad is the bug tracking system that all OpenStack projects,
|
||||||
|
including Fuel and Fuel plugins, use. You must create a Launchpad
|
||||||
|
project as described in the official Launchpad documentation and
|
||||||
|
use it as a single entry point for reporting issues on your plugin
|
||||||
|
and tracking development progress.
|
||||||
|
|
||||||
|
All Fuel plugins must follow the following conventions:
|
||||||
|
|
||||||
|
* The project name must be in the ``fuel-plugin-<your plugin's name>``
|
||||||
|
format.
|
||||||
|
* The project page must link to the source plugin repository and its
|
||||||
|
entry in `DriverLog <https://wiki.openstack.org/wiki/DriverLog>`_.
|
||||||
|
* The project teams must incorporate all development team members.
|
||||||
|
* The milestones must repeat the plugin release specified in the
|
||||||
|
``metadata.yaml file``. For example, ``1.0.0``, ``2.0.0``.
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
- `List of existing Launchpad projects <https://wiki.openstack.org/wiki/Fuel/Plugins/Launchpad_projects_list>`_
|
||||||
|
- `Launchpad documentation <https://help.launchpad.net/Projects>`_
|
|
@ -0,0 +1,72 @@
|
||||||
|
.. _plugin-ci:
|
||||||
|
|
||||||
|
Configure a continuous integration environment
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
Plugin integration requires a Continuous Integration (CI) for testing
|
||||||
|
and deploying new changes.
|
||||||
|
|
||||||
|
**To configure a continuous integration environment:**
|
||||||
|
|
||||||
|
#. Configure Gerrit integration:
|
||||||
|
|
||||||
|
#. Create and configure a Launchpad user to votie as a third-party
|
||||||
|
developer. See `Third Party Testing <http://docs.openstack.org/infra/system-config/third_party.html>`_.
|
||||||
|
#. Add the username and public key for the Gerrit plugin configuration
|
||||||
|
in Jenkins.
|
||||||
|
#. Send an email to the openstack-dev mailing list and nominate your system
|
||||||
|
for voting permissions.
|
||||||
|
|
||||||
|
#. Prepare the development and testing environments:
|
||||||
|
|
||||||
|
#. Create a repository as described in :ref:`repository-workflow`.
|
||||||
|
#. Allocate enough plugin-specific testing labs.
|
||||||
|
#. Install and configure plugin-specific hardware resources.
|
||||||
|
#. Confiure testing labs. See the `Fuel development documentation <https://docs.fuel-infra.org/fuel-dev/devops.html>`_.
|
||||||
|
|
||||||
|
#. Configure CI:
|
||||||
|
|
||||||
|
#. Have your own CI server. This
|
||||||
|
provides better versioning, collecting test-results, deduplicating the
|
||||||
|
same jobs, easier configuration and managing.
|
||||||
|
#. Use Jenkins with the `Jenkins Job Builder plugin <http://docs.openstack.org/infra/jenkins-job-builder/>`_,
|
||||||
|
which provides easy job management and storage configuration.
|
||||||
|
#. Install the Jenkins Job Builder from Git as described
|
||||||
|
below.
|
||||||
|
#. Create a pre-commit-hook to check your code:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
# Save this script to <PROJECT>/.git/hooks/pre-review
|
||||||
|
and make it executable
|
||||||
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
find . -name '*.pp' | xargs -P1 -L1 puppet parser\
|
||||||
|
validate --verbose
|
||||||
|
find . -name '*.pp' | xargs -P1 -L1 puppet-lint \
|
||||||
|
--fail-on-warnings \
|
||||||
|
--with-context \
|
||||||
|
--with-filename \
|
||||||
|
--no-80chars-check \
|
||||||
|
--no-variable_scope-check \
|
||||||
|
--no-nested_classes_or_defines-check \
|
||||||
|
--no-autoloader_layout-check \
|
||||||
|
--no-class_inherits_from_params_class-check \
|
||||||
|
--no-documentation-check \
|
||||||
|
--no-arrow_alignment-check\
|
||||||
|
--no-case_without_default-check
|
||||||
|
find . -name '*.erb' | xargs -P1 -L1 -I '%'\
|
||||||
|
erb -P -x -T '-' % | ruby -c
|
||||||
|
fpb --check ./
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
- :ref:`plugin-ci-job-examples`
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
plugin-ci/plugin-ci-workflow.rst
|
||||||
|
plugin-ci/plugin-ci-job-examples.rst
|
|
@ -0,0 +1,213 @@
|
||||||
|
.. _plugin-ci-job-examples:
|
||||||
|
|
||||||
|
Job examples
|
||||||
|
------------
|
||||||
|
|
||||||
|
The following text is the example of Jenkins jobs at you can create
|
||||||
|
for plugins.
|
||||||
|
|
||||||
|
* deploy-plugin.sh:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
export SYSTEM_TESTS="${WORKSPACE}/utils/\
|
||||||
|
jenkins/system_tests.sh"
|
||||||
|
export LOGS_DIR=${WORKSPACE}/logs/\
|
||||||
|
${BUILD_NUMBER}
|
||||||
|
export VENV_PATH='/home/jenkins/\
|
||||||
|
venv-nailgun-tests-2.9'
|
||||||
|
YOUR_PLUGIN_PATH="$(ls ./*rpm)"\#Change\
|
||||||
|
this to appropriate fuel-qa variable for your plugin
|
||||||
|
export YOUR_PLUGIN_PATH#
|
||||||
|
|
||||||
|
sh -x "${SYSTEM_TESTS}" -w "${WORKSPACE}" -V\
|
||||||
|
"${VENV_PATH}" -i "${ISO_PATH}" -t test -o\
|
||||||
|
--group="${TEST_GROUP}"
|
||||||
|
|
||||||
|
* prepare_env.sh:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
export VENV_PATH="/home/jenkins/\
|
||||||
|
venv-nailgun-tests-2.9"
|
||||||
|
|
||||||
|
rm -rf "${VENV_PATH}"
|
||||||
|
|
||||||
|
REQS_PATH="${WORKSPACE}/fuel-qa/\
|
||||||
|
fuelweb_test/requirements.txt"
|
||||||
|
|
||||||
|
virtualenv --system-site-packages\
|
||||||
|
"${VENV_PATH}"
|
||||||
|
source "${VENV_PATH}/bin/activate"
|
||||||
|
pip install -r "${REQS_PATH}" --upgrade
|
||||||
|
django-admin.py syncdb --settings=devops.\
|
||||||
|
settings --noinput
|
||||||
|
django-admin.py migrate devops --settings\
|
||||||
|
=devops.settings --noinput
|
||||||
|
deactivate
|
||||||
|
|
||||||
|
* syntax-build-plugin.sh:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
find . -name '*.erb' -print 0 | xargs -0 -P1\
|
||||||
|
-I '%' erb -P -x -T '-' % | ruby -c
|
||||||
|
find . -name '*.pp' -print 0| xargs -0 -P1\
|
||||||
|
puppet parser validate --verbose
|
||||||
|
find . -name '*.pp' -print 0| xargs -0 -P1\
|
||||||
|
puppet-lint \
|
||||||
|
--fail-on-warnings \
|
||||||
|
--with-context \
|
||||||
|
--with-filename \
|
||||||
|
--no-80chars-check \
|
||||||
|
--no-variable_scope-check \
|
||||||
|
--no-nested_classes_or_defines-check \
|
||||||
|
--no-autoloader_layout-check \
|
||||||
|
--no-class_inherits_from_params_class-check \
|
||||||
|
--no-documentation-check \
|
||||||
|
--no-arrow_alignment-check
|
||||||
|
|
||||||
|
fpb --check ./
|
||||||
|
fpb --build ./
|
||||||
|
|
||||||
|
* plugins.yaml:
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
- project:
|
||||||
|
name: plugin_name #Your plugin mame
|
||||||
|
path_to_fuel_iso: $PWD #Path to FuelISO
|
||||||
|
plugin_repo: plugin_repo #Your plugin repo name\
|
||||||
|
at stackforge
|
||||||
|
email_to: emails_list #List of emails separated\
|
||||||
|
by comma
|
||||||
|
test_group: test_group #Test group in fuel-qa for\
|
||||||
|
deployment tests of your plugin
|
||||||
|
jobs:
|
||||||
|
- 'prepare_env'
|
||||||
|
- '{name}.build'
|
||||||
|
- '{name}.{dist}.deploy':
|
||||||
|
dist: 'centos'
|
||||||
|
- '{name}.{dist}.deploy':
|
||||||
|
dist: 'ubuntu'
|
||||||
|
|
||||||
|
- job-template:
|
||||||
|
name: 'prepare_env'
|
||||||
|
builders:
|
||||||
|
- shell:
|
||||||
|
!include-raw-escape './builders/prepare_env.sh'
|
||||||
|
description: 'Prepare environment to testing'
|
||||||
|
logrotate:
|
||||||
|
numToKeep: 10
|
||||||
|
parameters:
|
||||||
|
- string:
|
||||||
|
name: 'GERRIT_REFSPEC'
|
||||||
|
default: 'refs/heads/master'
|
||||||
|
scm:
|
||||||
|
- git:
|
||||||
|
branches:
|
||||||
|
- $GERRIT_BRANCH
|
||||||
|
refspec: $GERRIT_REFSPEC
|
||||||
|
url: 'https://review.openstack.org/stackforge\
|
||||||
|
/fuel-qa'
|
||||||
|
choosing-strategy: gerrit
|
||||||
|
clean:
|
||||||
|
before: true
|
||||||
|
publishers:
|
||||||
|
- email:
|
||||||
|
notify-every-unstable-build: true
|
||||||
|
recipients: '{email_to}'
|
||||||
|
|
||||||
|
- job-template:
|
||||||
|
name: '{name}.build'
|
||||||
|
builders:
|
||||||
|
- shell:
|
||||||
|
!include-raw-escape './builders/syntax-\
|
||||||
|
build-plugin.sh'
|
||||||
|
description: '<a href=https://github.com/\
|
||||||
|
stackforge/{plugin_repo}>Build {name} plugin\
|
||||||
|
from fuel-plugins project</a>'
|
||||||
|
logrotate:
|
||||||
|
numToKeep: 10
|
||||||
|
parameters:
|
||||||
|
- string:
|
||||||
|
name: 'GERRIT_REFSPEC'
|
||||||
|
default: 'refs/heads/master'
|
||||||
|
scm:
|
||||||
|
- git:
|
||||||
|
branches:
|
||||||
|
- $GERRIT_BRANCH
|
||||||
|
name: ''
|
||||||
|
refspec: $GERRIT_REFSPEC
|
||||||
|
url: 'https://review.openstack.org/\
|
||||||
|
stackforge/{plugin_repo}'
|
||||||
|
choosing-strategy: gerrit
|
||||||
|
clean:
|
||||||
|
before: true
|
||||||
|
triggers:
|
||||||
|
- gerrit:
|
||||||
|
trigger-on:
|
||||||
|
- patchset-created-event #Trigger\
|
||||||
|
plugin build for every gerrit patchset
|
||||||
|
projects:
|
||||||
|
- project-compare-type: 'PLAIN'
|
||||||
|
project-pattern: '{plugin_repo}'
|
||||||
|
branches:
|
||||||
|
- branch-compare-type: 'ANT'
|
||||||
|
branch-pattern: '**'
|
||||||
|
silent: true
|
||||||
|
server-name: 'review.openstack.org'
|
||||||
|
publishers:
|
||||||
|
- archive:
|
||||||
|
artifacts: '*.rpm'
|
||||||
|
- email:
|
||||||
|
notify-every-unstable-build: true
|
||||||
|
recipients: '{email_to}'
|
||||||
|
|
||||||
|
- job-template:
|
||||||
|
name: '{name}.{dist}.deploy'
|
||||||
|
builders:
|
||||||
|
- copyartifact:
|
||||||
|
project: '{name}.build'
|
||||||
|
which-build: last-successful
|
||||||
|
- inject:
|
||||||
|
properties-content: |
|
||||||
|
OPENSTACK_RELEASE={dist}
|
||||||
|
TEST_GROUP={test_group}
|
||||||
|
ISO_PATH={path_to_fuel_iso}
|
||||||
|
- shell:
|
||||||
|
!include-raw-escape './builders/\
|
||||||
|
deploy-plugin.sh'
|
||||||
|
description: 'fuel-qa system test for {name}'
|
||||||
|
logrotate:
|
||||||
|
numToKeep: 10
|
||||||
|
parameters:
|
||||||
|
- string:
|
||||||
|
name: 'GERRIT_REFSPEC'
|
||||||
|
default: 'refs/heads/master'
|
||||||
|
scm:
|
||||||
|
- git:
|
||||||
|
branches:
|
||||||
|
- $GERRIT_BRANCH
|
||||||
|
refspec: $GERRIT_REFSPEC
|
||||||
|
url: 'https://review.openstack.org/\
|
||||||
|
stackforge/fuel-qa'
|
||||||
|
choosing-strategy: gerrit
|
||||||
|
clean:
|
||||||
|
before: true
|
||||||
|
wipe-workspace: false
|
||||||
|
publishers:
|
||||||
|
- archive:
|
||||||
|
artifacts: 'logs/$BUILD_NUMBER/*'
|
||||||
|
- email:
|
||||||
|
notify-every-unstable-build: true
|
||||||
|
recipients: '{email_to}'
|
|
@ -0,0 +1,50 @@
|
||||||
|
.. _plugin-ci-workflow:
|
||||||
|
|
||||||
|
CI workflow
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The Fuel developers team recommends that you follow this CI workflow:
|
||||||
|
|
||||||
|
#. Prepare labs and start or update the lab:
|
||||||
|
|
||||||
|
* Download the ISO from `Fuel CI <https://ci.fuel-infra.org/>`_.
|
||||||
|
Depending on the Fuel version specified in plugin’s requirements,
|
||||||
|
Jenkins downloads the released ISO and/or the currently developed
|
||||||
|
and passed BVT test on core CI.
|
||||||
|
|
||||||
|
* Deploy the downloaded ISO and prepare the required labs
|
||||||
|
for testing using the ``fuel-dev`` and ``fuel-qa`` repositories:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ fuel-main/utils/jenkins/system_tests -t test -j\
|
||||||
|
dis_fuelweb_test -i (path to downloaded Fuel-ISO)\
|
||||||
|
-o --group=setup -V ${VIRTUAL_ENV} -k
|
||||||
|
|
||||||
|
* Create or restore the required empty VMs from snapshots.
|
||||||
|
|
||||||
|
#. A Gerrit review job starts building your plugin.
|
||||||
|
See `Gerrit workflow <http://docs.openstack.org/infra/manual/developers.html>`_.
|
||||||
|
|
||||||
|
#. Use a preconfigured `Gerrit Trigger <https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger>`_
|
||||||
|
to start your job after a new Gerrit patch arrives.
|
||||||
|
#. Run a code syntax checker and unit tests according to the instructions
|
||||||
|
from `Testing <https://wiki.openstack.org/wiki/Testing>`_.
|
||||||
|
#. Run a Puppet linter. See `Puppet OpenStack <https://wiki.openstack.org/wiki/Puppet/Development>`_.
|
||||||
|
#. Build the plugin.
|
||||||
|
#. Trigger the plugin testing.
|
||||||
|
|
||||||
|
#. Vote on the Gerrit patch page and add review the result in the comment
|
||||||
|
using Gerrit Trigger.
|
||||||
|
#. Test the plugin:
|
||||||
|
|
||||||
|
#. Install the plugin.
|
||||||
|
#. Configure the environment.
|
||||||
|
#. Deploy the environment with the inactive plugin.
|
||||||
|
#. Run the OSTF tests.
|
||||||
|
|
||||||
|
#. Run plugin-specific functional tests to check that the current plugin
|
||||||
|
version provides expected functionality.
|
||||||
|
#. Publish the resulting aggregated logs to the log storage.
|
||||||
|
|
||||||
|
You can do this by archiving logs.
|
|
@ -0,0 +1,53 @@
|
||||||
|
.. _plugin-repo:
|
||||||
|
|
||||||
|
Request an OpenStack repository
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
When you are ready to move your plugin project to a repository
|
||||||
|
in the OpenStack namespace, request a repository in the Fuel for
|
||||||
|
OpenStack Launchpad project.
|
||||||
|
|
||||||
|
Before requesting an OpenStack repository, verify that you have
|
||||||
|
the following:
|
||||||
|
|
||||||
|
* An account in Launchpad.
|
||||||
|
* A list of members to whom you want to grant the core reviewer
|
||||||
|
status in your plugin project.
|
||||||
|
* A list of members to whom you want to grant the the release developer
|
||||||
|
status.
|
||||||
|
|
||||||
|
**To request an OpenStack repository:**
|
||||||
|
|
||||||
|
#. Ensure you are registered with the following resources:
|
||||||
|
#. Go to the `Fuel project in Launchpad <https://launchpad.net/fuel>`_.
|
||||||
|
#. Click :guilabel:`Report a bug`.
|
||||||
|
#. In :guilabel:`Summary`, type in ``Create a Fuel Plugin project in
|
||||||
|
/Openstack``.
|
||||||
|
#. In the :guilabel:`Further information` field put the following details:
|
||||||
|
|
||||||
|
* Plugin name.
|
||||||
|
* Plugin functionality overview.
|
||||||
|
* Developer's contact information (email, skype, etc.).
|
||||||
|
|
||||||
|
Ensure that all members to who you want to grant the core reviewer rights
|
||||||
|
are registered at
|
||||||
|
`<https://review.openstack.org>`__. Otherwise, they cannot be granted the
|
||||||
|
core review status.
|
||||||
|
|
||||||
|
* List of core review developers with contact information: name, email in
|
||||||
|
`<https://review.openstack.org>`__. These developers will merge changes.
|
||||||
|
* List of release developers with contact information: name, email in
|
||||||
|
`<https://review.openstack.org>`__. These developers will create release
|
||||||
|
branches and tags in the repository.
|
||||||
|
`Example <https://review.openstack.org/#/admin/groups/692,members>`__.
|
||||||
|
|
||||||
|
#. Click :guilabel:`Extra`.
|
||||||
|
#. In :guilabel:`Tags`, type ``devops``.
|
||||||
|
|
||||||
|
When the Launchpad ticket is marked ``Fix Committed`` or ``Fix Released``,
|
||||||
|
your repository is created.
|
||||||
|
|
||||||
|
#. Fill your repository with the required files:
|
||||||
|
|
||||||
|
* Your plugin code. See :ref:`describe-plugin`.
|
||||||
|
* Documentation.
|
|
@ -0,0 +1,26 @@
|
||||||
|
.. _repository-branching:
|
||||||
|
|
||||||
|
Managing Git branches
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
To track the release cycle efficiently, branch your project or use tags.
|
||||||
|
|
||||||
|
Difference between a branch and a tag:
|
||||||
|
|
||||||
|
* A tag represents a version of a particular branch at a moment in time.
|
||||||
|
* A branch represents a separate thread of development that may run
|
||||||
|
concurrently with other development efforts on the same code base.
|
||||||
|
Changes to a branch may eventually be merged back into another branch
|
||||||
|
to unify them.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
* For a tagging example, see the `VPNaaS plugin <https://github.com/openstack/fuel-plugin-neutron-vpnaas>`_ repository.
|
||||||
|
* For a branching example, see the `LMA plugin <https://github.com/openstack/fuel-plugin-lma-collector>`_ repository.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 3
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
repository-branching/repository-branching-create.rst
|
||||||
|
repository-branching/repository-branching-delete.rst
|
|
@ -0,0 +1,30 @@
|
||||||
|
.. _repository-branching-create:
|
||||||
|
|
||||||
|
Create a branch
|
||||||
|
---------------
|
||||||
|
|
||||||
|
There are two ways to create a branch, using CLI or using the web UI.
|
||||||
|
|
||||||
|
**To create a branch using CLI:**
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
git push <remote> <localref>:<remotebranch>
|
||||||
|
|
||||||
|
Where:
|
||||||
|
|
||||||
|
* ``<remote>`` is the name of your Gerrit remote or the full remote URL.
|
||||||
|
* ``<localref>`` is the refname; this can be a branch or something else.
|
||||||
|
* ``<remotebranch>`` is the name of the branch you want created.
|
||||||
|
|
||||||
|
**To create a branch using the web UI:**
|
||||||
|
|
||||||
|
#. Ensure you are a core reviewer.
|
||||||
|
#. Go to `review.openstack.org <https://review.openstack.org/>`_.
|
||||||
|
#. In the :guilabel:`Project` menu, click :guilabel:`Branches`.
|
||||||
|
#. Enter a new branch name and click the :guilabel:`Create branch` button.
|
||||||
|
You can leave the :guilabel:`Initial revision` field blank.
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
- :ref:`repository-branching-delete`
|
|
@ -0,0 +1,22 @@
|
||||||
|
.. _repository-branching-delete:
|
||||||
|
|
||||||
|
Delete a branch
|
||||||
|
---------------
|
||||||
|
|
||||||
|
You may need to delete a branch in OpenStack if you no longer need the branch,
|
||||||
|
merged that branch with other branch, or dropped the development of the branch
|
||||||
|
|
||||||
|
**To delete a branch:**
|
||||||
|
|
||||||
|
#. Select from the following options:
|
||||||
|
|
||||||
|
* Contact the openstack-infra core team via mailing list.
|
||||||
|
See `example request <http://lists.openstack.org/pipermail/openstack-infra/2015-July/002921.html>`_.
|
||||||
|
* Report a bug in the `Fuel project <https://launchpad.net/fuel>`_ and assign
|
||||||
|
it to Fuel DevOps team.
|
||||||
|
* Request in #openstack-infra IRC channel on freenode.net. You can contact
|
||||||
|
the following core members there: fungi, clarkb, jeblair, pleia2.
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
- :ref:`repository-branching-create`
|
|
@ -0,0 +1,23 @@
|
||||||
|
.. _repository-workflow:
|
||||||
|
|
||||||
|
Repository workflow
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
As a plugin developer, your repository workflow must be the following:
|
||||||
|
|
||||||
|
#. Start your plugin development in your own repository open to public.
|
||||||
|
The repository can be any public Git hosting; for example, GitHub.
|
||||||
|
|
||||||
|
#. When you are ready to put your developed plugin project to the official
|
||||||
|
repository in the OpenStack namespace, you need to do the following:
|
||||||
|
|
||||||
|
* Have your code reviewed by the `Fuel team <https://bugs.launchpad.net/fuel/>`_.
|
||||||
|
You can also request a review in the #fuel-dev channel in IRC.
|
||||||
|
* Plan to set up a CI for the plugin. See :ref:`plugin-ci`.
|
||||||
|
* Confirm that you are going to support the plugin for more than one
|
||||||
|
version of Fuel.
|
||||||
|
* Confirm that you are releasing your plugin code under the Apache 2.0
|
||||||
|
license.
|
||||||
|
* Confirm your plugin code has no binary files.
|
||||||
|
* Request repository creation in the OpenStack namespace.
|
||||||
|
See :ref:`plugin-repo`.
|
Loading…
Reference in New Issue