Esempio n. 1
0
        private Task <bool> ExecuteAsync()
        {
            var args = new[]
            {
                "push",
                "-u",
                UserName,
                "-p",
                Password,
                ImageName,
                PublishDir
            };
            var psi = new ProcessStartInfo
            {
                FileName  = OrasExe,
                Arguments = ArgumentEscaper.EscapeAndConcatenate(args),
                RedirectStandardOutput = true,
                RedirectStandardError  = true
            };

            using (var proc = Process.Start(psi))
            {
                proc.WaitForExit();
                Log.LogMessage(MessageImportance.High, proc.StandardError.ReadToEnd());

                var bufferedOutput = proc.StandardOutput.ReadToEnd();
                Log.LogMessage(MessageImportance.High, bufferedOutput);
                var shaLine      = bufferedOutput.Split('\n').Where(s => s.Contains("Digest: sha256:")).FirstOrDefault();
                var layerSha     = shaLine.Substring(shaLine.IndexOf("sha256"));
                var registryName = ImageName.Split('/').First();
                var repoName     = ImageName.Substring(ImageName.IndexOf('/') + 1).Split(':').First();
                var tagName      = ImageName.Split(':').Last();

                Log.LogMessage(MessageImportance.High, registryName);
                Log.LogMessage(MessageImportance.High, repoName);
                Log.LogMessage(MessageImportance.High, tagName);
            }
            return(Task.FromResult(true));
        }
        private async Task PullImage(CancellationToken ct)
        {
            _logger.LogInformation("Pulling container image: {}", ImageName);
            var tagSplitIdx      = ImageName.LastIndexOf(":", StringComparison.InvariantCultureIgnoreCase);
            var createParameters = new ImagesCreateParameters
            {
                FromImage = ImageName.Substring(0, tagSplitIdx), Tag = ImageName.Substring(tagSplitIdx + 1),
            };

            await DockerClient.Images.CreateImageAsync(
                createParameters,
                new AuthConfig(),
                new Progress <JSONMessage>(m =>
            {
                _logger.LogTrace("[{}] {}", m.Status, m.ProgressMessage);
            }),
                ct);

            // we should not catch exceptions thrown by inspect because the image is
            // expected to be available since we've just pulled it
            var image = await DockerClient.Images.InspectImageAsync(ImageName, ct);

            ImageId = image.ID;
        }