Travis Ci is one of the most essential tools for my projects, since it takes a burden of maintaining Jenkins away of me. I try to use Travis automation for every boring activity, and having it run after each source code change to do some basic tests saves me a lot of time.
Making things work in Travis is typically straightforward, but there are
cases where a special configuration needs to be applied, since the new
Travis is based on the container-based architecture. This poses some
requirements: no root access and no sudo functionality for your setup
scripts. Some software doesn’t like that.
My website’s repo is an example where I
needed to use nginx for some local testing. For some reason nginx,
instead of just using /var/tmp, tries to create its temporary files in
/var/run directory, and we don’t have the permission to this directory in
a container. So I changed these paths to use /tmp together with
access_log and error_log paths; website content lives in /tmp/www.
Even with these changes, I haven’t managed to achieve warning-free start. As
non-zero UID, it seems like nginx never cleanly starts:
nginx: [alert] could not open error log file: open()
"/var/log/nginx/error.log" failed (13: Permission denied)
(Its -p flag to change a prefix sounded promising, but it seemed to have
no effect on any of the paths which caused me problems)
nginx installation
On the old Travis infrastructure one could use apt-get run as a part of
script: directive, but the container-based Travis requires following lines
in .travis.yml to install nginx package:
addons:
  apt:
    packages:
    - nginx
nginx config
worker_processes 10;
pid /tmp/nginx.pid;
error_log /tmp/error.log;
events {
	worker_connections 768;
}
http {
	client_body_temp_path /tmp/nginx_client_body;
	fastcgi_temp_path     /tmp/nginx_fastcgi_temp;
	proxy_temp_path       /tmp/nginx_proxy_temp;
	scgi_temp_path        /tmp/nginx_scgi_temp;
	uwsgi_temp_path       /tmp/nginx_uwsgi_temp;
	server {
		listen 8888 default_server;
		root /tmp/www;
		index index.html index.htm;
		server_name localhost;
		location / {
			try_files $uri $uri/ =404;
			autoindex on;
		}
		error_log /tmp/error.log;
		access_log /tmp/access.log;
	}
}
Click to download via GitHub Gist
Starting/stopping nginx
To start:
nginx -c `pwd`/etc/nginx.conf
To stop:
nginx -c `pwd`/etc/nginx.conf -s stop
References
I use a block of _temp_path directives from this very useful repository: