Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!newsfeed.xs4all.nl!newsfeed2a.news.xs4all.nl!xs4all!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.013 X-Spam-Evidence: '*H*': 0.97; '*S*': 0.00; 'subject:Python': 0.06; 'automate': 0.07; 'deployed': 0.07; 'subject:application': 0.07; 'tool,': 0.07; 'url:blog': 0.10; 'cc:addr:python-list': 0.11; 'python': 0.11; 'ben,': 0.16; 'camp': 0.16; 'code?': 0.16; 'finney': 0.16; 'fit,': 0.16; 'fits': 0.16; 'hierarchy': 0.16; 'hierarchy,': 0.16; 'modules,': 0.16; 'wrote:': 0.18; 'all,': 0.19; 'deployment': 0.19; 'spread': 0.22; 'cc:addr:python.org': 0.22; 'frameworks': 0.24; 'specifies': 0.24; 'cc:2**0': 0.24; 'post': 0.26; 'header:In-Reply-To:1': 0.27; 'idea': 0.28; 'host': 0.29; 'locations': 0.30; 'specified': 0.30; 'message- id:@mail.gmail.com': 0.30; 'url:mailman': 0.30; 'code': 0.31; 'branches': 0.31; 'url:python': 0.33; 'subject:from': 0.34; 'definition': 0.35; 'but': 0.35; 'received:google.com': 0.35; 'there': 0.35; 'url:listinfo': 0.36; 'url:org': 0.36; 'application': 0.37; 'skip:& 10': 0.38; 'ben': 0.38; 'branch': 0.38; 'pm,': 0.38; 'skip:& 20': 0.39; 'url:mail': 0.40; 'how': 0.40; 'different': 0.65; 'skip:\xe2 10': 0.65; 'within': 0.65; '8bit%:40': 0.68; '8bit%:21': 0.69; 'goal': 0.75; '8bit%:46': 0.78; '2015': 0.84; '8bit%:24': 0.84; 'bar:': 0.84; 'control)': 0.84; 'discrete': 0.84; 'hate': 0.91; 'skip:\xe2 30': 0.91 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=329QyiG/YShWcliUq9xr/NinT1lqkJKg03MOA+Qe+IE=; b=Ade/s5wAnbW52aTFfoW0I8nOe8ANSjleWRmgq9dXILOk+z6x+uecGUn/n4885ETBG+ e1n77mnNqU27bpqp93hi0KnGnwS1XLVVl33xSpojqX0vSd6+/CAQ5VBZHdkcxOII3UoY oA9GLq+tQPsSdJAmoNPGyQtfDUZagW+SNMF4JRc5DC10MrswHE8UnidBwktjoo2JUhEQ Lg4YEaq8aUQhl7my10VD4ebQMe4lBL0yxO2RlCacwX6lhrSWMWbGGLg3jvTbqaoQEL0i x6SSj5iwu5/qlzZc9J49ovz/qAiXeSz8ODKh3+3EF6bghBjGoviTfQsU81IveVLkWtMJ +RtQ== X-Received: by 10.194.77.180 with SMTP id t20mr38016510wjw.115.1428499132514; Wed, 08 Apr 2015 06:18:52 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <857ftnza1u.fsf@benfinney.id.au> References: <857ftnza1u.fsf@benfinney.id.au> From: Michael Herman Date: Wed, 8 Apr 2015 07:18:32 -0600 Subject: Re: Automate deployment of Python application from multiple VCS repositories To: Ben Finney Cc: "comp.lang.python" Content-Type: multipart/alternative; boundary=047d7bfd06165b53310513365f3e X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 147 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1428499133 news.xs4all.nl 2848 [2001:888:2000:d::a6]:53012 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:88662 --047d7bfd06165b53310513365f3e Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Ben, I would start with Fabric. -> http://www.fabfile.org/. It's "low-level", but super straightforward. Here's a blog post on how to setup deployment -> https://realpython.com/blog/python/kickstarting-flask-on-ubuntu-setup-and-d= eployment/ On Tue, Apr 7, 2015 at 7:24 PM, Ben Finney wrote: > Howdy all, > > What tools are available to automate deployment of a Python application > comprising many discrete modules, spread across different code bases in > different VCS repositories? > > My idea is to have a single definition (itself under VCS control) that > specifies VCS locations and branches, a hierarchy into which all the > modules fit, and a deployment host. > > host foo: > repo =E2=80=98spam-common =E2=80=99, branch =E2=80=98trunk= =E2=80=99, at =E2=80=98./common/=E2=80=99 > repo =E2=80=98beans =E2=80=99, branch =E2=80=98version 6.1= =E2=80=99, at =E2=80=98./=E2=80=99 > repo =E2=80=98sausage =E2=80=99, branch =E2=80=98trunk=E2=80= =99, at =E2=80=98./third-party/sausage/=E2=80=99 > > host bar: > repo =E2=80=98spam-common =E2=80=99, branch =E2=80=98maint= =E2=80=99, at =E2=80=98./common/=E2=80=99 > repo =E2=80=98beans =E2=80=99, branch =E2=80=98version 7.0= =E2=80=99, at =E2=80=98./=E2=80=99 > repo =E2=80=98eggs =E2=80=99, branch =E2=80=98master=E2=80= =99, at =E2=80=98./third-party/eggs/=E2=80=99 > repo =E2=80=98toast =E2=80=99, branch =E2=80=98trunk=E2=80= =99, at =E2=80=98./third-party/eggs/toast/=E2=80=99 > repo =E2=80=98sausage =E2=80=99, branch =E2=80=98version 1.4= =E2=80=99, at > =E2=80=98./third-party/sausage/=E2=80=99 > > The deployment tool, when told which host specification to use, then > gathers the code by exporting it from its disparate branches, fits it > into the directory hierarchy, and deploys that to the specified host. > > The goal is to be able to have multiple host specifications, each of > which needs a different set of code repositories (and often different > branches within those repositories) to be built into the deployed > application. > > What frameworks are there to do this for Python code? > > -- > \ =E2=80=9CKnow what I hate most? Rhetorical questions.=E2=80=9D = =E2=80=94Henry N. Camp | > `\ | > _o__) | > Ben Finney > > -- > https://mail.python.org/mailman/listinfo/python-list > --047d7bfd06165b53310513365f3e Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Ben,

