16:47 And we're done. Time for a 15 minute break. After the break, we'll be back for a live blog from Steve King's presentation about Distributions. Find the live blog for that talk here.
16:47 Another tool; Deploy HQ that could deal with the whole deployment process (git pull etc). It can be used to automatically upload all changes to git directly to the server, or you need to hit a big Deploy Now button to deploy manually.
16:45 Version control is mandatory when working in a team.
16:45 [Q] Is there a video somewhere to explain the process? [A] Great idea. Chris will talk to other people at the office (I'm guessing Mark Willis) to see if it's possible to get a screencast for the process.
16:42 Before committing, someone uses PHP codesniffer to check docblocks and other code. It even checks if there is an actual ticket for the commit, which is assigned to you, before it lets you commit.
16:41 Oops. Passwords are the same for environments. That's something that could use some work..
16:41 The automatic project set up uses a zip file of an earlier install MODX site.
16:39 For an iPhone application a community member (Ramon Getman) set up Jenkins to check out from repository, run some commands, create a build using Xcode on Mac, upload it back to Jenkins and then to an app testing service. The key point is that it saves you a lot of time. There is time needed up front, but the time is saved down the line.
16:38 [Q] Have you solved the problem of chunks etc? [A] Yes, Static Elements. [Q] Any impact on performance? [A] Not if the media source is set to none (from the community).
16:36 And that's a wrap, time for questions now.
16:35 Another great tool, Toolbelt, is used to set up projects. Enter the domain, it clones the MODX repo to the local machine, the repository is set up, the origin remote (in git) is updated, the hook (connector we talked about before) is added to bitbucked and stuff gets pushed to git.
16:34 When everything is successful to that point, the site is deployed with RunDeck. Jenkins could be used, but by abstracting the deploy to RunDeck, it offers you the features of that. RunDeck just uses git pull.
16:33 BitBucket is used to create pull requests. Each feature is reviewed, and the branch is merged with master and then closed. That merger will automatically trigger Jenkins which runs all the tests.
16:31 Database differences (in both schema and data) are not automated, as it's very subjective and needs the developer to decide what needs to be merged and how. MySQL workbench is used (among others). This is done on a case-by-case basis.
16:29 Databases are still an unsolved problem. One thing is that there are no hardcoded IPs; instead the database server is configured (and committed to the source) as db.server, and the DNS on each of the servers (local, jenkins and live on rackspace) resolves that to the right IP/domain. Clever!
16:28 Seeing the Jenkins jobs for specific projects now. Jenkins is not just for testing. Previously they would use rsync to publish demo sites for clients. They wanted multiple demo sites, and they use Jenkins to do so through wildcards. Every branch for every project is available via
16:25 Here's how changing the context would be implemented. More blog posts or information will be published about this later.
16:23 For testing, phplint, phpunit and behat was used. Behat is really cool, and this an example (of an odd test, apparently). The cool thing is you can define your own scripts (in this example below) to change to a certain context.
16:21 A bitbucket connector is used to tell Jenkins about when something new was pushed to bitbucket. This is the connector they use, that each project is pointed to: link
16:19 So this is the final process, that doesn't let people skip any steps:
16:18 Every feature is branched, tests will be written for each feature, that is then committed and pushed and then Jenkins is used as CI Server.
16:17 The CI Server handles the testing. It's run every time code is pushed, or periodically. It's possible to deploying automatically, but the adido team doesn't use that. Results of the tests are reported via email and hipchat.
16:15 Now we're starting to talk about continuous integration. The goal is to prevent integration problems (merging is scary) and to have automatic testing.
16:14 Apparently bitbucket might be more reliable than Github because Github went down a few days ago. Bitbucket also gives free private repositories, which is a big pro. I'm still a Github user. :D
16:13 Using Git (bitbucket) for deployments, it's possible to force people through certain processes for deployments. There are no more wild west coding opportunities any more.
16:12 We're now looking at another diagram that shows a way of using nginx configurations with wildcards, which lets developers look at projects on other developers' computers.
16:10 Great diagram that shows where the developer is (inside the green circle) and how that works together with the rest.
16:08 We're now looking at a Vagrantfile (see photo below). There's some information taken out if (RSA keys etc), but this shows how it's configured.
16:06 To get the virtual machine, simply type
vagrant up in the command line to get everything set up according to the specification (which uses Puppet one way or another that I didn't quite understand, sorry).
16:05 Vagrant keeps files synced between the host and guest operating system. In the finder/explorer it will look like all files are on your system, but Vagrant makes sure the virtual machine has access to the exact same files.
16:03 With vagrant you configure a process that sets up a preconfigured operating system. Everyone uses the exact same environment. It's a wrapper around VirtualBox to set up virtual machines.
16:02 Vagrant: "create and configure lightweight, reproducible and portable development environments".
16:01 Big shoutout to Mark Willis for introducing the Adido team to MODX.
16:00 Working with these processes would mean everyone needed to know all about these small problems.
15:59 Chris describes Remote Desktop as the "devil on your shoulder" where developers could log in to the server and fix problems in place... which would get overwritten next time a rsync deploy would be ran. Lot of small problems can pile up over time.
15:57 To figure out who didn't commit their code, sync logs could be checked to see who introduced uncommitted code.
15:55 .bat files were used for the rssync deploy, merges etc. For this process it wasn't necessary to commit to SVN before deploying with this process, so it was possible to deploy things not yet in the source, which could get overwritten by someone else.
15:53 After checking out the source, it was ran on a Visual Studio Server or local IIS. They don't work exactly the same, which makes collaborating more difficult. Also used was rsync, which according to the audience is awesome! It was used as alternative for FTP to deploy to live or demo sites.
15:52 In the .NET days, SVN was used for version control (hosted internally).
15:51 Changing CMSs gave Adido a chance to review things. How to build and how to deploy websites. Especially important when you're collaborating with other people.
15:49 When looking for a CMS, there were a couple of priorities for evaluating a CMS. There needed to be a good community they could participate in. It needs to be customisable so they can easily adjust to clients changing their mind. The third is that it needed to be easier for clients. Apparently orange and blue is bad... WHAT?! Luckily, they did end up going with MODX because it was easy to use for clients.
15:46 A community like the MODX one is a lot better at managing a CMS product than an in-house team.
15:46 The Adido team used to be a .NET agency, with their own CMS. It's called dub3, and was built in-house and has been their primary platform for about 10 years. Over 300 websites built with it!
15:45 Adido doesn't do any work at all, they just play video games.
15:44 Chris explains why quick and easy access is important for the developers working at Adido (a 30 man show).
15:41 Chris Cherrett from Adido will talk about Continuous Integration and Deployment, starting right now. Chris is not a sysadmin, but a developer building and breaking features :)