2.2.2. 使用 CLI 创建应用程序
2.2.2.1. 从源代码创建应用程序
您可以使用 new-app
命令从本地或远程 Git 存储库中的源代码创建应用程序。
使用本地目录中的 Git 存储库创建应用程序:
$ oc new-app /path/to/source/code
如果使用本地 Git 存储库,该存储库应具有一个名为 origin 的远程源,指向 OpenShift Container Platform 集群可访问的 URL。如果没有 recognized remote,new-app
将创建一个 二进制构建。
使用远程 Git 存储库创建应用程序:
$ oc new-app https://github.com/sclorg/cakephp-ex
使用私有远程 Git 存储库创建应用程序:
$ oc new-app https://github.com/youruser/yourprivaterepo --source-secret=yoursecret
如果使用私有远程 Git 存储库,您可以使用 --source-secret
标志指定一个现有的 source clone secret,该 secret 将注入到 BuildConfig
中以访问存储库。
您可以通过指定 --context-dir
标志来使用源代码存储库的子目录。使用远程 Git 存储库和上下文子目录创建应用程序:
$ oc new-app https://github.com/sclorg/s2i-ruby-container.git \ --context-dir=2.0/test/puma-test-app
另外,在指定远程 URL 时,您可以通过在 URL 末尾附加 #<branch_name>
来指定要使用的 Git 分支:
$ oc new-app https://github.com/openshift/ruby-hello-world.git#beta4
new-app
命令将创建一个构建配置,它本身会从您的源代码中创建一个新的应用程序镜像。new-app
命令通常还会创建用于部署新镜像的部署配置,以及为运行您的镜像的部署提供负载均衡访问的服务。
OpenShift Container Platform 会自动 检测 是否应使用 Docker
、Pipeline
或 Source
构建策略,如果进行 Source
构建,则 检测相应的语言构建器镜像。
构建策略检测
在创建新应用程序时,如果源存储库的根目录或指定上下文目录中存在 Jenkinsfile,则 OpenShift Container Platform 会生成 Pipeline
构建策略。否则,如果找到 Dockerfile,OpenShift Container Platform 会生成 Docker
构建策略。否则,它会生成 Source
构建策略。
您可以通过将 --strategy
标志设置为 docker
、pipeline
或 source
来覆盖构建策略。
$ oc new-app /home/user/code/myapp --strategy=docker
oc
命令要求包含构建源的文件在远程 Git 存储库中可用。对于所有 Source 构建,您必须使用 git remote -v
。
语言检测
如果使用 Source
构建策略,new-app
会尝试根据存储库根目录或指定上下文目录中是否存在特定文件来确定要使用的语言构建器:
语言 | 文件 |
---|---|
| project.json, *.csproj |
| pom.xml |
| app.json, package.json |
| cpanfile, index.pl |
| composer.json, index.php |
| requirements.txt, setup.py |
| Gemfile, Rakefile, config.ru |
| build.sbt |
| Godeps, main.go |
检测了语言后,new-app
会在 OpenShift Container Platform 服务器上搜索具有与所检测语言匹配的支持
注解的镜像流标签,或与所检测语言名称匹配 的镜像流。如果找不到匹配项,new-app
会在 Docker Hub registry 中搜索名称上与所检测语言匹配的镜像。
您可以通过指定镜像(镜像流或容器规格)和存储库(以 ~
作为分隔符),来覆盖构建器用于特定源存储库的镜像。请注意,如果这样做,不会执行 构建策略检测和语言检测。
例如,将 myproject/my-ruby 镜像流与远程存储库中的源一起使用:
$ oc new-app myproject/my-ruby~https://github.com/openshift/ruby-hello-world.git
使用 openshift/ruby-20-centos7:latest 容器镜像流以及本地仓库中的源:
$ oc new-app openshift/ruby-20-centos7:latest~/home/user/code/my-ruby-app