/src/main/java/org/jfrog/bamboo/task/ArtifactoryDockerTask.java

https://github.com/JFrogDev/bamboo-artifactory-plugin · Java · 125 lines · 105 code · 15 blank · 5 comment · 7 complexity · 450943defb0a7bffc61fc6c1e9e54249 MD5 · raw file

  1. package org.jfrog.bamboo.task;
  2. import com.atlassian.bamboo.process.EnvironmentVariableAccessor;
  3. import com.atlassian.bamboo.task.*;
  4. import com.atlassian.bamboo.v2.build.BuildContext;
  5. import com.atlassian.bamboo.variable.CustomVariableContext;
  6. import com.atlassian.spring.container.ContainerManager;
  7. import org.jetbrains.annotations.NotNull;
  8. import org.jfrog.bamboo.admin.ServerConfig;
  9. import org.jfrog.bamboo.builder.BuildInfoHelper;
  10. import org.jfrog.bamboo.configuration.BuildParamsOverrideManager;
  11. import org.jfrog.bamboo.context.DockerBuildContext;
  12. import org.jfrog.bamboo.util.TaskUtils;
  13. import org.jfrog.build.api.Build;
  14. import org.jfrog.build.extractor.clientConfiguration.ArtifactoryDependenciesClientBuilder;
  15. import org.jfrog.build.extractor.docker.extractor.DockerPull;
  16. import org.jfrog.build.extractor.docker.extractor.DockerPush;
  17. import java.util.Map;
  18. /**
  19. * Created by Bar Belity on 09/10/2020.
  20. */
  21. public class ArtifactoryDockerTask extends ArtifactoryTaskType {
  22. private final EnvironmentVariableAccessor environmentVariableAccessor;
  23. private BuildParamsOverrideManager buildParamsOverrideManager;
  24. private CustomVariableContext customVariableContext;
  25. private Map<String, String> environmentVariables;
  26. private DockerBuildContext dockerBuildContext;
  27. private BuildInfoHelper buildInfoHelper;
  28. private String buildNumber;
  29. private String buildName;
  30. private ArtifactoryDependenciesClientBuilder dependenciesClientBuilder;
  31. public ArtifactoryDockerTask(EnvironmentVariableAccessor environmentVariableAccessor) {
  32. this.environmentVariableAccessor = environmentVariableAccessor;
  33. ContainerManager.autowireComponent(this);
  34. }
  35. @Override
  36. protected void initTask(@NotNull CommonTaskContext context) throws TaskException {
  37. super.initTask(context);
  38. dockerBuildContext = new DockerBuildContext(taskContext.getConfigurationMap());
  39. buildParamsOverrideManager = new BuildParamsOverrideManager(customVariableContext);
  40. environmentVariables = TaskUtils.getEnvironmentVariables(dockerBuildContext, environmentVariableAccessor);
  41. BuildContext buildContext = ((TaskContext) context).getBuildContext();
  42. buildName = dockerBuildContext.getBuildName(buildContext);
  43. buildNumber = dockerBuildContext.getBuildNumber(buildContext);
  44. initBuildInfoHelper(buildContext);
  45. dependenciesClientBuilder = TaskUtils.getArtifactoryDependenciesClientBuilder(buildInfoHelper.getServerConfig(), buildInfoLog);
  46. }
  47. @NotNull
  48. @Override
  49. public TaskResult runTask(@NotNull TaskContext taskContext) {
  50. Build build;
  51. if (dockerBuildContext.isDockerCommandPull()) {
  52. build = executeDockerPull();
  53. } else {
  54. build = executeDockerPush();
  55. }
  56. // Fail run if no build is returned.
  57. if (build == null) {
  58. return TaskResultBuilder.newBuilder(taskContext).failedWithError().build();
  59. }
  60. // Append build info and add to context.
  61. if (dockerBuildContext.isCaptureBuildInfo()) {
  62. build.setName(buildName);
  63. build.setNumber(buildNumber);
  64. buildInfoHelper.addEnvVarsToBuild(dockerBuildContext, build);
  65. taskBuildInfo = build;
  66. }
  67. return TaskResultBuilder.newBuilder(taskContext).success().build();
  68. }
  69. private Build executeDockerPull() {
  70. String repo = buildInfoHelper.overrideParam(dockerBuildContext.getResolutionRepo(), BuildParamsOverrideManager.OVERRIDE_ARTIFACTORY_RESOLVE_REPO);
  71. String userName = buildInfoHelper.getServerConfig().getUsername();
  72. String password = buildInfoHelper.getServerConfig().getPassword();
  73. return new DockerPull(buildInfoHelper.getClientBuilder(logger, log), dependenciesClientBuilder,
  74. dockerBuildContext.getImageName(), dockerBuildContext.getHost(), repo, userName, password,
  75. buildInfoLog, environmentVariables).execute();
  76. }
  77. private Build executeDockerPush() {
  78. String repo = buildInfoHelper.overrideParam(dockerBuildContext.getPublishingRepo(), BuildParamsOverrideManager.OVERRIDE_ARTIFACTORY_DEPLOY_REPO);
  79. String userName = buildInfoHelper.getServerConfig().getUsername();
  80. String password = buildInfoHelper.getServerConfig().getPassword();
  81. return new DockerPush(buildInfoHelper.getClientBuilder(logger, log), dependenciesClientBuilder, dockerBuildContext.getImageName(),
  82. dockerBuildContext.getHost(), TaskUtils.getCommonArtifactPropertiesMap(buildInfoHelper), repo,
  83. userName, password, buildInfoLog, environmentVariables).execute();
  84. }
  85. private void initBuildInfoHelper(BuildContext buildContext) {
  86. Map<String, String> runtimeContext = taskContext.getRuntimeTaskContext();
  87. if (dockerBuildContext.isDockerCommandPull()) {
  88. buildInfoHelper = BuildInfoHelper.createResolveBuildInfoHelper(buildName, buildNumber, taskContext, buildContext,
  89. environmentVariableAccessor, dockerBuildContext.getResolutionArtifactoryServerId(),
  90. dockerBuildContext.getOverriddenUsername(runtimeContext, buildInfoLog, false),
  91. dockerBuildContext.getOverriddenPassword(runtimeContext, buildInfoLog, false), buildParamsOverrideManager);
  92. } else {
  93. buildInfoHelper = BuildInfoHelper.createDeployBuildInfoHelper(buildName, buildNumber, taskContext, buildContext,
  94. environmentVariableAccessor, dockerBuildContext.getArtifactoryServerId(),
  95. dockerBuildContext.getOverriddenUsername(runtimeContext, buildInfoLog, true),
  96. dockerBuildContext.getOverriddenPassword(runtimeContext, buildInfoLog, true), buildParamsOverrideManager);
  97. }
  98. }
  99. public void setCustomVariableContext(CustomVariableContext customVariableContext) {
  100. this.customVariableContext = customVariableContext;
  101. }
  102. @Override
  103. protected ServerConfig getUsageServerConfig() {
  104. return buildInfoHelper.getServerConfig();
  105. }
  106. @Override
  107. protected String getTaskUsageName() {
  108. return "docker";
  109. }
  110. }