Oryx/README.md

204 строки
7.5 KiB
Markdown
Исходник Обычный вид История

# Oryx
[![Build Status](https://devdiv.visualstudio.com/DevDiv/_apis/build/status/Oryx/Oryx-Nightly?branchName=main)](https://devdiv.visualstudio.com/DevDiv/_build/latest?definitionId=10393&branchName=main)
Oryx is a build system which automatically compiles source code repos into
runnable artifacts. It is used to build web apps for [Azure App Service][] and
other platforms.
To receive updates on runtimes and versions supported by Oryx and App Service,
subscribe to [Azure Updates][] or watch the
[github.com/Azure/app-service-announcements](https://github.com/Azure/app-service-announcements)
tracker.
[Azure App Service]: https://azure.microsoft.com/services/app-service/
[Azure Updates]: https://azure.microsoft.com/updates
Oryx generates and runs an opinionated build script within a *build* container
based on analysis of a codebase's contents. For example, if `package.json` is
discovered in the repo Oryx includes `npm run build` in the build script; or if
`requirements.txt` is found it includes `pip install -r requirements.txt`.
Oryx also generates a run-time startup script for the app including typical
start commands like `npm run start` for Node.js or a WSGI module and server
for Python.
The built artifacts and start script are loaded into a minimalistic *run*
container and run.
# Supported platforms and versions
[Link](./doc/supportedPlatformVersions.md)
Patches (0.0.**x**) are applied as soon as possible after they are released upstream.
# Get started
Though built first for use within Azure services, you can also use the Oryx
build system yourself for troubleshooting and tests. Following are simple
instructions; for complete background see our [architecture
doc](./doc/architecture.md).
Oryx includes two command-line applications; the first is included in the
*build* image and generates a build script by analyzing a codebase. The second
is included in *run* images and generates a startup script. Both are aliased
and accessible as `oryx` in their respective images.
### `oryx build`
When `oryx build` is run, the system detects which programming platforms appear
to be in use and applies toolsets appropriate for each one. You can override
the default choices through [configuration](./doc/configuration.md#oryx-configuration).
The `--output` (or `-o`) parameter specifies where prepared artifacts will be
placed; if not specified the source directory is used for output as well.
For all options, specify `oryx --help`.
### `oryx create-script -appPath`
When `oryx` is run in the runtime images it generates a start script named
run.sh, by default in the same folder as the compiled artifact.
## Support for Build Configuration File
You can provide some extra build related information in an appsvc.yaml in your content
root directory. The build configuration supports 2 sections
1. pre-build
2. post-build
This is how a sample appsvc.yaml looks like
```bash
version: 1
pre-build: |
apt install curl
post-build: |
python manage.py makemigrations
python manage.py migrate
```
Oryx will read the yaml and run the commands provided for pre-build and post-build.
## Build and run an app
To build and run an app from a repo, follow these approximate steps. An example
script follows.
2019-03-25 23:40:28 +03:00
1. Mount the repo as a volume in Oryx's `docker.io/oryxprod/build` container.
1. Run `oryx build ...` within the repo directory to build a runnable artifact.
1. Mount the output directory from build in an appropriate Oryx "run"
2019-03-25 23:40:28 +03:00
container, such as `docker.io/oryxprod/node-10.14`.
1. Run `oryx ...` within the "run" container to write a startup script.
2019-03-25 23:40:28 +03:00
1. Run the generated startup script, by default `/run.sh`.
```bash
# Run these from the root of the repo.
# build
docker run --volume $(pwd):/repo \
2020-12-10 20:18:25 +03:00
'mcr.microsoft.com/oryx/build:latest' \
2019-03-25 23:40:28 +03:00
oryx build /repo --output /repo
# run
2019-03-25 23:40:28 +03:00
# the -p/--publish and -e/--env flags specify and open a host port
docker run --detach --rm \
2019-03-25 23:40:28 +03:00
    --volume $(pwd):/app \
--env PORT=8080 \
--publish 8080:8080 \
2020-12-10 20:18:25 +03:00
'mcr.microsoft.com/oryx/node:10' \
    sh -c 'oryx create-script -appPath /app && /run.sh'
```
## Build Server Invocation
1. Build the Oryx solution
1. ![Build Solutionpng](doc/buildServer/buildSolution.png)
1. Create image with oryx and platform binaries
1. `time build/buildBuildImages.sh -t ltsversion`
1. Run docker to port map, volume mount a directory, specify the image with `oryx build`, and invoke BuildServer
1. ```bash
docker run -it -p 8086:80 \
-v C:\Repo\Oryx\tests\SampleApps\:/tmp/SampleApps \
-e "ASPNETCORE_URLS=http://+80" \
oryxdevmcr.azurecr.io/public/oryx/build:lts-versions \
/opt/buildscriptgen/BuildServer
```
![Start](doc/buildServer/start.png)
1. Invoke build
1. ![Post](doc/buildServer/post.png)
1. Under the hood `oryx build` is invoked
```bash
oryx build [sourcePath] \
--platform [platform] \
--platform-version [version] \
--output [outputPath] \
--log-file [logPath]
```
1. Check build status with id `1`
1. ![Status](doc/buildServer/status.png)
1. Check server healthcheck
1. ![Health Check](doc/buildServer/healthCheck.png)
# Components
Oryx consists of a build image, a collection of runtime images, a build script generator, and a collection of
startup script generators. For more details, refer to our [architecture](./doc/architecture.md) page.
Williamhe/1394597 add oryx run script 2 (#1331) * Add error handling for pip install command * Add option to handle warning of missing django module * Add warning message for missing Django module * Add more bash try/catches * Add new logging for .sh.tpl platform build files * Add LogError to python build snippet * Update LogError and LogWarning to be in BashBashBuildScript * Update to disable/enable flags * Update logging message * Update comment spacing * Add warnings for missing django files * Update all tabs to spaces * Remove scriptName from LogError and LogWarning * Update argument comparison * Update logger to be in a new file * Update with revert * Update with revert * Remove ls * Remove logger * Add ls * Add another ls * Update to copy logger.sh * Update logger parameter requirement logic * Add fix for https://github.com/microsoft/Oryx/issues/1073 * Add fix for https://github.com/microsoft/Oryx/issues/1073 unit test * Update loggerPath invocation * Update source filepath * Update to skip unit test * Update to remove logger path * Update dynamic install directory to /opt/ * Add initial golang code for oryx run-script command * Add another function for getting major.minor version for golang * Add regex to capture major.minor versions * Remove ftm temporarily to see if tests pass * Add oryx run-script for php * Add oryx run-script for ruby * Add hugo script generator * Add oryx run-script support for DotNet * Update to copy .csproj during oryx run-script * Update oryx setupEnv with oryx prep command * Update with minor changes * Update whitespacing * Update by re-enabling unit test * Update with unit test fixes * Update retry to only run on linux * Add documentation for testing startup script generator * Revert dynamic installation to be in /tmp/oryx/platforms * Add unit test file for golang * Add unit test file for hugo * Update to surpass cp, which prevents pipeline failures * Revert if statement and update variable name * Revert oryx prep to oryx setupEnv * Update add port listening to golang sample app * Add golang to build manifest * Remove golang dynamic installation * Update the binary executable name * Update to address style requirements * Update with minor refactoring * Update NodeLtsVersions node version to fix pipeline failure * Add full support for Node 14.19.1 * Update node runtime tag * Fix golang startupscriptgenerator error * Update the version of golang viper package * Revert VersionProvider changes * Add debug for oryx prep * Add debug for oryx prep * Update tabs with spaces * Remove unnecessary comments
2022-04-16 02:08:19 +03:00
# Testing Locally
## startup script generator
`build/testStartupScriptGenerators.sh` will perform tests on all startup script generators written in go.
The tests are copied into a docker image for performing `go test` on all platforms.
# Contributing
See [CONTRIBUTING.md](./CONTRIBUTING.md).
# License
MIT, see [LICENSE.md](./LICENSE.md).
# Security
Security issues and bugs should be reported privately, via email, to the
Microsoft Security Response Center (MSRC) at
[secure@microsoft.com](mailto:secure@microsoft.com). You should receive a
response within 24 hours. If for some reason you do not, please follow up via
email to ensure we received your original message. Further information,
including the [MSRC
PGP](https://technet.microsoft.com/en-us/security/dn606155) key, can be found
in the [Security
TechCenter](https://technet.microsoft.com/en-us/security/default).
# Trademark
This project may contain trademarks or logos for projects, products, or services.
Authorized use of Microsoft trademarks or logos is subject to and must follow
[Microsofts Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks).
Use of Microsoft trademarks or logos in modified versions of this project must not
cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks
or logos are subject to those third-partys policies.
# Data/Telemetry
When utilized within Azure services, this project collects usage data and
sends it to Microsoft to help improve our products and services. Read
[Microsoft's privacy statement][] to learn more.
[Microsoft's privacy statement]: http://go.microsoft.com/fwlink/?LinkId=521839
This project follows the [Microsoft Open Source Code of Conduct][coc]. For
more information see the [Code of Conduct FAQ][cocfaq]. Contact
[opencode@microsoft.com][cocmail] with questions and comments.
[coc]: https://opensource.microsoft.com/codeofconduct/
[cocfaq]: https://opensource.microsoft.com/codeofconduct/faq/
[cocmail]: mailto:opencode@microsoft.com
## Disable Data Collection
To prevent Oryx command line tools from collecting any data, set the environment variable
`ORYX_DISABLE_TELEMETRY` to `true`.