Oryx/README.md

205 строки
7.8 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
The App Service YAML file (`appsvc.yaml`) is used to specify the build and run commands for your Web Apps, thus
overriding any defaults provided by the App Service Build Service. App Service expects this file to be in the root
directory of your project.
### Format
There are ordered keys for `pre-build`, `post-build`, and `run`. The commands/scripts referenced by these keys are
executed in-order. If a key is missing, it will be skipped and the next key will be processed. An optional `version` key
specifies the version of the `appsvc.yaml` file, if new versions are introduced in the future.
```yaml
version: 1
pre-build: apt-get install jq
post-build: |
python manage.py makemigrations
python manage.py migrate
run: gunicorn myapp.app --workers 5
```
## 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.
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
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`.