US20230053820A1 - Generating a build process for building software in a target environment - Google Patents

Generating a build process for building software in a target environment Download PDF

Info

Publication number
US20230053820A1
US20230053820A1 US17/406,356 US202117406356A US2023053820A1 US 20230053820 A1 US20230053820 A1 US 20230053820A1 US 202117406356 A US202117406356 A US 202117406356A US 2023053820 A1 US2023053820 A1 US 2023053820A1
Authority
US
United States
Prior art keywords
software
build
target
processor
stack
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
US17/406,356
Other versions
US11995420B2 (en
Inventor
Fridolin Pokorny
Christoph Goern
Francesco Murdaca
Harshad Reddy Nalla
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Red Hat Inc
Original Assignee
Red Hat Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Red Hat Inc filed Critical Red Hat Inc
Priority to US17/406,356 priority Critical patent/US11995420B2/en
Assigned to RED HAT, INC. reassignment RED HAT, INC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: GOERN, CHRISTOPH, MURDACA, FRANCESCO, NALLA, HARSHAD REDDY, POKORNY, FRIDOLIN
Publication of US20230053820A1 publication Critical patent/US20230053820A1/en
Application granted granted Critical
Publication of US11995420B2 publication Critical patent/US11995420B2/en
Active legal-status Critical Current
Adjusted expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/77Software metrics
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files

Definitions

  • the present disclosure relates generally to software builds. More specifically, but not by way of limitation, this disclosure relates to generating and executing a build process for building software in a target environment based on a recommended software-stack.
  • a software item such as a software application, service, or package, may be built by a computing device out of various software components.
  • the software components may include operating systems, architectural layers, protocols, runtime environments, databases, libraries, etc.
  • a build process may be a process for determining which software components to use and how to configure the software components together to build the software item.
  • a build process may involve building a software item using a software-stack.
  • a software-stack is a set of software components (e.g., packages) configured to work in tandem to produce a result or achieve a common goal.
  • the software components may be stacked on top of each other in a hierarchy, such that at least some of the software components either directly or indirectly depend on others of the software components.
  • LAMP Linux, Apache, MySQL, and PHP/Perl/Python
  • WINS Windows Server, IIS, .NET, and SQL Server
  • Software-stacks generally include all of the software components needed to run a particular software item so that no additional software is needed to support the software item.
  • FIG. 1 is a block diagram of an example of a system for generating a build process for building a target software item based on a recommended software-stack according to some aspects of the present disclosure.
  • FIG. 2 is a block diagram of another example of a system for generating a build process for building a target software item based on a recommended software-stack according to some aspects of the present disclosure.
  • FIG. 3 is a flow chart of an example of a process for generating a build process for building a target software item based on a recommended software-stack according to some aspects of the present disclosure.
  • Building a software item may involve combining and configuring software components in such a way as to create a software build of the software item.
  • software components usable to build a target software item
  • it may be difficult and time consuming to manually determine which combination of software components and hardware components to use for building a target software item in a target build environment.
  • there may be thousands or hundreds of thousands of possible combinations of software components, when considering that each software component may have multiple versions available and its own dependencies, that can be employed to build a target software item.
  • the software developer may need to iteratively and manually adjust a build process over time based on issues that may arise in the build environment (during previous iterations of the build process) or in a target runtime environment (where the software build is to be deployed to be run). This can be a slow and error-prone process that can consume a large amount of computing resources (e.g., processing power, memory, and storage space).
  • Some examples of the present disclosure can overcome one or more of the abovementioned problems with a system that can determine a recommended software-stack usable in a build process for building a target software item, configure the build process based on the recommended software-stack, and then execute the build process to construct a software build for the target software item. More specifically, the system can determine the recommended software-stack using a recommendation engine. The recommendation engine can determine the recommended software-stack based on one or more characteristics of a target computing environment in which the target software item is to be built or is to run.
  • the recommendation engine can determine the recommended software-stack (e.g., a specified set of packages) for use in the build process based on the hardware characteristics or the software characteristics of the target build environment in which the target software item is to be built, the target runtime environment in which the target software item is to be deployed, or both.
  • the system can configure the build process and then execute the build process. In this way, the system can automatically determine a software-stack for use in the build process, configure the build process based on the recommended software-stack, and execute the build process.
  • the system may also deploy the software build to a target runtime environment, collect performance metrics associated with the deployed software build, and use the performance metrics to modify the recommendation engine so as to improve recommendation results over time.
  • the system can configure the build process based on the recommended software-stack from the recommendation engine. This may involve selecting a target built environment for use in building the target software item; installing software packages in the target build environment; setting environment variables, software settings such as compiler flags, and other parameters in the target build environment; or any combination of these. Additionally or alternatively, configuring the build process can involve adjusting an ordering of build steps to be implemented during the build process, removing certain build steps from the build process, or adding build steps to the build process.
  • the system may determine an adjustment to the build process that differs from the recommendations provided in the recommended software-stack.
  • the adjustments may be made, for example, based on lack of access to recommended software or hardware, issues with the target build environment or target runtime environment, user-inputted restrictions to the system, etc. This may allow for certain customizations or overrides to be made with respect to the build process.
  • FIG. 1 is a block diagram of an example of a system 100 for generating a build process 108 for building a target software item based on a recommended software-stack 106 according to some aspects of the present disclosure.
  • the system 100 includes a build system 102 .
  • the build system 102 can include one or more computing devices, such as servers, laptop computers, desktop computers, or mobile devices (e.g., smartphone, tablet, or e-reader).
  • the build system 102 may determine and execute a build process 108 for building a software build 124 of a target software item.
  • the build system 102 can provide inputs to and receive outputs from a recommendation engine 104 , which may be internal or external to the build system 102 .
  • the build system 102 can transmit a request to the recommendation engine 104 for a software stack for use in a build process for building the target software item.
  • the recommendation engine 104 can receive the request, determine a recommended software-stack 106 for the target software item, and output the recommended software-stack 106 to the build process 108 .
  • the recommendation engine 104 can determine the recommended software-stack 106 for the target software item by executing a recommendation process 132 that can involve executing a search algorithm to perform a search on a search space containing many or all possible combinations of the target software item and its dependencies.
  • the search algorithm can be a heuristic search algorithm, such as a Monte-Carlo tree-analysis algorithm or a temporal-difference learning algorithm; a stochastic search algorithm, such as a simulated annealing algorithm; or another type of algorithm.
  • the search algorithm may learn or be guided over time (e.g., between iterations) to more rapidly converge towards solutions, without having to test all of the possible combinations defined in the search space.
  • This type of searching can be referred to as a combinatorial optimization problem, in which a space is searched for a local maximum or minimum that best satisfies an objective function.
  • the recommendation process 132 can rapidly determine a group of software-stack candidates that are most likely to yield the best results, where each of the software-stack candidates in the group has a unique combination of the software components in the search space.
  • the group of software-stack candidates may be a relatively small subset of the total number of software-stack combinations that can be generated using all of the software components in the search space.
  • the group may include 100 thousand software-stack candidates, which may be a relatively small subset of 10 million total possibilities. In this way, the recommendation process 132 can significantly reduce the amount of software-stack candidates that will undergo further analysis.
  • the recommendation process 132 can also determine respective scores for the software-stack candidates using a scoring function.
  • the scoring function can take into account hardware and software characteristics of one or more target computing environments, such as the target build environment 122 and/or a target runtime environment 126 in which the target software item is to execute. Additionally or alternatively, the scoring function can take into account security properties of the target software item and each of its dependencies. Additionally or alternatively, the scoring function can take into account performance properties of the target software item and each of its dependencies. The scoring function may also take into account other factors. Using a scoring function to characterize each of the software-stack candidates in this way can be faster and less resource-intensive than building and testing each of the software-stack candidates to verify application behavior.
  • the recommendation engine 104 can select one of the software-stack candidates from the group as a recommended software-stack 106 based on its corresponding score. For example, the recommendation engine 104 can select whichever software-stack candidate in the group has the highest score or the lowest score, depending on the scoring function, as the recommended software-stack 106 .
  • the recommended software-stack 106 may be the best software stack for a given computing environment relative to the rest of the software-stack candidates in the group.
  • the recommendation engine 104 may then transmit an output indicating the recommended software-stack 106 to the build system 102 , which may use the recommended software-stack 106 to determine and execute a build process 108 for building a software build 124 of the target software item.
  • the recommended software-stack 106 may indicate certain hardware and software that is recommended for use in building the target software item.
  • the recommended software-stack 106 can specify certain hardware components or software packages that are to be included in a target build environment 122 to achieve a certain build result (e.g., an optimized build process).
  • Examples of such hardware components may include a certain number and type of processor, non-volatile memory, and volatile-memory.
  • Examples of such software packages may include an operating system, databases, libraries, or any combination of these. Some of the software packages may be considered required packages that must be used for proper completion of the build process 108 or proper operation at runtime.
  • the build system 102 can determine (e.g., formulate) a build process 108 for building the target software item based on the recommended software-stack 106 . In some examples, this may include selecting a target build environment 122 that includes or has access to the software packages (e.g., specified packages 110 ) and/or the hardware components 112 specified in the recommended software-stack 106 . For example, the build system 102 can determine whether a local build environment has the recommended software packages or hardware components 112 . If not, the build system 102 may select and initiate the build process 108 on a remote computing system that does have access to some or all of the specified packages 110 and hardware components 112 . An example of the remote computing system can include a remote computing cluster.
  • the target software item can include a machine-learning model such as a neural network.
  • the specified packages 110 may include machine learning libraries that may have certain build environment specifications. Examples of these specifications may include certain graphics processing unit (“GPU”) models, certain kernels or versions of kernels, certain operating systems, certain nodes, etc.
  • the build system 102 may determine which computing cluster has a target build environment 122 that includes the specified packages 110 . In an example where the build system 102 is unable to determine a computing cluster that includes the specified packages 110 , the build system 102 may reconfigure the build process 108 to determine a different computing cluster with different specified packages 110 or hardware components 112 . The build process 108 may be executed using the different computing cluster to create a software build 124 for the target software item.
  • Determining the build process 108 may additionally or alternatively include determining specified parameters 118 of the specified packages 110 and an installation order 120 of the specified packages 110 based on the recommended software-stack 106 .
  • the specified parameters 118 may include configuration settings for configuring the specified packages 110 .
  • the specified parameters 118 may include compiler flags or settings for use in compiling source code.
  • the installation order 120 may be an order for installing the specified packages 110 in the target build environment 122 .
  • the installation order 120 may be determined based on dependencies among the specified packages 110 .
  • TensorFlow is a popular Python library for building artificial intelligence or machine learning applications.
  • the recommendation engine 104 may transmit a recommended software-stack 106 for a target software item that is a machine-learning application to the build system 102 .
  • the recommended software-stack 106 may include recommendations for certain versions of TensorFlow packages to use, other packages native to the build system 102 and their dependencies on one another and with the TensorFlow packages, files such as binary files and scripts to include in the machine-learning application, databases for training the machine-learning application, etc.
  • the build system 102 may determine the build process 108 based on the recommendations.
  • the build system 102 can determine that the build process 108 is to include the native packages and the certain versions of the Tensor Flow packages.
  • the build system 102 may also determine an available hardware component 112 (e.g., CPU type or GPU type) with characteristics that may allow for installing and configuring the specified packages 110 .
  • the installation order 120 may be determined based on the dependencies between the specified packages as provided in the recommended software-stack 106 . For example, if the recommended software-stack 106 includes a first package that depends on a second package, the build system 102 may determine the installation order 120 that involves installing the second package before the first package.
  • the build system 102 may also use the recommended dependencies and files provided in the recommended software-stack 106 to determine the specified parameters 118 . For example, a first package may depend on a second package, but only if the second package has a specific configuration. Therefore, the build system 102 may determine a specified parameter 118 for the second package so that the second package may have the specific configuration. Additionally, if the recommended software-stack 106 includes a package accessing a certain database, the build system 102 may determine specified parameters 118 for which database to access, how the specified package 110 uses the database, etc.
  • the build system 102 may execute the build process 108 to generate the software build 124 in a target build environment 122 . Executing the build process may involve using the hardware component 112 to install the specified packages 110 in a certain installation order 120 and configuring the specified packages 110 and hardware component 112 to have specified parameters 118 . In some examples, the build process may be stateless. This may allow the build process to be executed multiple times concurrently for multiple target software items.
  • the target build environment 122 is shown in FIG. 1 as being internal to the build system 102 , it will be appreciated that in other examples the target build environment 122 may be external to the build system 102 . In some such examples, the build system 102 may execute the build process 108 by transmitting one or more commands to the target build environment 122 for causing the target build environment 122 to perform the build process.
  • the build system 102 may deploy the software build 124 in a target runtime environment 126 .
  • the target runtime environment 126 is shown in FIG. 1 as being internal to the build system 102 , in other examples the target runtime environment 126 may be external to and accessible by the build system 102 .
  • the target runtime environment 126 may be the same as target build environment 122 .
  • the target build environment 122 and the target runtime environment 126 may be located in the same or different computing clusters that are inside or outside of the build system 102 .
  • the build system 102 may determine performance metrics 128 for the software build 124 in the target runtime environment 126 .
  • the performance metrics 128 may a memory consumption metric, a processor consumption metric, a bandwidth consumption metric, a latency metric, or any combination of these.
  • the performance metrics 128 may be obtained by testing the software build 124 in the target runtime environment 126 .
  • the test results may indicate any of the above metrics as well as other performance characteristics. For example, the test results may indicate whether the software build 124 runs properly in the target runtime environment 126 , whether the software build 124 is an accurate build of the target software item, and the functional performance of the software build 124 .
  • the build system 102 may determine feedback 130 for the recommendation engine 104 based on the performance metrics 128 .
  • the build system 102 may determine that its target build environment 122 may not have access to certain hardware or software included in the recommended software-stack 106 .
  • the build system 102 may configure the feedback 130 to indicate that the certain hardware or software is unavailable.
  • the performance metrics 128 may indicate that the target software item has high latency.
  • the build system 102 may analyze the software build 124 to determine that use of a certain version of a specified package 110 in the software build 124 may be a cause of the increased latency of the target software item.
  • the build system 102 may configure the feedback 130 to indicate the high latency and to indicate that the certain version of the software package is a cause thereof.
  • the feedback 130 may take the form of one or more suggestions for changes to the recommendation process 132 .
  • the build system 102 may transmit the feedback 130 to the recommendation engine 104 over a network, such as a local area network or the Internet.
  • the recommendation engine 104 may receive the feedback 130 and adjust the recommendation process 132 based on the feedback 130 .
  • the recommendation engine 104 can adjust a score or stored characteristic associated with one or more of the specified packages 110 based on the feedback 130 .
  • This feedback loop may allow the recommendation process 132 to be improved over time.
  • the build system 102 may provide the performance metrics 128 or the feedback 130 to a user via a display, which may be for example a liquid crystal display (LCD) or a light-emitting diode (LED) display, to allow the user to modify and improve the build process 108 or the recommendation process 132 accordingly.
  • LCD liquid crystal display
  • LED light-emitting diode
  • FIG. 1 shows a certain number and arrangement of components, it will be appreciated that this is for illustrative purposes and not intended to be limiting. Other examples may include more components, fewer components, different components, or a different arrangement of the components shown in FIG. 1 .
  • the recommendation engine 104 may be part of the build system 102 in other examples.
  • FIG. 2 is a block diagram of another example of a system 200 for generating a build process 108 for building a target software item based on a recommended software-stack 106 according to some aspects of the present disclosure.
  • the system 200 includes a processor 202 communicatively coupled with a memory 204 .
  • the processor 202 and the memory 204 can be included in the same housing (e.g., in the same computing device) or remote from one another.
  • the processor 202 can include one processor or multiple processors. Examples of the processor 202 include a Field-Programmable Gate Array (FPGA), an application-specific integrated circuit (ASIC), a microprocessor, or any combination of these.
  • the processor 202 can execute instructions 206 stored in the memory 204 to perform operations.
  • the instructions 206 can include processor-specific instructions generated by a compiler or an interpreter from code written in any suitable computer-programming languages, such as C, C++, C#, etc.
  • the memory 204 can include one memory or multiple memories.
  • the memory 204 can be non-volatile such that it retains stored information when powered off.
  • the memory 204 can include electrically erasable and programmable read-only memory (EEPROM), flash memory, or any other type of non-volatile memory.
  • EEPROM electrically erasable and programmable read-only memory
  • flash memory or any other type of non-volatile memory.
  • At least some of the memory 204 includes a non-transitory computer-readable medium from which the processor 202 can read instructions 206 .
  • a computer-readable medium can include electronic, optical, magnetic, or other storage devices capable of providing the processor 202 with computer-readable instructions or other program code. Examples of a non-transitory computer-readable medium can include magnetic disk(s), memory chip(s), ROM, random-access memory (RAM), an ASIC, a configured processor, optical storage, or any combination of these.
  • the processor 202 can execute the instructions 206 to perform operations. For example, the processor 202 may receive a recommended software-stack 106 from a recommendation engine 104 for a target software item. The processor 202 may determine, based on the recommended software-stack 106 , a build process 108 for a software build 124 of the target software item in a target build environment 122 . The processor 202 may then execute the build process 108 to generate a software build 124 of the target software item in the target build environment 122 .
  • the processor 202 can deploy the software build 124 in a target runtime environment 126 . After deploying the software build 124 in the target runtime environment 126 , the processor 202 may determine performance metrics 128 for the software build 124 in the target runtime environment 126 . The processor 202 may then transmit feedback 130 based on the performance metrics 128 to the recommendation engine 104 . Based on the feedback 130 , the recommendation engine 104 may reconfigure its recommendation process 132 for selecting recommended software-stacks 106 , thereby improving the system 200 .
  • the processor 202 can implement some or all of the steps shown in FIG. 3 .
  • Other examples can include more steps, fewer steps, different steps, or a different order of the steps than is shown in FIG. 3 . Some or all of the steps may be repeated.
  • the steps of FIG. 3 are discussed below with reference to the components discussed above from FIGS. 1 - 2 .
  • the processor 202 receives a recommended software-stack 106 from a recommendation engine 104 for a target software item to be built in a target build environment 122 .
  • the processor 202 can receive the recommended software-stack 106 as an electronic communication via a network, such as a local area network or the Internet.
  • the processor 202 determines, based on the recommended software-stack 106 , a build process 108 for a software build 124 of the target software item in the target build environment 122 . Determining the build process 108 can involve determining how one or more aspects of the build process 108 are to be configured.
  • the recommended software-stack 106 may include recommendations for software and hardware characteristics of the target build environment 122 .
  • the processor 202 may select a target build environment 122 that has access to the software and hardware characteristics.
  • the processor 202 may then configure the build process 108 so as to be performed on the target built environment 122 .
  • the processor 202 may command a hardware component 112 of the target built environment 122 to obtain and install specified packages 110 in an installation order 120 .
  • the processor 202 may also command the hardware component 112 of the target built environment 122 to configure the specified packages 110 to have specified parameters 118 .
  • the processor 202 may then use the target built environment 122 to create the software build 124 .
  • determining the build process 108 may include determining a suitable (e.g., compatible) alternative to one or more software items specified in the recommended software-stack 106 .
  • the processor 202 may identify a need for a suitable alternative for a particular software item if the software item is not accessible by the target build environment 122 or if the processor 202 has been previously configured by a user to avoid use of the one or more software items.
  • the processor 202 may compare characteristics of the particular software item to one or more other software items that are available to identify a suitable alternative.
  • the recommended software-stack 106 may include a recommendation for software library that may not be available to the processor 202 .
  • the processor 202 may determine a different software library to be used in the build process 108 , based on similarities between the functional characteristics of the two software libraries.
  • the recommended software-stack 106 may include a recommendation for installing specified packages 110 from a public source.
  • the processor 202 may be configured to not install specified packages 110 from public sources, for example due to security concerns. Therefore, the processor 202 may override the recommendation from the recommendation engine 104 to determine a private (e.g., corporate) source for accessing and installing the specified packages 110 .
  • the recommended software-stack 106 may include a recommendation for deploying the software build 124 using Advanced Vector Extensions (“AVX”), but the processor 202 may only have access to Advanced Vector Extensions 2 (“AVX2”) nodes. So, the processor 202 may determine that AVX2 is an expansion of AVX and may configure the build process 108 to use nodes with AVX2 enabled.
  • AVX Advanced Vector Extensions
  • the build process 108 may be determined (e.g., adjusted) based on one or more characteristics of the target runtime environment 126 . Examples of such characteristics can include the hardware characteristics, software characteristics, and geographical location of the target runtime environment.
  • the specified packages 110 may include databases for training a software build 124 for a target software item that is a machine learning model. If the software build 124 is to be deployed in a target runtime environment 126 located in the European Union (“EU”), the processor 202 can configure the build process 108 so that the software build 124 complies with EU laws or regulations, such as the General Data Protection Regulation (“GDPR”). For instance, the processor 202 may determine specified packages 110 that include databases that are specific to and cannot leave the EU.
  • EU European Union
  • GDPR General Data Protection Regulation
  • the processor 202 executes the build process 108 to generate a software build 124 of the target software item in the target build environment 122 .
  • This may involve commanding a compiler to compile source code or commanding an interpreter to interpret the source code.
  • the processor 202 can instruct the target build environment 122 to use the hardware components 112 to download the specified packages 110 to the target build environment 122 , configure the specified packages 110 to have the specified parameters 118 , and use the specified packages 110 to generate the software build 124 .
  • the processor 202 can deploy the software build 124 in a target runtime environment 126 .
  • the processor 202 may then perform additional operations on the software build 124 after deployment in the target runtime environment 126 .
  • the processor 202 may train the software build 124 , such as with databases included in the specified packages 110 .
  • the processor 202 can determine performance metrics 128 for the software build 124 in the target runtime environment 126 .
  • the performance metrics 128 may indicate accuracy, efficiency, and latency.
  • the performance metrics 128 may be determined by executing tests, which may include user-supplied programs or scripts for testing the software build 124 .
  • the processor 202 may be configured to monitor the software build 124 for issues.
  • the processor 202 may execute multiple potential build processes 108 in one or more build environments and determine performance metrics 128 for each of the resulting software builds 124 .
  • the multiple potential build processes 108 may be determined by the processor 202 based on adjustments to the recommended software-stack 106 . For example, if the recommended software-stack 106 recommends use of a software component that is unavailable to the processor 202 , the processor 202 may generate multiple potential build processes that use available software components that the processor 202 has determined to be similar to the recommended software component.
  • the processor 202 may execute the multiple potential build processes 108 in the one or more build environments and may determine performance metrics 128 for the software builds 124 of each potential build process 108 .
  • the processor 202 may determine which software build 124 to deploy in the target runtime environment 126 based on the results of the performance metrics 128 .
  • the processor 202 may determine feedback 130 based on the performance metrics 128 and may transmit the feedback 130 to the recommendation engine 104 .
  • the recommendation engine 104 may adjust a recommendation process 132 for determining recommended software-stacks 106 based on the feedback 130 .

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

A build process for building software in a target environment can be generated using a system described herein. For example, the system can receive a recommended software-stack for a target software item to be built in a target build environment. The system can determine, based on the recommended software-stack, a build process for building the target software item in the target build environment. The system may then execute the build process to generate a software build of the target software item in the target build environment.

Description

    TECHNICAL FIELD
  • The present disclosure relates generally to software builds. More specifically, but not by way of limitation, this disclosure relates to generating and executing a build process for building software in a target environment based on a recommended software-stack.
  • BACKGROUND
  • A software item, such as a software application, service, or package, may be built by a computing device out of various software components. The software components may include operating systems, architectural layers, protocols, runtime environments, databases, libraries, etc. A build process may be a process for determining which software components to use and how to configure the software components together to build the software item. In some cases, a build process may involve building a software item using a software-stack. A software-stack is a set of software components (e.g., packages) configured to work in tandem to produce a result or achieve a common goal. The software components may be stacked on top of each other in a hierarchy, such that at least some of the software components either directly or indirectly depend on others of the software components. For example, two well-known software-stacks are LAMP (Linux, Apache, MySQL, and PHP/Perl/Python) and WINS (Windows Server, IIS, .NET, and SQL Server). Software-stacks generally include all of the software components needed to run a particular software item so that no additional software is needed to support the software item.
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • FIG. 1 is a block diagram of an example of a system for generating a build process for building a target software item based on a recommended software-stack according to some aspects of the present disclosure.
  • FIG. 2 is a block diagram of another example of a system for generating a build process for building a target software item based on a recommended software-stack according to some aspects of the present disclosure.
  • FIG. 3 is a flow chart of an example of a process for generating a build process for building a target software item based on a recommended software-stack according to some aspects of the present disclosure.
  • DETAILED DESCRIPTION
  • Building a software item, such as a software application, may involve combining and configuring software components in such a way as to create a software build of the software item. As there are may be a large number of possible combinations of software components usable to build a target software item, it may be difficult and time consuming to manually determine which combination of software components and hardware components to use for building a target software item in a target build environment. For example, there may be thousands or hundreds of thousands of possible combinations of software components, when considering that each software component may have multiple versions available and its own dependencies, that can be employed to build a target software item. There can also be different combinations of hardware components that can be employed in the target build environment to build the target software item. These factors can affect the quality of the software build, such that some combinations of software components and hardware components may yield software builds that are of significantly poorer quality (e.g., in terms of security, stability, or functionality) than other software builds. It can take considerable time and expertise on the part of a software developer to choose a combination of software components and hardware components that produces a suitable software build, which may still be suboptimal as compared to other possible options.
  • It may also be difficult for a software developer to manually determine and configure a build process for use in generating a software build. For example, the software developer may need to iteratively and manually adjust a build process over time based on issues that may arise in the build environment (during previous iterations of the build process) or in a target runtime environment (where the software build is to be deployed to be run). This can be a slow and error-prone process that can consume a large amount of computing resources (e.g., processing power, memory, and storage space).
  • Some examples of the present disclosure can overcome one or more of the abovementioned problems with a system that can determine a recommended software-stack usable in a build process for building a target software item, configure the build process based on the recommended software-stack, and then execute the build process to construct a software build for the target software item. More specifically, the system can determine the recommended software-stack using a recommendation engine. The recommendation engine can determine the recommended software-stack based on one or more characteristics of a target computing environment in which the target software item is to be built or is to run. For example, the recommendation engine can determine the recommended software-stack (e.g., a specified set of packages) for use in the build process based on the hardware characteristics or the software characteristics of the target build environment in which the target software item is to be built, the target runtime environment in which the target software item is to be deployed, or both. Upon receiving the recommended software-stack from the recommendation engine, the system can configure the build process and then execute the build process. In this way, the system can automatically determine a software-stack for use in the build process, configure the build process based on the recommended software-stack, and execute the build process. In some examples, the system may also deploy the software build to a target runtime environment, collect performance metrics associated with the deployed software build, and use the performance metrics to modify the recommendation engine so as to improve recommendation results over time.
  • As noted above, the system can configure the build process based on the recommended software-stack from the recommendation engine. This may involve selecting a target built environment for use in building the target software item; installing software packages in the target build environment; setting environment variables, software settings such as compiler flags, and other parameters in the target build environment; or any combination of these. Additionally or alternatively, configuring the build process can involve adjusting an ordering of build steps to be implemented during the build process, removing certain build steps from the build process, or adding build steps to the build process.
  • In some examples, the system may determine an adjustment to the build process that differs from the recommendations provided in the recommended software-stack. The adjustments may be made, for example, based on lack of access to recommended software or hardware, issues with the target build environment or target runtime environment, user-inputted restrictions to the system, etc. This may allow for certain customizations or overrides to be made with respect to the build process.
  • These illustrative examples are given to introduce the reader to the general subject matter discussed here and are not intended to limit the scope of the disclosed concepts. The following sections describe various additional features and examples with reference to the drawings in which similar numerals indicate similar elements but, like the illustrative examples, should not be used to limit the present disclosure.
  • FIG. 1 is a block diagram of an example of a system 100 for generating a build process 108 for building a target software item based on a recommended software-stack 106 according to some aspects of the present disclosure. The system 100 includes a build system 102. The build system 102 can include one or more computing devices, such as servers, laptop computers, desktop computers, or mobile devices (e.g., smartphone, tablet, or e-reader). The build system 102 may determine and execute a build process 108 for building a software build 124 of a target software item.
  • The build system 102 can provide inputs to and receive outputs from a recommendation engine 104, which may be internal or external to the build system 102. In particular, the build system 102 can transmit a request to the recommendation engine 104 for a software stack for use in a build process for building the target software item. The recommendation engine 104 can receive the request, determine a recommended software-stack 106 for the target software item, and output the recommended software-stack 106 to the build process 108.
  • In some examples, the recommendation engine 104 can determine the recommended software-stack 106 for the target software item by executing a recommendation process 132 that can involve executing a search algorithm to perform a search on a search space containing many or all possible combinations of the target software item and its dependencies. The search algorithm can be a heuristic search algorithm, such as a Monte-Carlo tree-analysis algorithm or a temporal-difference learning algorithm; a stochastic search algorithm, such as a simulated annealing algorithm; or another type of algorithm. The search algorithm may learn or be guided over time (e.g., between iterations) to more rapidly converge towards solutions, without having to test all of the possible combinations defined in the search space. This type of searching can be referred to as a combinatorial optimization problem, in which a space is searched for a local maximum or minimum that best satisfies an objective function. By solving this combinatorial optimization problem, the recommendation process 132 can rapidly determine a group of software-stack candidates that are most likely to yield the best results, where each of the software-stack candidates in the group has a unique combination of the software components in the search space. The group of software-stack candidates may be a relatively small subset of the total number of software-stack combinations that can be generated using all of the software components in the search space. For example, the group may include 100 thousand software-stack candidates, which may be a relatively small subset of 10 million total possibilities. In this way, the recommendation process 132 can significantly reduce the amount of software-stack candidates that will undergo further analysis.
  • During or after the search process, the recommendation process 132 can also determine respective scores for the software-stack candidates using a scoring function. In some examples, the scoring function can take into account hardware and software characteristics of one or more target computing environments, such as the target build environment 122 and/or a target runtime environment 126 in which the target software item is to execute. Additionally or alternatively, the scoring function can take into account security properties of the target software item and each of its dependencies. Additionally or alternatively, the scoring function can take into account performance properties of the target software item and each of its dependencies. The scoring function may also take into account other factors. Using a scoring function to characterize each of the software-stack candidates in this way can be faster and less resource-intensive than building and testing each of the software-stack candidates to verify application behavior.
  • After scoring the software-stack candidates, the recommendation engine 104 can select one of the software-stack candidates from the group as a recommended software-stack 106 based on its corresponding score. For example, the recommendation engine 104 can select whichever software-stack candidate in the group has the highest score or the lowest score, depending on the scoring function, as the recommended software-stack 106. The recommended software-stack 106 may be the best software stack for a given computing environment relative to the rest of the software-stack candidates in the group. The recommendation engine 104 may then transmit an output indicating the recommended software-stack 106 to the build system 102, which may use the recommended software-stack 106 to determine and execute a build process 108 for building a software build 124 of the target software item.
  • The recommended software-stack 106 may indicate certain hardware and software that is recommended for use in building the target software item. For example, the recommended software-stack 106 can specify certain hardware components or software packages that are to be included in a target build environment 122 to achieve a certain build result (e.g., an optimized build process). Examples of such hardware components may include a certain number and type of processor, non-volatile memory, and volatile-memory. Examples of such software packages may include an operating system, databases, libraries, or any combination of these. Some of the software packages may be considered required packages that must be used for proper completion of the build process 108 or proper operation at runtime.
  • After receiving the recommended software-stack 106, the build system 102 can determine (e.g., formulate) a build process 108 for building the target software item based on the recommended software-stack 106. In some examples, this may include selecting a target build environment 122 that includes or has access to the software packages (e.g., specified packages 110) and/or the hardware components 112 specified in the recommended software-stack 106. For example, the build system 102 can determine whether a local build environment has the recommended software packages or hardware components 112. If not, the build system 102 may select and initiate the build process 108 on a remote computing system that does have access to some or all of the specified packages 110 and hardware components 112. An example of the remote computing system can include a remote computing cluster.
  • In one specific example, the target software item can include a machine-learning model such as a neural network. The specified packages 110 may include machine learning libraries that may have certain build environment specifications. Examples of these specifications may include certain graphics processing unit (“GPU”) models, certain kernels or versions of kernels, certain operating systems, certain nodes, etc. The build system 102 may determine which computing cluster has a target build environment 122 that includes the specified packages 110. In an example where the build system 102 is unable to determine a computing cluster that includes the specified packages 110, the build system 102 may reconfigure the build process 108 to determine a different computing cluster with different specified packages 110 or hardware components 112. The build process 108 may be executed using the different computing cluster to create a software build 124 for the target software item.
  • Determining the build process 108 may additionally or alternatively include determining specified parameters 118 of the specified packages 110 and an installation order 120 of the specified packages 110 based on the recommended software-stack 106. The specified parameters 118 may include configuration settings for configuring the specified packages 110. For example, the specified parameters 118 may include compiler flags or settings for use in compiling source code. The installation order 120 may be an order for installing the specified packages 110 in the target build environment 122. The installation order 120 may be determined based on dependencies among the specified packages 110.
  • As one particular example, TensorFlow is a popular Python library for building artificial intelligence or machine learning applications. The recommendation engine 104 may transmit a recommended software-stack 106 for a target software item that is a machine-learning application to the build system 102. The recommended software-stack 106 may include recommendations for certain versions of TensorFlow packages to use, other packages native to the build system 102 and their dependencies on one another and with the TensorFlow packages, files such as binary files and scripts to include in the machine-learning application, databases for training the machine-learning application, etc. In this example involving TensorFlow, the build system 102 may determine the build process 108 based on the recommendations. For example, the build system 102 can determine that the build process 108 is to include the native packages and the certain versions of the Tensor Flow packages. The build system 102 may also determine an available hardware component 112 (e.g., CPU type or GPU type) with characteristics that may allow for installing and configuring the specified packages 110. The installation order 120 may be determined based on the dependencies between the specified packages as provided in the recommended software-stack 106. For example, if the recommended software-stack 106 includes a first package that depends on a second package, the build system 102 may determine the installation order 120 that involves installing the second package before the first package.
  • In some examples, the build system 102 may also use the recommended dependencies and files provided in the recommended software-stack 106 to determine the specified parameters 118. For example, a first package may depend on a second package, but only if the second package has a specific configuration. Therefore, the build system 102 may determine a specified parameter 118 for the second package so that the second package may have the specific configuration. Additionally, if the recommended software-stack 106 includes a package accessing a certain database, the build system 102 may determine specified parameters 118 for which database to access, how the specified package 110 uses the database, etc.
  • Having formulated the build process 108 for the target software item, the build system 102 may execute the build process 108 to generate the software build 124 in a target build environment 122. Executing the build process may involve using the hardware component 112 to install the specified packages 110 in a certain installation order 120 and configuring the specified packages 110 and hardware component 112 to have specified parameters 118. In some examples, the build process may be stateless. This may allow the build process to be executed multiple times concurrently for multiple target software items. Although the target build environment 122 is shown in FIG. 1 as being internal to the build system 102, it will be appreciated that in other examples the target build environment 122 may be external to the build system 102. In some such examples, the build system 102 may execute the build process 108 by transmitting one or more commands to the target build environment 122 for causing the target build environment 122 to perform the build process.
  • After executing the build process 108 to generate the software build 124, the build system 102 may deploy the software build 124 in a target runtime environment 126. Although the target runtime environment 126 is shown in FIG. 1 as being internal to the build system 102, in other examples the target runtime environment 126 may be external to and accessible by the build system 102. In some examples, the target runtime environment 126 may be the same as target build environment 122. For example, the target build environment 122 and the target runtime environment 126 may be located in the same or different computing clusters that are inside or outside of the build system 102.
  • After the software build 124 has been built and deployed, the build system 102 may determine performance metrics 128 for the software build 124 in the target runtime environment 126. Examples of the performance metrics 128 may a memory consumption metric, a processor consumption metric, a bandwidth consumption metric, a latency metric, or any combination of these. In some examples, the performance metrics 128 may be obtained by testing the software build 124 in the target runtime environment 126. The test results may indicate any of the above metrics as well as other performance characteristics. For example, the test results may indicate whether the software build 124 runs properly in the target runtime environment 126, whether the software build 124 is an accurate build of the target software item, and the functional performance of the software build 124.
  • In some examples, the build system 102 may determine feedback 130 for the recommendation engine 104 based on the performance metrics 128. For example, the build system 102 may determine that its target build environment 122 may not have access to certain hardware or software included in the recommended software-stack 106. The build system 102 may configure the feedback 130 to indicate that the certain hardware or software is unavailable. In another example, the performance metrics 128 may indicate that the target software item has high latency. The build system 102 may analyze the software build 124 to determine that use of a certain version of a specified package 110 in the software build 124 may be a cause of the increased latency of the target software item. So, the build system 102 may configure the feedback 130 to indicate the high latency and to indicate that the certain version of the software package is a cause thereof. In some examples, the feedback 130 may take the form of one or more suggestions for changes to the recommendation process 132. The build system 102 may transmit the feedback 130 to the recommendation engine 104 over a network, such as a local area network or the Internet.
  • The recommendation engine 104 may receive the feedback 130 and adjust the recommendation process 132 based on the feedback 130. For example, the recommendation engine 104 can adjust a score or stored characteristic associated with one or more of the specified packages 110 based on the feedback 130. This feedback loop may allow the recommendation process 132 to be improved over time. In some examples, the build system 102 may provide the performance metrics 128 or the feedback 130 to a user via a display, which may be for example a liquid crystal display (LCD) or a light-emitting diode (LED) display, to allow the user to modify and improve the build process 108 or the recommendation process 132 accordingly.
  • Although FIG. 1 shows a certain number and arrangement of components, it will be appreciated that this is for illustrative purposes and not intended to be limiting. Other examples may include more components, fewer components, different components, or a different arrangement of the components shown in FIG. 1 . For instance, the recommendation engine 104 may be part of the build system 102 in other examples.
  • FIG. 2 is a block diagram of another example of a system 200 for generating a build process 108 for building a target software item based on a recommended software-stack 106 according to some aspects of the present disclosure. The system 200 includes a processor 202 communicatively coupled with a memory 204. In some examples, the processor 202 and the memory 204 can be included in the same housing (e.g., in the same computing device) or remote from one another.
  • The processor 202 can include one processor or multiple processors. Examples of the processor 202 include a Field-Programmable Gate Array (FPGA), an application-specific integrated circuit (ASIC), a microprocessor, or any combination of these. The processor 202 can execute instructions 206 stored in the memory 204 to perform operations. In some examples, the instructions 206 can include processor-specific instructions generated by a compiler or an interpreter from code written in any suitable computer-programming languages, such as C, C++, C#, etc.
  • The memory 204 can include one memory or multiple memories. In some examples, the memory 204 can be non-volatile such that it retains stored information when powered off. For instance, the memory 204 can include electrically erasable and programmable read-only memory (EEPROM), flash memory, or any other type of non-volatile memory. At least some of the memory 204 includes a non-transitory computer-readable medium from which the processor 202 can read instructions 206. A computer-readable medium can include electronic, optical, magnetic, or other storage devices capable of providing the processor 202 with computer-readable instructions or other program code. Examples of a non-transitory computer-readable medium can include magnetic disk(s), memory chip(s), ROM, random-access memory (RAM), an ASIC, a configured processor, optical storage, or any combination of these.
  • In some examples, the processor 202 can execute the instructions 206 to perform operations. For example, the processor 202 may receive a recommended software-stack 106 from a recommendation engine 104 for a target software item. The processor 202 may determine, based on the recommended software-stack 106, a build process 108 for a software build 124 of the target software item in a target build environment 122. The processor 202 may then execute the build process 108 to generate a software build 124 of the target software item in the target build environment 122.
  • In some examples, the processor 202 can deploy the software build 124 in a target runtime environment 126. After deploying the software build 124 in the target runtime environment 126, the processor 202 may determine performance metrics 128 for the software build 124 in the target runtime environment 126. The processor 202 may then transmit feedback 130 based on the performance metrics 128 to the recommendation engine 104. Based on the feedback 130, the recommendation engine 104 may reconfigure its recommendation process 132 for selecting recommended software-stacks 106, thereby improving the system 200.
  • In some examples, the processor 202 can implement some or all of the steps shown in FIG. 3 . Other examples can include more steps, fewer steps, different steps, or a different order of the steps than is shown in FIG. 3 . Some or all of the steps may be repeated. The steps of FIG. 3 are discussed below with reference to the components discussed above from FIGS. 1-2 .
  • In block 302, the processor 202 receives a recommended software-stack 106 from a recommendation engine 104 for a target software item to be built in a target build environment 122. The processor 202 can receive the recommended software-stack 106 as an electronic communication via a network, such as a local area network or the Internet.
  • In block 304, the processor 202 determines, based on the recommended software-stack 106, a build process 108 for a software build 124 of the target software item in the target build environment 122. Determining the build process 108 can involve determining how one or more aspects of the build process 108 are to be configured.
  • In some examples, the recommended software-stack 106 may include recommendations for software and hardware characteristics of the target build environment 122. So, the processor 202 may select a target build environment 122 that has access to the software and hardware characteristics. The processor 202 may then configure the build process 108 so as to be performed on the target built environment 122. For instance, the processor 202 may command a hardware component 112 of the target built environment 122 to obtain and install specified packages 110 in an installation order 120. The processor 202 may also command the hardware component 112 of the target built environment 122 to configure the specified packages 110 to have specified parameters 118. The processor 202 may then use the target built environment 122 to create the software build 124.
  • In some examples, determining the build process 108 may include determining a suitable (e.g., compatible) alternative to one or more software items specified in the recommended software-stack 106. For example, the processor 202 may identify a need for a suitable alternative for a particular software item if the software item is not accessible by the target build environment 122 or if the processor 202 has been previously configured by a user to avoid use of the one or more software items. The processor 202 may compare characteristics of the particular software item to one or more other software items that are available to identify a suitable alternative. For example, the recommended software-stack 106 may include a recommendation for software library that may not be available to the processor 202. So, the processor 202 may determine a different software library to be used in the build process 108, based on similarities between the functional characteristics of the two software libraries. In one example, the recommended software-stack 106 may include a recommendation for installing specified packages 110 from a public source. The processor 202 may be configured to not install specified packages 110 from public sources, for example due to security concerns. Therefore, the processor 202 may override the recommendation from the recommendation engine 104 to determine a private (e.g., corporate) source for accessing and installing the specified packages 110. In another example, the recommended software-stack 106 may include a recommendation for deploying the software build 124 using Advanced Vector Extensions (“AVX”), but the processor 202 may only have access to Advanced Vector Extensions 2 (“AVX2”) nodes. So, the processor 202 may determine that AVX2 is an expansion of AVX and may configure the build process 108 to use nodes with AVX2 enabled.
  • In some examples, the build process 108 may be determined (e.g., adjusted) based on one or more characteristics of the target runtime environment 126. Examples of such characteristics can include the hardware characteristics, software characteristics, and geographical location of the target runtime environment. For example, the specified packages 110 may include databases for training a software build 124 for a target software item that is a machine learning model. If the software build 124 is to be deployed in a target runtime environment 126 located in the European Union (“EU”), the processor 202 can configure the build process 108 so that the software build 124 complies with EU laws or regulations, such as the General Data Protection Regulation (“GDPR”). For instance, the processor 202 may determine specified packages 110 that include databases that are specific to and cannot leave the EU.
  • In block 306, the processor 202 executes the build process 108 to generate a software build 124 of the target software item in the target build environment 122. This may involve commanding a compiler to compile source code or commanding an interpreter to interpret the source code. In some examples, the processor 202 can instruct the target build environment 122 to use the hardware components 112 to download the specified packages 110 to the target build environment 122, configure the specified packages 110 to have the specified parameters 118, and use the specified packages 110 to generate the software build 124.
  • Once the software build 124 is created, in some examples the processor 202 can deploy the software build 124 in a target runtime environment 126. The processor 202 may then perform additional operations on the software build 124 after deployment in the target runtime environment 126. For example, when the target software item is a machine learning model, the processor 202 may train the software build 124, such as with databases included in the specified packages 110.
  • In some examples, the processor 202 can determine performance metrics 128 for the software build 124 in the target runtime environment 126. The performance metrics 128 may indicate accuracy, efficiency, and latency. The performance metrics 128 may be determined by executing tests, which may include user-supplied programs or scripts for testing the software build 124. The processor 202 may be configured to monitor the software build 124 for issues.
  • In some examples, the processor 202 may execute multiple potential build processes 108 in one or more build environments and determine performance metrics 128 for each of the resulting software builds 124. The multiple potential build processes 108 may be determined by the processor 202 based on adjustments to the recommended software-stack 106. For example, if the recommended software-stack 106 recommends use of a software component that is unavailable to the processor 202, the processor 202 may generate multiple potential build processes that use available software components that the processor 202 has determined to be similar to the recommended software component. The processor 202 may execute the multiple potential build processes 108 in the one or more build environments and may determine performance metrics 128 for the software builds 124 of each potential build process 108. The processor 202 may determine which software build 124 to deploy in the target runtime environment 126 based on the results of the performance metrics 128. In some examples, the processor 202 may determine feedback 130 based on the performance metrics 128 and may transmit the feedback 130 to the recommendation engine 104. The recommendation engine 104 may adjust a recommendation process 132 for determining recommended software-stacks 106 based on the feedback 130.
  • The foregoing description of certain examples, including illustrated examples, has been presented only for the purpose of illustration and description and is not intended to be exhaustive or to limit the disclosure to the precise forms disclosed. Numerous modifications, adaptations, and uses thereof will be apparent to those skilled in the art without departing from the scope of the disclosure. For instance, any examples described herein can be combined with any other examples to yield further examples.

Claims (20)

1. A system comprising:
a processor; and
a non-transitory memory including instructions that are executable by the processor for causing the processor to:
receive, from a recommendation engine, a recommended software-stack for a target software item to be built in a target build environment;
determine, based on the recommended software-stack, a build process for building the target software item in the target build environment; and
execute the build process to generate a software build of the target software item in the target build environment.
2. The system of claim 1, wherein the non-transitory memory further includes instructions that are executable by the processor for causing the processor to:
deploy the software build in a target runtime environment;
determine performance metrics for the software build in the target runtime environment; and
provide feedback to the recommendation engine based on the performance metrics for the software build.
3. The system of claim 2, wherein the recommendation engine is configured to receive the feedback and adjust a recommendation process for recommending software-stacks based on the feedback.
4. The system of claim 1, wherein the instructions are further executable by the processor for causing the processor to:
identify, based on the recommended software-stack, specified packages for generating the software build;
determine an installation order for the specified packages; and
install the specified packages in the target build environment in the installation order.
5. The system of claim 4, wherein the instructions are further executable by the processor for causing the processor to:
identify, based on the recommended software-stack, specified parameters of the specified packages; and
configure the specified packages installed in the target build environment to have the specified parameters.
6. The system of claim 1, wherein the instructions are further executable by the processor for causing the processor to:
determine, based on the recommended software-stack, a hardware component to be used in executing the build process;
select a computing cluster having access to the hardware component; and
execute the build process using the computing cluster.
7. The system of claim 1, wherein the build process is stateless, and wherein the instructions are further executable by the processor for causing the processor to execute the build process multiple times concurrently for a plurality of target software items.
8. A method comprising:
receiving, by a processor and from a recommendation engine, a recommended software-stack for a target software item to be built in a target build environment;
determining, by the processor and based on the recommended software-stack, a build process for building the target software item in the target build environment; and
executing, by the processor, the build process to generate a software build of the target software item in the target build environment.
9. The method of claim 8, further comprising:
deploying, by the processor, the software build in a target runtime environment, wherein the target build environment is different from the target runtime environment;
determining, by the processor, performance metrics for the software build in the target runtime environment; and
providing, by the processor, feedback to the recommendation engine based on the performance metrics for the software build.
10. The method of claim 9, wherein the recommendation engine is configured to receive the feedback and adjust a recommendation process for recommending software-stacks based on the feedback.
11. The method of claim 8, further comprising:
identifying, by the processor and based on the recommended software-stack, specified packages for generating the software build;
determining, by the processor, an installation order for the specified packages; and
installing, by the processor, the specified packages in the target build environment in the installation order.
12. The method of claim 11, further comprising:
identifying, by the processor and based on the recommended software-stack, specified parameters of the specified packages; and
configuring, by the processor, the specified packages installed in the target build environment to have the specified parameters.
13. The method of claim 8, further comprising:
determining, by the processor and based on the recommended software-stack, a hardware component to be used in executing the build process;
selecting, by the processor, a computing cluster having access to the hardware component; and
executing, by the processor, the build process using the computing cluster.
14. The method of claim 8, wherein the build process is stateless, and wherein the build process is executed by the processor multiple times concurrently for a plurality of target software items.
15. A non-transitory computer-readable medium including instructions that are executable by a processor for performing operations comprising:
receiving, from a recommendation engine, a recommended software-stack for a target software item to be built in a target build environment;
determining, based on the recommended software-stack, a build process for building the target software item in the target build environment; and
executing the build process to generate a software build of the target software item in the target build environment.
16. The non-transitory computer-readable medium of claim 15, wherein the operations further comprise:
deploying the software build in a target runtime environment;
determining performance metrics for the software build in the target runtime environment; and
providing feedback to the recommendation engine based on the performance metrics for the software build.
17. The non-transitory computer-readable medium of claim 16, wherein the recommendation engine is configured to receive the feedback and adjust a recommendation process for recommending software-stacks based on the feedback.
18. The non-transitory computer-readable medium of claim 15, wherein the operations further comprise:
identifying, based on the recommended software-stack, specified packages for generating the software build;
determining an installation order for the specified packages; and
installing the specified packages in the target build environment in the installation order.
19. The non-transitory computer-readable medium of claim 18, wherein the operations further comprise:
identifying, based on the recommended software-stack, specified parameters of the specified packages; and
configuring the specified packages installed in the target build environment to have the specified parameters.
20. The non-transitory computer-readable medium of claim 15, wherein the operations further comprise:
determining, based on the recommended software-stack, a hardware component to be used in executing the build process;
selecting a computing cluster having access to the hardware component; and
executing the build process using the computing cluster.
US17/406,356 2021-08-19 2021-08-19 Generating a build process for building software in a target environment Active 2041-09-12 US11995420B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US17/406,356 US11995420B2 (en) 2021-08-19 2021-08-19 Generating a build process for building software in a target environment

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US17/406,356 US11995420B2 (en) 2021-08-19 2021-08-19 Generating a build process for building software in a target environment

Publications (2)

Publication Number Publication Date
US20230053820A1 true US20230053820A1 (en) 2023-02-23
US11995420B2 US11995420B2 (en) 2024-05-28

Family

ID=85227571

Family Applications (1)

Application Number Title Priority Date Filing Date
US17/406,356 Active 2041-09-12 US11995420B2 (en) 2021-08-19 2021-08-19 Generating a build process for building software in a target environment

Country Status (1)

Country Link
US (1) US11995420B2 (en)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116860262A (en) * 2023-06-26 2023-10-10 曙光智算信息技术有限公司 Fantasy engine deployment method and device and computer equipment
US20240045786A1 (en) * 2022-08-04 2024-02-08 Airbiquity Inc. Build system supporting code audits, code verification, and software forensics
US20250094318A1 (en) * 2023-09-14 2025-03-20 Oracle International Corporation Multi-architecture rapid testing framework

Citations (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070055963A1 (en) * 2005-09-08 2007-03-08 Lucent Technologies, Inc. Compile target and compiler flag extraction in program analysis and transformation systems
US20170090884A1 (en) * 2015-09-28 2017-03-30 Semmle Limited Automatic determination of compiler configuration
US20170102924A1 (en) * 2015-10-11 2017-04-13 Renesas Electronics America Inc. Software architecture for embedded systems
US20170293695A1 (en) * 2016-04-12 2017-10-12 Ebay Inc. Optimizing similar item recommendations in a semi-structured environment
US20180157486A1 (en) * 2016-12-07 2018-06-07 Sap Se Software version fingerprint generation and identification
EP3432144A1 (en) * 2017-07-20 2019-01-23 Fujitsu Limited A computer-implemented method and system for automatically recommending a code modification
US10216512B1 (en) * 2016-09-29 2019-02-26 Amazon Technologies, Inc. Managed multi-container builds
WO2019099008A1 (en) * 2017-11-16 2019-05-23 Hewlett-Packard Development Company, L.P. Software builds using a cloud system
CN110020121A (en) * 2017-10-16 2019-07-16 上海交通大学 Software crowdsourcing item recommendation method and system based on transfer learning
EP3572931A1 (en) * 2018-05-23 2019-11-27 Fujitsu Technology Solutions Intellectual Property GmbH Installation and configuration of operating system and application software using local repositories
US20200034135A1 (en) * 2018-07-30 2020-01-30 International Business Machines Corporation Analyzing software change impact based on machine learning
US20200117434A1 (en) * 2016-12-21 2020-04-16 Aon Global Operations Ltd (Singapore Branch) Methods, systems, and portal for accelerating aspects of data analytics application development and deployment
US20200125996A1 (en) * 2018-10-19 2020-04-23 Red Hat, Inc. Automated software selection using a vector-trained deep learning model
US20200159536A1 (en) * 2018-11-21 2020-05-21 Sri International Unicontainers
US10671384B1 (en) * 2017-12-07 2020-06-02 Amazon Technologies, Inc. Proactive seeding of build Artifacts
CN111242321A (en) * 2019-04-18 2020-06-05 中科寒武纪科技股份有限公司 Data processing method and related product
US10698668B1 (en) * 2018-05-29 2020-06-30 Amazon Technologies, Inc. Custom code transformations during compilation process
US20200272459A1 (en) * 2019-02-25 2020-08-27 Red Hat, Inc. Deploying applications in a computing environment
US20200356360A1 (en) * 2019-05-06 2020-11-12 Red Hat, Inc. Automated software selection using matrix factorization
US20200387357A1 (en) * 2017-12-05 2020-12-10 Agile Stacks Inc. Machine generated automation code for software development and infrastructure operations
US20210081837A1 (en) * 2019-09-14 2021-03-18 Oracle International Corporation Machine learning (ml) infrastructure techniques
US20210096892A1 (en) * 2019-10-01 2021-04-01 Red Hat, Inc. Snapshot for compiler optimization
US20210374558A1 (en) * 2020-06-02 2021-12-02 International Business Machines Corporation Intelligent application library management
US11288061B1 (en) * 2020-11-23 2022-03-29 Humana Inc. Tracking software assets generated from source code using a build pipeline
US20220164209A1 (en) * 2020-11-24 2022-05-26 International Business Machines Corporation Containerized computing environments
US20220197633A1 (en) * 2020-12-21 2022-06-23 Bitrise Inc. Software defined build infrastructure for hybrid, virtualized and native build environments
US20220342673A1 (en) * 2021-04-23 2022-10-27 Nvidia Corporation Techniques for parallel execution
US20220350683A1 (en) * 2021-04-26 2022-11-03 Nvidia Corporation Techniques for combining operations
US20230004858A1 (en) * 2021-06-30 2023-01-05 Oracle International Corporation Software build management using machine learning model
US20230145783A1 (en) * 2021-11-08 2023-05-11 Nvidia Corporation Parallel processing for combinatorial optimization

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7669199B2 (en) 2004-04-28 2010-02-23 Openlogic, Inc. Installation of software stacks including uncoordinated projects
WO2007087109A2 (en) 2005-12-21 2007-08-02 Transip, Inc. System and method for efficient replication of and access to application specific environments and data
US7941801B2 (en) 2006-03-07 2011-05-10 Oracle America Inc. Method and system for provisioning a virtual computer and scheduling resources of the provisioned virtual computer
US7971187B2 (en) 2006-04-24 2011-06-28 Microsoft Corporation Configurable software stack
US20080201705A1 (en) 2007-02-15 2008-08-21 Sun Microsystems, Inc. Apparatus and method for generating a software dependency map
US20110113420A1 (en) 2009-11-09 2011-05-12 Bank Of America Corporation Distribution Of Software Updates
US9372482B2 (en) 2010-05-14 2016-06-21 Harnischfeger Technologies, Inc. Predictive analysis for remote machine monitoring
US8793377B2 (en) 2011-05-03 2014-07-29 International Business Machines Corporation Identifying optimal virtual machine images in a networked computing environment
US9552231B2 (en) 2012-09-27 2017-01-24 Adobe Systems Incorporated Client classification-based dynamic allocation of computing infrastructure resources
US9519477B2 (en) 2013-09-16 2016-12-13 International Business Machines Corporation Automatic pre-detection of potential coding issues and recommendation for resolution actions
US10127146B2 (en) 2015-04-21 2018-11-13 Cloudy Days, Inc. Systems and methods to identify and classify performance bottlenecks in cloud based applications
US9841952B2 (en) 2015-12-29 2017-12-12 Wipro Limited System and method for dynamically composing an integrated open source stack
US9910649B2 (en) 2016-01-19 2018-03-06 International Business Machines Corporation Integrating and sharing software build component targets
US10261806B2 (en) 2017-04-28 2019-04-16 International Business Machines Corporation Adaptive hardware configuration for data analytics
CN107135103B (en) 2017-05-08 2021-03-19 网宿科技股份有限公司 Method and system for building a content distribution network platform on heterogeneous resources
US20200311600A1 (en) 2019-03-29 2020-10-01 Dell Products L. P. Method and system for prediction of application behavior
KR102760965B1 (en) 2019-04-09 2025-02-03 삼성전자주식회사 An electronic device for executing different operating system and method thereof
US10922072B1 (en) 2019-05-25 2021-02-16 Juniper Networks, Inc Apparatus, system, and method for seamless and reversible in-service software upgrades
US11288166B2 (en) 2020-07-20 2022-03-29 Red Hat, Inc. Determining a recommended software-stack for a target software item
CN112130866A (en) 2020-10-09 2020-12-25 腾讯科技(深圳)有限公司 Application deployment method and related device

Patent Citations (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070055963A1 (en) * 2005-09-08 2007-03-08 Lucent Technologies, Inc. Compile target and compiler flag extraction in program analysis and transformation systems
US20170090884A1 (en) * 2015-09-28 2017-03-30 Semmle Limited Automatic determination of compiler configuration
US20170102924A1 (en) * 2015-10-11 2017-04-13 Renesas Electronics America Inc. Software architecture for embedded systems
US20170293695A1 (en) * 2016-04-12 2017-10-12 Ebay Inc. Optimizing similar item recommendations in a semi-structured environment
US10216512B1 (en) * 2016-09-29 2019-02-26 Amazon Technologies, Inc. Managed multi-container builds
US20180157486A1 (en) * 2016-12-07 2018-06-07 Sap Se Software version fingerprint generation and identification
US20200117434A1 (en) * 2016-12-21 2020-04-16 Aon Global Operations Ltd (Singapore Branch) Methods, systems, and portal for accelerating aspects of data analytics application development and deployment
EP3432144A1 (en) * 2017-07-20 2019-01-23 Fujitsu Limited A computer-implemented method and system for automatically recommending a code modification
CN110020121A (en) * 2017-10-16 2019-07-16 上海交通大学 Software crowdsourcing item recommendation method and system based on transfer learning
WO2019099008A1 (en) * 2017-11-16 2019-05-23 Hewlett-Packard Development Company, L.P. Software builds using a cloud system
US20200387357A1 (en) * 2017-12-05 2020-12-10 Agile Stacks Inc. Machine generated automation code for software development and infrastructure operations
US10671384B1 (en) * 2017-12-07 2020-06-02 Amazon Technologies, Inc. Proactive seeding of build Artifacts
EP3572931A1 (en) * 2018-05-23 2019-11-27 Fujitsu Technology Solutions Intellectual Property GmbH Installation and configuration of operating system and application software using local repositories
US10698668B1 (en) * 2018-05-29 2020-06-30 Amazon Technologies, Inc. Custom code transformations during compilation process
US20200034135A1 (en) * 2018-07-30 2020-01-30 International Business Machines Corporation Analyzing software change impact based on machine learning
US20200125996A1 (en) * 2018-10-19 2020-04-23 Red Hat, Inc. Automated software selection using a vector-trained deep learning model
US20200159536A1 (en) * 2018-11-21 2020-05-21 Sri International Unicontainers
US20200272459A1 (en) * 2019-02-25 2020-08-27 Red Hat, Inc. Deploying applications in a computing environment
CN111242321A (en) * 2019-04-18 2020-06-05 中科寒武纪科技股份有限公司 Data processing method and related product
US20200356360A1 (en) * 2019-05-06 2020-11-12 Red Hat, Inc. Automated software selection using matrix factorization
US20210081837A1 (en) * 2019-09-14 2021-03-18 Oracle International Corporation Machine learning (ml) infrastructure techniques
US20210096892A1 (en) * 2019-10-01 2021-04-01 Red Hat, Inc. Snapshot for compiler optimization
US20210374558A1 (en) * 2020-06-02 2021-12-02 International Business Machines Corporation Intelligent application library management
US11288061B1 (en) * 2020-11-23 2022-03-29 Humana Inc. Tracking software assets generated from source code using a build pipeline
US20220164209A1 (en) * 2020-11-24 2022-05-26 International Business Machines Corporation Containerized computing environments
US20220197633A1 (en) * 2020-12-21 2022-06-23 Bitrise Inc. Software defined build infrastructure for hybrid, virtualized and native build environments
US20220342673A1 (en) * 2021-04-23 2022-10-27 Nvidia Corporation Techniques for parallel execution
US20220350683A1 (en) * 2021-04-26 2022-11-03 Nvidia Corporation Techniques for combining operations
US20230004858A1 (en) * 2021-06-30 2023-01-05 Oracle International Corporation Software build management using machine learning model
US20230145783A1 (en) * 2021-11-08 2023-05-11 Nvidia Corporation Parallel processing for combinatorial optimization

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
Collin McMillan, Recommending Source Code for Use in Rapid Software Prototypes, 2012, pages 1-11. https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6227134 (Year: 2012) *
Davide Pizzolotto, Identifying Compiler and Optimization Options from Binary Code using Deep Learning Approaches, 2020, pages 1-11. https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9240714 (Year: 2020) *
Liang Wei, Recommender Systems for Software Project Managers, 6/2021, pages 412-417. https://dl.acm.org/doi/pdf/10.1145/3463274.3463951 (Year: 2021) *
Nina Mazyavkina, Reinforcement Learning for Combinatorial Optimization: A Survey, 2020, pages 1-24. https://arxiv.org/pdf/2003.03600.pdf (Year: 2020) *
Zhipeng Li, Combinatorial Keyword Recommendations for Sponsored Search with Deep Reinforcement Learning, 2019, pages 1-6. file:///C:/Users/mnguyen4/Documents/e-Red%20Folder/17406356/NPL%20Doc%20Li.pdf (Year: 2019) *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240045786A1 (en) * 2022-08-04 2024-02-08 Airbiquity Inc. Build system supporting code audits, code verification, and software forensics
US12204434B2 (en) * 2022-08-04 2025-01-21 Karma Automotive Llc Build system supporting code audits, code verification, and software forensics
CN116860262A (en) * 2023-06-26 2023-10-10 曙光智算信息技术有限公司 Fantasy engine deployment method and device and computer equipment
US20250094318A1 (en) * 2023-09-14 2025-03-20 Oracle International Corporation Multi-architecture rapid testing framework

Also Published As

Publication number Publication date
US11995420B2 (en) 2024-05-28

Similar Documents

Publication Publication Date Title
US11995420B2 (en) Generating a build process for building software in a target environment
US10949337B1 (en) Utilizing neural network and artificial intelligence models to select and execute test cases in a software development platform
US10614375B2 (en) Machine for development and deployment of analytical models
US10387798B2 (en) Machine for development of analytical models
US8954309B2 (en) Techniques for application tuning
US10438118B2 (en) Verification by metamorphic testing of applications that utilize artificial intelligence
US11816545B2 (en) Optimizing machine learning models
US10324729B2 (en) Machine intelligence and learning for graphic chip accessibility and execution
US11748350B2 (en) System and method for machine learning for system deployments without performance regressions
US20230027810A1 (en) Constructing pipelines for implementing a software-stack resolution process
CN118103852A (en) Training data enhancement via program simplification
CN113032257A (en) Automatic test method, device, computer system and readable storage medium
US11599354B2 (en) Detecting misconfiguration and/or bug(s) in large service(s) using correlated change analysis
EP4502891A1 (en) Dynamic project planning for software development projects
US11288166B2 (en) Determining a recommended software-stack for a target software item
US20210142184A1 (en) Systems and Methods of A Boolean Network Development Environment
US20250021315A1 (en) Training and using artificial intelligence models to predict data size
US20240427635A1 (en) Dynamic resource prediction using large code language models
US20250103931A1 (en) Strategizing distributed systems using quantum simulation
US20240319966A1 (en) Automatically modifying user code using artificial intelligence techniques
Heimel et al. Demonstrating Self-Learning Algorithm Adaptivity in a Hardware-Oblivious Database Engine.
CN120066927A (en) Application deployment method, device, electronic equipment and storage medium
WO2021247831A1 (en) Automated knowledge extraction and representation for complex engineering systems
CN120216382A (en) Data testing method, device, computer equipment, storage medium and program product

Legal Events

Date Code Title Description
AS Assignment

Owner name: RED HAT, INC., NORTH CAROLINA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:POKORNY, FRIDOLIN;GOERN, CHRISTOPH;MURDACA, FRANCESCO;AND OTHERS;SIGNING DATES FROM 20210721 TO 20210818;REEL/FRAME:057228/0347

FEPP Fee payment procedure

Free format text: ENTITY STATUS SET TO UNDISCOUNTED (ORIGINAL EVENT CODE: BIG.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

STPP Information on status: patent application and granting procedure in general

Free format text: NON FINAL ACTION MAILED

STPP Information on status: patent application and granting procedure in general

Free format text: RESPONSE AFTER FINAL ACTION FORWARDED TO EXAMINER

STPP Information on status: patent application and granting procedure in general

Free format text: DOCKETED NEW CASE - READY FOR EXAMINATION

STPP Information on status: patent application and granting procedure in general

Free format text: NON FINAL ACTION MAILED

STPP Information on status: patent application and granting procedure in general

Free format text: RESPONSE TO NON-FINAL OFFICE ACTION ENTERED AND FORWARDED TO EXAMINER

STPP Information on status: patent application and granting procedure in general

Free format text: NOTICE OF ALLOWANCE MAILED -- APPLICATION RECEIVED IN OFFICE OF PUBLICATIONS

STPP Information on status: patent application and granting procedure in general

Free format text: PUBLICATIONS -- ISSUE FEE PAYMENT VERIFIED

STCF Information on status: patent grant

Free format text: PATENTED CASE