deploy.js 2.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
// Copyright 2015 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/**
 * @fileoverview Gulp tasks for deploying and releasing the application.
 */
import child from 'child_process';
import gulp from 'gulp';
import path from 'path';

import conf from './conf';


/**
 * @param {!Array<string>} args
 * @param {function(?Error=)} doneFn
 */
function spawnDockerProcess(args, doneFn) {
  let dockerTask = child.spawn('docker', args);

  // Call Gulp callback on task exit. This has to be done to make Gulp dependency management
  // work.
  dockerTask.on('exit', function(code) {
    if (code === 0) {
      doneFn();
    } else {
      doneFn(new Error('Docker command error, code:' + code));
    }
  });

  dockerTask.stdout.on('data', function (data) {
    console.log('' + data);
  });

  dockerTask.stderr.on('data', function (data) {
    console.error('' + data);
  });
}


/**
 * Creates Docker image for the application. The image is tagged with the image name configuration
 * constant.
 *
 * In order to run the image on a Kubernates cluster, it has to be deployed to a registry.
 */
gulp.task('docker-image', ['docker-file'], function(doneFn) {
  spawnDockerProcess([
    'build',
    // Remove intermediate containers after a successful build.
    '--rm=true',
    '--tag', conf.deploy.imageName,
    conf.paths.dist,
  ], doneFn);
});


/**
 * Processes the Docker file and places it in the dist folder for building.
 */
gulp.task('docker-file', function() {
  return gulp.src(path.join(conf.paths.deploySrc, 'Dockerfile'))
      .pipe(gulp.dest(conf.paths.dist));
});