private void processJobInput()

in aws-codepipeline-agent/src/main/java/jetbrains/buildServer/codepipeline/CodePipelineBuildListener.java [69:135]


  private void processJobInput(@NotNull final AgentRunningBuild build) {
    if (myJobInputProcessed) return;
    myJobInputProcessed = true;

    final Map<String, String> params = build.getSharedConfigParameters();
    myJobID = getJobId(params);
    if (myJobID == null) {
      LOG.debug(msgForBuild("No AWS CodePipeline job found for the build", build));
      return;
    }

    AWSCommonParams.withAWSClients(params, new AWSCommonParams.WithAWSClients<Void, RuntimeException>() {
      @Nullable
      @Override
      public Void run(@NotNull AWSClients clients) throws RuntimeException {
        AWSCodePipelineClient codePipelineClient = null;
        try {
          codePipelineClient = clients.createCodePipeLineClient();
          final JobData jobData = getJobData(codePipelineClient, params);

          final PipelineContext pipelineContext = jobData.getPipelineContext();
          build.getBuildLogger().message(
            "This build is a part of an AWS CodePipeline pipeline: " + pipelineContext.getPipelineName() +
              "\nLink: https://console.aws.amazon.com/codepipeline/home?region=" + params.get(AWSCommonParams.REGION_NAME_PARAM) + "#/view/" + pipelineContext.getPipelineName() +
              "\nStage: " + pipelineContext.getStage().getName() +
              "\nAction: " + pipelineContext.getAction().getName() +
              "\nJob ID: " + myJobID);

          final List<Artifact> inputArtifacts = jobData.getInputArtifacts();
          if (inputArtifacts.isEmpty()) {
            LOG.debug(msgForBuild("No input artifacts provided for the job with ID: " + myJobID, build));
          } else {

            final File inputFolder = new File(params.get(ARTIFACT_INPUT_FOLDER_CONFIG_PARAM));
            FileUtil.createDir(inputFolder);

            final Collection<Download> downloads = S3Util.withTransferManager(getArtifactS3Client(jobData.getArtifactCredentials(), params), new S3Util.WithTransferManager<Download>() {
              @NotNull
              @Override
              public Collection<Download> run(@NotNull final TransferManager manager) throws Throwable {
                return CollectionsUtil.convertCollection(inputArtifacts, new Converter<Download, Artifact>() {
                  @Override
                  public Download createFrom(@NotNull Artifact artifact) {
                    final S3ArtifactLocation s3Location = artifact.getLocation().getS3Location();
                    final File destinationFile = getInputArtifactFile(inputFolder, s3Location.getObjectKey());

                    build.getBuildLogger().message("Downloading job input artifact " + s3Location.getObjectKey() + " to " + destinationFile.getAbsolutePath());
                    return manager.download(s3Location.getBucketName(), s3Location.getObjectKey(), destinationFile);
                  }
                });
              }
            });
            // for backward compatibility, TW-47902
            for (Download d : downloads) {
              makeArtifactCopy(inputFolder, getInputArtifactFile(inputFolder, d.getKey()), d.getKey(), build);
            }
            if (!jobData.getOutputArtifacts().isEmpty()) {
              FileUtil.createDir(new File(params.get(ARTIFACT_OUTPUT_FOLDER_CONFIG_PARAM)));
            }
          }
        } catch (Throwable e) {
          failOnException(codePipelineClient, build, e);
        }
        return null;
      }
    });
  }