Amazon S3 can be used to serve static content, with all the advantages of scaling and redundancy that you get from Amazon.
There are comprehensive guides to setting up a site in S3 – this is a shortened version to highlight a couple of things.
SauceLabs provide a great hosted Selenium service for cross-browser testing in the cloud, which allows you to run a Selenium test suite against multiple browsers using the SauceLabs API and SauceConnect.
They also provide integration with PHPUnit, so that you can plug your SauceLabs Selenium tests directly into your PHPUnit test suite.
Sometimes, though, you want to run the same Selenium test suite against a single browser on your local machine, before you run the full thing against all the browsers on SauceLabs.
I’ll be giving a talk about agile development on the 26th July 2012, in Douglas on the Isle of Man – more details here: http://www.bcs.org.im/2012/07/
I had a problem with the PEAR installer with the Guzzle package (a generally excellent PHP HTTP framework).
A channel discover would give the following error:
root@ip-10-56-47-23:~# pear channel-discover guzzlephp.org/pear Discovering channel guzzlephp.org/pear over http:// failed with message: channel-add: Cannot open "http://guzzlephp.org/pear/channel.xml" (File http://guzzlephp.org:80/pear/channel.xml not valid (received: HTTP/1.1 404 Not Found )) Trying to discover channel guzzlephp.org/pear over https:// instead Discovery of channel "guzzlephp.org/pear" failed (channel-add: Cannot open "https://guzzlephp.org/pear/channel.xml" (Connection to `guzzlephp.org:443' failed: Connection refused))
Strangely, I could fetch the channel.xml file manually and add the channel. But even then, the install would fail (with similar messages about 404 errors).
The solution seemed to be upgrading PEAR – I was running version 1.9.0 (check it with “pear -V”), so I upgraded it:
root@ip-10-56-47-23:~# pear upgrade pear
after which I had version 1.9.4. Then I tried the channel discover again, with much better results:
root@ip-10-56-47-23:~# pear channel-discover guzzlephp.org/pearAdding Channel "guzzlephp.org/pear" succeeded Discovery of channel "guzzlephp.org/pear" succeeded
We use Jenkins to deploy code to multiple servers, so that we can manage builds and deployments from the same (even better if you’re using the Jenkins IRC plugin).
The deployment is done by a parameterized build job, where the parameter is the version of the project that we want to deploy. The job will run remote commands over ssh on servers that you’ve defined in the Jenkins configuration. Those commands will pull down a version of our code, unpack it, and run the rest of the install steps.
First you’ll need to install the Publish over SSH Plugin, which will allow files to be transferred to your servers and remote commands to be run.
Set up the SSH key for remote access of your target servers, in the Manage Jenkins page:
and setup the definitions for each of the servers that you want to deploy to:
Then in the configuration for the new deployment job you’ve set up, you’ll use the “Send files or execute commands over SSH before the build starts” settings in the “Build Environment” section to remotely execute a script to carry out the install steps on each remote server:
Notice that the build parameter “$version” is available to the Exec command that gets remotely executed – other Jenkins environment variables will also be available (e.g. $BUILD_NUMBER, $JOB_NAME etc).
Use the “Add Server” button to add more target servers, with the same Exec command.
Now you can deploy your project (or run any other remote scripts) by running the build job and specifying a version number.
We usually work on several parallel branches of a repo on github, and we wanted to be able to build and test any branch on demand.
So we set up a parameterised job in Jenkins that will take the name of a branch and run the build process.
As for all github builds, you need to have installed the git plugin first (https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin) and set up your github globals in the Jenkins settings:
Then set up a parameterized build job with the repo as the GitHub project and with “branch” as the parameter to be specified:
and in the Source Code Management section, add the parameter to the “Branches to build”:
Now you can build any branch just by giving the branch name as the required parameter when the job is started.
We’re moving our development projects into github, so we wanted to get a copy of the code (checked out of Subversion) into a new project in github.
Here are the steps (assumes that you’ve set up your ssh keys correctly, according to e.g. http://help.github.com/linux-set-up-git/)
Setup the git globals:
$ git config --global user.name "Julian Higman" $ git config --global user.email "jh @ kasabi.com"
Create the new project, add a README file, and connect it to the github remote project:
$ mkdir my-new-project $ cd my-new-project/ $ git init $ touch README $ git add README $ git commit -m "First commit" $ git remote add origin email@example.com:kasabi/my-new-project.git $ git push -u origin master
Now copy in the project source files, excluding svn files and other project config files:
$ cd .. $ rsync -r --exclude=.svn --exclude=.buildpath --exclude=.project --exclude=.git my-old-project/ my-new-project/
Then add the new files, commit them, and push to the remote repo:
$ cd my-new-project/ $ git add -A $ git status $ git commit -m "added project files" $ git push
The Drush Make utility downloads modules from ftp.drupal.org during the build – but the ftp.drupal.org site is currently down, which means Drush Make won’t work (and so our continuous integration has ground to a halt).
There’s a fix for general Drush usage here: http://contrib.linalis.com/content/continuer-dutiliser-drush-quand-ftpdrupalorg-est-down
That fix changes the download url to use drupal.org (which is working) instead of ftp.drupal.org (which isn’t).
Unfortunately Drush Make uses it’s own download functions, so this doesn’t help.. Here’s my (very similar) hack to get the Drush Make downloads working..
Change line 367 in drush_make.drush.inc to the following:
'url' => str_replace('ftp.', '', $release['file']),
(The file should be somewhere like /usr/share/drush/commands/drush_make)
And don’t forget to remove the hack when ftp.drupal.org comes back..