Jump to: navigation, search

Difference between revisions of "Deployed to a repository"

Line 1: Line 1:
 
+
= Overview =
In general we use a non-standard approach to deploying builds.  The standard approach to deploying python projects is to run something like 'sdist upload' and on java it would be using the java release plugin.  We do not agree with those approaches to releasing software for a few reasons:
+
In general we use a non-standard approach to release builds.  The standard approach to releasing python projects is to run something like 'sdist upload' and on java it would be using the java release plugin.  We do not agree with those approaches to releasing software for a few reasons:
 
# It's doing too much, those things are doing build, test, deployments and even possibly tagging all in one.  What we want is to simply copy a file to a repository.   
 
# It's doing too much, those things are doing build, test, deployments and even possibly tagging all in one.  What we want is to simply copy a file to a repository.   
# It's posing a security risk by downloading from multiple repsitories, we are concerned that something might get through that could re-route the builds to an evil repository.
+
# It's posing a security risk by downloading from multiple repsitories, we are concerned that something might get through that could re-route the downloads from an evil repository.
 +
# Some release workflow make commits on deployment, that does not work well with the Gerrit review workflow because it would require a manual step to approval changes during the release.
  
So instead we simply use curl to deploy the builds to the appropriate repository.
+
So instead we use info from git to version the build then we use curl to publish the built artifacts to the appropriate repository.  
  
== CI Build Deployments ==
+
== CI Builds ==
 +
When CI builds are created the artifacts are usually published to the [http://tarballs.openstack.org tarballs] file server.  The build version will be something like $PROJECT_NAME-$TAG.$COMMITS_SINCE_TAG.$GIT_SHA
  
When CI builds are created it usually gets deployed to the [http://tarballs.openstack.org tarballs] file server.
+
== Release Builds ==
 +
When a tag* is created a jenkins job will do the following:
 +
# Make a release build with version $PROJECT_NAME-$TAG
 +
# Publish release build to [http://tarballs.openstack.org tarballs]
 +
# Copy the released build from tarballs to an appropriate repository depending on the type of project that is built.
  
== Release Deployments ==
+
*Note - only project core members have permission to create tags.
  
When tags are created the tagged build gets deployed to an appropriate repository depending on the type of project that is built.  Here is a list of some of the repositories:
+
=== Repositories ===
 +
List of repositories we deploy to:
 
# Python projects are deployed to [http://www.pypi.org pypi]
 
# Python projects are deployed to [http://www.pypi.org pypi]
 
# General Java projects are deployed to [http://oss.sonatype.org maven central]     
 
# General Java projects are deployed to [http://oss.sonatype.org maven central]     
 
# Jenkins plugins are deployed to [http://repo.jenkins-ci.org jenkins repo]
 
# Jenkins plugins are deployed to [http://repo.jenkins-ci.org jenkins repo]

Revision as of 05:35, 12 December 2013

Overview

In general we use a non-standard approach to release builds. The standard approach to releasing python projects is to run something like 'sdist upload' and on java it would be using the java release plugin. We do not agree with those approaches to releasing software for a few reasons:

  1. It's doing too much, those things are doing build, test, deployments and even possibly tagging all in one. What we want is to simply copy a file to a repository.
  2. It's posing a security risk by downloading from multiple repsitories, we are concerned that something might get through that could re-route the downloads from an evil repository.
  3. Some release workflow make commits on deployment, that does not work well with the Gerrit review workflow because it would require a manual step to approval changes during the release.

So instead we use info from git to version the build then we use curl to publish the built artifacts to the appropriate repository.

CI Builds

When CI builds are created the artifacts are usually published to the tarballs file server. The build version will be something like $PROJECT_NAME-$TAG.$COMMITS_SINCE_TAG.$GIT_SHA

Release Builds

When a tag* is created a jenkins job will do the following:

  1. Make a release build with version $PROJECT_NAME-$TAG
  2. Publish release build to tarballs
  3. Copy the released build from tarballs to an appropriate repository depending on the type of project that is built.
  • Note - only project core members have permission to create tags.

Repositories

List of repositories we deploy to:

  1. Python projects are deployed to pypi
  2. General Java projects are deployed to maven central
  3. Jenkins plugins are deployed to jenkins repo