Source code for jenkins_pysdk.builders


__all__ = ["Builder"]


[docs] class Builder: """ Easy builder if you don't like XML... like me ;) """
[docs] @classmethod def Folder(cls, name, description: str): """ Create a new folder template. :param name: The name of the folder. :type name: str :param description: The description of the folder. :type description: str :return: The newly created folder template. :rtype: Folder """ template = cls._Templates.Folder.format(folder_name=name, description=description) return template
[docs] @classmethod def Freestyle(cls): """ Create a new Freestyle job. :return: The newly created Freestyle job template. :rtype: Job """ # TODO: This raise NotImplemented
[docs] @classmethod def View(cls): """ Create a new view template. :return: The newly created view. :rtype: View """ raise NotImplemented
[docs] class Credentials:
[docs] @classmethod def UsernamePassword(cls, *, domain: str = "GLOBAL", cred_id: str, username: str, password: str) -> ...: """ Create a new Username/Password credential. :return: The newly created Username/Password credential template. :rtype: str """ # TODO: Domain param should be forced in Domain return Builder._Templates.Credentials.UsernamePassword.format(domain=domain, cred_id=cred_id, username=username, password=password)
[docs] @classmethod def Domain(cls, *, name: str, description: str = "", includes: list = None, excludes: list = None) -> ...: includes = ",".join(includes) if includes else "" excludes = ",".join(excludes) if excludes else "" return Builder._Templates.Credentials.Domain.format(name=name, description=description, includes=includes, excludes=excludes)
[docs] @classmethod def User(cls, *, username: str, password: str, fullname: str, email: str) -> ...: return { 'username': username, 'password1': password, 'password2': password, 'fullname': fullname, 'email': email }
[docs] @classmethod def Node(cls, description: str, remote_fs: str, executors: int = 1, label: str = "", mode: str = "NORMAL"): node = { 'nodeDescription': description, 'numExecutors': executors, 'remoteFS': remote_fs, 'labelString': label, 'mode': mode, 'retentionStrategy': { 'stapler-class': 'hudson.slaves.RetentionStrategy$Always' }, 'nodeProperties': {'stapler-class-bag': 'true'}, 'launcher': {'stapler-class': 'hudson.slaves.JNLPLauncher'} } return node
class _Templates: Folder = \ """<com.cloudbees.hudson.plugins.folder.Folder> <name>{folder_name}</name> <description>{description}</description> </com.cloudbees.hudson.plugins.folder.Folder> """ Freestyle = \ """<project> <description>{description}</description> <keepDependencies>false</keepDependencies> <properties/> <scm class="hudson.scm.NullSCM"/> <canRoam>true</canRoam> <disabled>{disabled}</disabled> <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding> <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding> <triggers/> <concurrentBuild>false</concurrentBuild> <builders/> <publishers/> <buildWrappers/> </project>""" View = """ """ class Credentials: UsernamePassword = \ """<com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl> <scope>{domain}</scope> <id>{cred_id}</id> <username>{username}</username> <password>{password}</password> </com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl>""" Domain = \ """<com.cloudbees.plugins.credentials.domains.Domain> <name>{name}</name> <description>{description}</description> <specifications> <com.cloudbees.plugins.credentials.domains.HostnameSpecification> <includes>{includes}</includes> <excludes>{excludes}</excludes> </com.cloudbees.plugins.credentials.domains.HostnameSpecification> </specifications> </com.cloudbees.plugins.credentials.domains.Domain>"""