I would start with Fabric. ->= ;=C2=A0http://www.fabfile.org/. It&= #39;s "low-level", but super straightforward.

On Tue, Apr 7, 2015 at 7:24 PM, Ben Finney <ben+python@benfinney.id.au> wrote:
Howdy all,

What tools are available to automate deployment of a Python application
comprising many discrete modules, spread across different code bases in
different VCS repositories?

My idea is to have a single definition (itself under VCS control) that
specifies VCS locations and branches, a hierarchy into which all the
modules fit, and a deployment host.

=C2=A0 =C2=A0 host foo:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 repo =E2=80=98spam-common <URL>=E2=80=99,= branch =E2=80=98trunk=E2=80=99, at =E2=80=98./common/=E2=80=99
=C2=A0 =C2=A0 =C2=A0 =C2=A0 repo =E2=80=98beans <URL>=E2=80=99, branc= h =E2=80=98version 6.1=E2=80=99, at =E2=80=98./=E2=80=99
=C2=A0 =C2=A0 =C2=A0 =C2=A0 repo =E2=80=98sausage <URL>=E2=80=99, bra= nch =E2=80=98trunk=E2=80=99, at =E2=80=98./third-party/sausage/=E2=80=99
=C2=A0 =C2=A0 host bar:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 repo =E2=80=98spam-common <URL>=E2=80=99,= branch =E2=80=98maint=E2=80=99, at =E2=80=98./common/=E2=80=99
=C2=A0 =C2=A0 =C2=A0 =C2=A0 repo =E2=80=98beans <URL>=E2=80=99, branc= h =E2=80=98version 7.0=E2=80=99, at =E2=80=98./=E2=80=99
=C2=A0 =C2=A0 =C2=A0 =C2=A0 repo =E2=80=98eggs <URL>=E2=80=99, branch= =E2=80=98master=E2=80=99, at =E2=80=98./third-party/eggs/=E2=80=99
=C2=A0 =C2=A0 =C2=A0 =C2=A0 repo =E2=80=98toast <URL>=E2=80=99, branc= h =E2=80=98trunk=E2=80=99, at =E2=80=98./third-party/eggs/toast/=E2=80=99 =C2=A0 =C2=A0 =C2=A0 =C2=A0 repo =E2=80=98sausage <URL>=E2=80=99, bra= nch =E2=80=98version 1.4=E2=80=99, at =E2=80=98./third-party/sausage/=E2=80= =99

The deployment tool, when told which host specification to use, then
gathers the code by exporting it from its disparate branches, fits it
into the directory hierarchy, and deploys that to the specified host.

The goal is to be able to have multiple host specifications, each of
which needs a different set of code repositories (and often different
branches within those repositories) to be built into the deployed
application.

What frameworks are there to do this for Python code?

--
=C2=A0\=C2=A0 =C2=A0 =C2=A0 =C2=A0=E2=80=9CKnow what I hate most? Rhetorica= l questions.=E2=80=9D =E2=80=94Henry N. Camp |
=C2=A0 `\=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0|
_o__)=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 |
Ben Finney

--
https://mail.python.org/mailman/listinfo/python-list

--047d7bfd06165b53310513365f3e--