Hmm, this looks like a lot like nimble's scripting. Can ACE generate a deployment script that loads up a set of artifacts/features/etc? It would go a long ways towards the checkin-ability of what is manipulated in the UI / API.
On Tue, Aug 6, 2013 at 2:34 PM, Marcel Offermans < [email protected]> wrote: > Hello Matthew, > > On Aug 6, 2013, at 23:10 PM, Matthew Bishop <[email protected]> wrote: > > > On Tue, Aug 6, 2013 at 1:58 PM, Marcel Offermans < > > [email protected]> wrote: > > > >> To give you another example, we recently automated our continuous build > >> system so for each succesful build it takes the artifacts that come out > of > >> that build and (through a GoGo Shell script) upload them to a repository > >> and then create all the metadata in ACE. The end result is that we can > >> automatically deploy such code directly to our QA and demo environments, > >> completely automated. > > > > Is this gogo script checked into ACE somewhere? It is definitely an > > interesting part of the story. I am working my backwards from the end > > deployment story to the developer, as we did it developer-first and ended > > up with pax and maven on the production server. Not cool. > > It is not, because it is specific to our environment. The GoGo commands > are something we only very recently added, so they're not documented well > yet. > > However, I have adapted the script we use a bit (taking out the specific > bits). It probably requires some more context to be fully understood, and > probably Bram can answer some more detailed questions about it (he wrote > the script). Basically it takes the artifacts from a build, checks if they > are really different from the ones we already deployed the previous time, > uploads all changed artifacts and configures ACE. We run this script with a > client jar from the ACE distribution, and configure it as the startup > script. As soon as the script is done, we shutdown this client again. > > > # > # Continuous deployment gogo script > # > > # environment variables we import here > targetrepourl = "$DEPLOYMENT_TARGETOBR_URL" > releaserepourl = "$DEPLOYMENT_RELEASEOBR_URL" > autoconfurl = "$DEPLOYMENT_AUTOCONF_URL" > > sourceindex = (repo:index /tmp/ace-cdeploy) > sourcerepo = (repo:repo R5 $sourceindex) > targetrepo = (repo:repo OBR $targetrepourl) > releaserepo = (repo:repo OBR $releaserepourl) > > echo "Deploying release resources" > deployed = repo:cd $releaserepo $sourcerepo $targetrepo > > echo "Ensuring autoconf resource" > autoconf = (coll:first ($targetrepo find > "(osgi.identity=org.apache.felix.deployment.rp.autoconf)")) > if { $autoconf } { echo " -> exists" } \ > { > repo:d $targetrepo $autoconfurl > autoconf = (coll:first ($targetrepo find > "(osgi.identity=org.apache.felix.deployment.rp.autoconf)")) > echo " -> deployed" > } > > echo "Opening client workspace" > workspace = (ace:cw) > > echo "Ensuring cdtarget exists" > target = (coll:first ($workspace lt "(id=cdtarget)")) > if { $target } { echo " -> exists" } \ > { > $workspace ct "cdtarget"; > target = (coll:first ($workspace lt "(id=cdtarget)")) > echo " -> created" > } > > echo "Ensuring cdtarget is registered" > if { $target isRegistered } { } { $target register } > > echo "Ensuring cdtarget is !autoapprove" > $target setAutoApprove false > > # here we set some specific properties used by our configurations > (anonymized) > $target addTag "domain" "foo.com" > $target addTag "ip-address" "127.0.0.1" > $target addTag "timezone" "Europe/Amsterdam" > > echo "Ensuring cdfeature exists" > if { (coll:first ($workspace lf "(name=cdfeature)")) } { echo " -> exists" > } { $workspace cf "cdfeature"; echo " -> created" } > > echo "Ensuring cddistribution exists" > if { (coll:first ($workspace ld "(name=cddistribution)")) } { echo " -> > exists" } { $workspace cd "cddistribution"; echo " -> created" } > > echo "Ensuring f2d association" > if { (coll:first ($workspace lf2d "(leftEndpoint=*name=cdfeature*)")) } { > echo " -> exists" } { $workspace cf2d "(name=cdfeature)" > "(name=cddistribution)" "1" "1"; echo " -> created" } > > echo "Ensuring a2f association" > if { (coll:first ($workspace la2f "(rightEndpoint=*name=cdfeature*)")) } { > echo " -> exists" } { $workspace ca2f "(cdartifact=true)" > "(name=cdfeature)" "10000" "1"; echo " -> created" } > > echo "Ensuring d2t association" > if { (coll:first ($workspace ld2t "(leftEndpoint=*name=cddistribution*)")) > } { echo " -> exists" } \ > { $workspace cd2t "(name=cddistribution)" "(id=*)" "1" "1000"; echo " -> > created" } > > echo "Ensuring autoconf artifact" > if { (coll:first ($workspace lrp)) } { echo " -> exists" } \ > { > identity = $autoconf getIdentity > version = $autoconf getVersion > name = "$identity - $version" > url = $autoconf getUrl > mimetype = $autoconf getMimetype > $workspace ca [ artifactName="$name" url="$url" mimetype="$mimetype" > Bundle-SymbolicName="$identity" Bundle-Version="$version" > Deployment-ProvidesResourceProcessor="org.osgi.deployment.rp.autoconf" ] > echo " -> created" > } > > echo "Purging old artifacts" > artifacts = ($workspace la) > each $artifacts { > $workspace da $it > } > > echo "Creating new artifacts" > each $deployed { > identity = $it getIdentity > version = $it getVersion > name = "$identity - $version" > url = $it getUrl > mimetype = $it getMimetype > if { $mimetype equals "application/xml:osgi-autoconf" } \ > { $workspace ca [ artifactName="$name" url="$url" mimetype="$mimetype" > filename="$name" processorPid="org.osgi.deployment.rp.autoconf" ] [ > cdartifact="true" ] } \ > { $workspace ca [ artifactName="$name" url="$url" mimetype="$mimetype" > Bundle-SymbolicName="$identity" Bundle-Version="$version" ] [ > cdartifact="true"] } > } > > echo "Ensuring approval on target" > if { $target needsApprove } { echo " approving"; $target approve } { echo > " no changes" } > > echo "Committing workspace" > $workspace commit > > # Let events settle > misc:sleep 2000 > ace:rw $workspace > > # Let events settle > misc:shutdown 2000 > > > Greetings, Marcel > >
