예제 #1
0
    def test_build_task(self, resource_group, location):
        registry_name = self.get_resource_name('pyacr')
        build_task_name = self.get_resource_name('pyacr')

        # Create a managed registry
        self._create_managed_registry(registry_name, resource_group.name,
                                      location)

        # Create a build task
        self._create_build_task(build_task_name, registry_name,
                                resource_group.name, location)

        # List build tasks
        build_tasks = list(
            self.client.build_tasks.list(resource_group.name, registry_name))
        self.assertEqual(len(build_tasks), 1)

        # Get the build task source repository properties
        source_repository_properties = self.client.build_tasks.list_source_repository_properties(
            resource_group_name=resource_group.name,
            registry_name=registry_name,
            build_task_name=build_task_name)

        self.assertEqual(source_repository_properties.repository_url,
                         DEFAULT_REPOSITORY_URL)
        self.assertEqual(source_repository_properties.source_control_type,
                         SourceControlType.github.value)
        self.assertEqual(
            source_repository_properties.is_commit_trigger_enabled, True)
        self.assertEqual(source_repository_properties.source_control_type,
                         SourceControlType.github.value)
        self.assertEqual(
            source_repository_properties.source_control_auth_properties.token,
            DEFAULT_GIT_ACCESS_TOKEN)
        self.assertEqual(
            source_repository_properties.source_control_auth_properties.
            token_type, TokenType.pat)

        # Update the build task
        build_task_update_parameters = BuildTaskUpdateParameters(
            alias=build_task_name,
            source_repository=SourceRepositoryUpdateParameters(
                is_commit_trigger_enabled=False),
            platform=PlatformProperties(os_type=OsType.windows, cpu=1),
            status=BuildTaskStatus.disabled,
            timeout=10000)

        build_task = self.client.build_tasks.update(
            resource_group_name=resource_group.name,
            registry_name=registry_name,
            build_task_name=build_task_name,
            build_task_update_parameters=build_task_update_parameters).result(
            )

        self.assertEqual(build_task.name, build_task_name)
        self.assertEqual(build_task.location, location)
        self.assertEqual(build_task.platform.os_type, OsType.windows.value)
        self.assertEqual(build_task.platform.cpu, 1)
        self.assertEqual(build_task.provisioning_state,
                         ProvisioningState.succeeded.value)
        self.assertEqual(build_task.status, BuildTaskStatus.disabled.value)
        self.assertEqual(build_task.timeout, 10000)
        self.assertEqual(build_task.source_repository.repository_url,
                         DEFAULT_REPOSITORY_URL)
        self.assertEqual(build_task.source_repository.source_control_type,
                         SourceControlType.github.value)
        self.assertEqual(
            build_task.source_repository.is_commit_trigger_enabled, False)

        # Get the build task
        build_task = self.client.build_tasks.get(
            resource_group_name=resource_group.name,
            registry_name=registry_name,
            build_task_name=build_task_name)

        self.assertEqual(build_task.name, build_task_name)
        self.assertEqual(build_task.location, location)
        self.assertEqual(build_task.platform.os_type, OsType.windows.value)
        self.assertEqual(build_task.platform.cpu, 1)
        self.assertEqual(build_task.provisioning_state,
                         ProvisioningState.succeeded.value)
        self.assertEqual(build_task.status, BuildTaskStatus.disabled.value)
        self.assertEqual(build_task.timeout, 10000)
        self.assertEqual(build_task.source_repository.repository_url,
                         DEFAULT_REPOSITORY_URL)
        self.assertEqual(build_task.source_repository.source_control_type,
                         SourceControlType.github.value)
        self.assertEqual(
            build_task.source_repository.is_commit_trigger_enabled, False)

        # Delete the build task
        self.client.build_tasks.delete(resource_group.name, registry_name,
                                       build_task_name).wait()
        self.client.registries.delete(resource_group.name,
                                      registry_name).wait()
예제 #2
0
def acr_build_task_update(
        cmd,  # pylint: disable=too-many-locals
        client,
        build_task_name,
        registry_name,
        resource_group_name=None,
        # build task parameters
        alias=None,
        status=None,
        os_type=None,
        cpu=None,
        timeout=None,
        repository_url=None,
        commit_trigger_enabled=None,
        git_access_token=None,
        # build step parameters
        branch=None,
        image_names=None,
        no_push=None,
        no_cache=None,
        docker_file_path=None,
        build_arg=None,
        secret_build_arg=None,
        base_image_trigger=None):
    _, resource_group_name = validate_managed_registry(
        cmd.cli_ctx, registry_name, resource_group_name,
        BUILD_TASKS_NOT_SUPPORTED)

    build_task = client.get(resource_group_name, registry_name,
                            build_task_name)
    # pylint: disable=too-many-boolean-expressions
    if alias or status or os_type or cpu or timeout or repository_url or commit_trigger_enabled or git_access_token:
        build_task_update_parameters = BuildTaskUpdateParameters()
        build_task_update_parameters.alias = alias
        build_task_update_parameters.status = status
        build_task_update_parameters.platform = PlatformProperties(
            os_type=os_type or build_task.platform.os_type, cpu=cpu)
        build_task_update_parameters.timeout = timeout
        build_task_update_parameters.source_repository = SourceRepositoryUpdateParameters(
            source_control_auth_properties=SourceControlAuthInfo(
                token=git_access_token, token_type=DEFAULT_TOKEN_TYPE)
            if git_access_token else None,
            is_commit_trigger_enabled=commit_trigger_enabled)
        build_task = LongRunningOperation(cmd.cli_ctx)(client.update(
            resource_group_name=resource_group_name,
            registry_name=registry_name,
            build_task_name=build_task_name,
            step_name=_get_build_step_name(build_task_name),
            build_task_update_parameters=build_task_update_parameters))

    from ._client_factory import cf_acr_build_steps
    client_build_steps = cf_acr_build_steps(cmd.cli_ctx)

    build_step = None
    # pylint: disable=too-many-boolean-expressions
    if branch or image_names or no_push is not None or no_cache is not None or \
       docker_file_path or build_arg or secret_build_arg or base_image_trigger:
        build_step_update_parameters = DockerBuildStepUpdateParameters()
        build_step_update_parameters.branch = branch
        build_step_update_parameters.image_names = image_names
        build_step_update_parameters.is_push_enabled = (
            not no_push) if no_push is not None else None
        build_step_update_parameters.no_cache = no_cache
        build_step_update_parameters.docker_file_path = docker_file_path
        build_step_update_parameters.build_arguments = build_arg + secret_build_arg \
            if build_arg and secret_build_arg else build_arg or secret_build_arg
        build_step_update_parameters.base_image_trigger = base_image_trigger

        try:
            build_step = LongRunningOperation(cmd.cli_ctx)(
                client_build_steps.update(
                    resource_group_name=resource_group_name,
                    registry_name=registry_name,
                    build_task_name=build_task_name,
                    step_name=_get_build_step_name(build_task_name),
                    properties=build_step_update_parameters))
        except CloudError as e:
            if e.status_code != 404:
                raise
            logger.warning(
                "Could not update build task details. Build task basic information is updated."
            )

    # If build step is not updated, get it here
    if not build_step:
        try:
            build_step = client_build_steps.get(
                resource_group_name, registry_name, build_task_name,
                _get_build_step_name(build_task_name))
        except CloudError as e:
            if e.status_code != 404:
                raise

    if build_step:
        setattr(build_task, 'properties', build_step.properties)

    return build_task