Пример #1
0
            }).fail( function(){
                console.log('pullImage', image);

                docker.pull(image, function(err,stream){
                    var error = false;

                    if(err){
                        console.log('err',err);
                        reject(err);
                    }

                    stream.on('data', function(data){
                        var response = JSON.parse(data.toString());

                        if(response.errorDetail != undefined){
                            error = response;
                        }else{
                            console.log(response);
                        }
                    });

                    stream.on('end', function(data){
                        if(error){
                            reject(error);
                        }else{
                            resolve();
                        }
                    });
                });
            })
Пример #2
0
 async.eachSeries(list, function(tag, doneThis) {
   docker.pull(tag, function(err, stream) {
     if (err) {
       doneThis(err);
     } else {
       stream.pipe(process.stdout);
       stream.on('end', doneThis);
     }
   });
 }, callback);
Пример #3
0
    }}, (err) => {
      if (err) {
        logRed(version + '\t| Something went wrong in copying files...')
        callback(err, 1)
      }
      // TODO remove sync operations like these
      fs.writeFileSync(new_directory + '/Dockerfile', DOCKERFILE_TEMPLATE.replace('$VERSION', version))

      logMagenta(version + '\t| Pulling base image for version')
      docker.pull(`${BASE_IMAGE}:${version}`, (err, stream) => {
        // TODO extract error handling
        if (err) {
          logRed(version + '\t| Something went wrong in pulling image...')
          callback(err, 1)
        }
        docker.modem.followProgress(stream, () => {
          const tarStream = tar.pack(new_directory, {
            ignoreFiles: ['.gitignore', '.dockerignore']
          })
          const img_name_with_version = IMAGE_NAME.replace('$VERSION', version)
          logYellow(version + '\t| Building image')
          docker.buildImage(tarStream, {
            t: img_name_with_version
          }, (error, output) => {
            if (error) {
              logRed(version + '\t| Something went wrong in building image...')
              callback(error, 1)
            }
            docker.modem.followProgress(output, () => {
              logBlue(version + '\t| finished building, running tests...')
              docker.run(img_name_with_version, TEST_COMMAND, show_output ? process.stdout : null, (err, data, container) => {
                if (err) {
                  logRed(version + '\t| Something went wrong in running container...')
                  callback(err, 1)
                }
                // TODO implement proper cleanup
                // fs.remove(new_directory)
                logGreen(version + '\t| Done running tests for version ' + version + '!')
                callback(null, {statusCode: data.StatusCode, version: version})
              })
            }, (chunk) => {
              // Building container
              if (show_output) {
                process.stdout.write(version + '\t| ' + chunk.stream)
              }
            })
          })
        }, (chunk) => {
          // Pulling image
          if (show_output) {
            console.log(version + '\t| ' + chunk.status)
          }
        })
      })
    })
Пример #4
0
 return new Promise(function (resolve, reject) {
   docker.pull(imageName, {
     authconfig: auth
   }, function (err, stream) {
     if (err) return reject(err)
     docker.modem.followProgress(stream, function (err, data) {
       if (err) return reject(err)
       resolve(data)
     }, onProgress)
   })
 })
Пример #5
0
 _pullImage(imageName) {
   return this.docker.pull(imageName).then(stream => {
     let promise = streamToPromise(stream);
     Ora.promise(promise, {
       text: chalk.green("Downloading the Docker Image..."),
       color: "green",
       stream: process.stdout
     });
     return promise;
   });
 }
Пример #6
0
function pullImage(imageName, callback) {
  docker.pull(imageName, function(err, stream) {
    if (err) {
      callback(err);
    } else {
      stream.pipe(process.stdout);
      stream.on('end', function() {
        callback(null);
      });
    }
  });
}
Пример #7
0
 /**
  * Pull docker image
  * @param image
  * @param callback
  */
 pull(image, callback) {
     this.dockerRemoteAPI.pull(image, (err, stream) => {
         this.dockerRemoteAPI.modem.followProgress(stream, (err, output) => {
             if (err) {
                 callback.onError(err);
             } else {
                 callback.onFinished();
             }
         }, (event) => {
             callback.onProgress(event);
         });
     });
 }
Пример #8
0
            (callback) => {
                docker.pull(question.external_grading_image, (err, stream) => {
                    if (err) {
                        logger.warn(`Error pulling "${question.external_grading_image}" image; attempting to fall back to cached version.`);
                        logger.warn(err);
                        return callback(null);
                    }

                    docker.modem.followProgress(stream, (err) => {
                        if (ERR(err, callback)) return;
                        callback(null);
                    }, (output) => {
                        logger.info(output);
                    });
                });
            },
Пример #9
0
  pull: function(cb) {
    docker.pull('sitespeedio/sitespeed.io', function(err, stream) {
      docker.modem.followProgress(stream, onFinished, onProgress);

      function onFinished(err, output) {
        if (err) {
          log.error('Error:' + err);
        }
        cb(err);
      }

      function onProgress(event) {
        log.debug(event.status);
      }
    });
  },
/**
 * Download the `mockserver` Docker image, create a new container and start it.
 */
async function start() {
  await getStream(await docker.pull(IMAGE));

  container = await docker.createContainer({
    Tty: true,
    Image: IMAGE,
    PortBindings: {[`${MOCK_SERVER_PORT}/tcp`]: [{HostPort: `${MOCK_SERVER_PORT}`}]},
  });
  await container.start();

  try {
    // Wait for the mock server to be ready
    await pRetry(() => got.put(`http://${MOCK_SERVER_HOST}:${MOCK_SERVER_PORT}/status`, {cache: false}), {
      retries: 7,
      minTimeout: 1000,
      factor: 2,
    });
  } catch (error) {
    throw new Error(`Couldn't start mock-server after 2 min`);
  }
}
/**
 * Download the `npm-registry-docker` Docker image, create a new container and start it.
 */
async function start() {
  await getStream(await docker.pull(IMAGE));

  container = await docker.createContainer({
    Tty: true,
    Image: IMAGE,
    PortBindings: {[`${COUCHDB_PORT}/tcp`]: [{HostPort: `${SERVER_PORT}`}]},
    Env: [`COUCHDB_USER=${COUCHDB_USER}`, `COUCHDB_PASSWORD=${COUCHDB_PASSWORD}`],
  });

  await container.start();
  await delay(4000);

  try {
    // Wait for the registry to be ready
    await pRetry(() => got(`http://${SERVER_HOST}:${SERVER_PORT}/registry/_design/app`, {cache: false}), {
      retries: 7,
      minTimeout: 1000,
      factor: 2,
    });
  } catch (error) {
    throw new Error(`Couldn't start npm-registry-docker after 2 min`);
  }

  // Create user
  await got(`http://${SERVER_HOST}:${SERVER_PORT}/_users/org.couchdb.user:${NPM_USERNAME}`, {
    json: true,
    auth: `${COUCHDB_USER}:${COUCHDB_PASSWORD}`,
    method: 'PUT',
    body: {
      _id: `org.couchdb.user:${NPM_USERNAME}`,
      name: NPM_USERNAME,
      roles: [],
      type: 'user',
      password: NPM_PASSWORD,
      email: NPM_EMAIL,
    },
  });
}