开发设置¶
项目仓库¶
- 创建您自己的仓库分支
- 将其克隆到您的项目文件夹
注意
建议将所有 git 检出放在同一个目录中。这使得从源代码包含其他项目变得更容易。
galaxy/
├── ansible-hub-ui/
├── galaxy-importer/
├── galaxy_ng/
└── pulp_ansible/
cd your/preferred/projects/folder
git clone git@github.com:<YOUR_USER_NAME>/galaxy_ng.git
配置您的本地代码编辑器¶
将您的工作目录设置为 Galaxy 文件夹
cd galaxy_ng
您可以使用您选择的编辑器,如果您想让编辑器(例如:VsCode)为您检查代码,您可能需要创建一个虚拟环境并安装软件包。
python -m venv .venv
source .venv/bin/activate
python -m pip install -r dev_requirements.txt
python -m pip install -r doc_requirements.txt
python -m pip install -r integration_requirements.txt
python -m pip install -e .
现在您可以例如打开code .
,让 VsCode 找到您需要的库。
运行基于容器的开发环境¶
我们的容器化开发环境配置从.compose.env
脚本加载。您需要先配置它,最简单的方法是复制一个示例脚本.compose.env.example
cp .compose.env.example .compose.env
所有本地项目设置都可以在.compose.env
文件中设置。
启用 UI(可选)¶
如果您想使用 UI 进行开发,只需执行以下操作
-
将https://github.com/ansible/ansible-hub-ui克隆到
galaxy_ng
所在相同路径。cd your/preferred/projects/folder git clone https://github.com/ansible/ansible-hub-ui cd galaxy_ng
-
在您的
.compose.env
文件中设置ANSIBLE_HUB_UI_PATH
指向克隆的 UI 仓库的位置。不需要绝对路径,但它们更容易设置。如果您想使用相对路径,它必须相对于dev/docker-compose.yml
ANSIBLE_HUB_UI_PATH='/your/preferred/projects/folder/ansible-hub-ui'
-
完成下一节中的其余步骤。一旦一切都运行起来,UI 就可以在http://localhost:8002访问。
运行构建步骤¶
接下来,运行以下步骤以构建您的本地开发环境
-
构建 Docker 镜像
make docker/build
-
初始化和迁移数据库
make docker/migrate
-
加载开发数据
make docker/loaddata make docker/loadtoken
小贴士
您可以一次运行所有操作
make docker/build docker/migrate docker/loaddata docker/loadtoken
启动服务¶
在前台保持终端打开以查看输出
./compose up
在后台(您可以在以后关闭终端)
./compose up -d
默认情况下,开发环境配置为在洞察模式下运行,这需要一个第三方身份验证提供商。如果您在 Red Hat 云平台之外工作,您需要通过修改您的.compose.env
文件并设置COMPOSE_PROFILE
变量为standalone
来将其切换到独立模式,如以下示例所示
COMPOSE_PROFILE=standalone
如果您想在使用 Keycloak 提供单点登录时使用预填充的 LDAP 服务器 <https://github.com/rroemhild/docker-test-openldap>
_ 在独立模式下运行,您需要通过修改您的.compose.env
文件并设置COMPOSE_PROFILE
变量为standalone-keycloak
来将其切换到standalone-keycloak模式,如以下示例所示
COMPOSE_PROFILE=standalone-keycloak
其他开发模式¶
洞察¶
“洞察”模式是指以在 console.redhat.com 上运行的方式运行 Galaxy NG。
注意
此选项仅与 Red Hat 员工相关。社区贡献者应跳过此选项。
- 在您的
.compose.env
文件中设置COMPOSE_PROFILE=insights
并注释掉ANSIBLE_HUB_UI_PATH
(如果已设置)。 - 安装节点。已知节点 v18+ 可以工作。旧版本也可能可以工作。
-
切换到您的
ansible-hub-ui
检出并运行以下命令npm install npm run start
应用程序将在http://localhost:8002/beta/ansible/automation-hub上运行,并将/api/automation-hub
的代理请求发送到http://localhost:5001
上的 API。
Keycloak¶
Keycloak 模式通过 Docker 启动 LDAP 和 Keycloak 服务器,并配置应用程序使用 Keycloak 进行身份验证。
要在 Keycloak 模式下运行,请在您的.compose.env
中设置COMPOSE_PROFILE=standalone-keycloak
。您需要在运行迁移并启动其余服务之前初始化您的 Keycloak 实例。
-
启动 Keycloak 实例及其依赖项
./compose up -d keycloak kc-postgres ldap
-
使用 Realm 和 Client 引导 Keycloak 实例,然后捕获所需的公钥
ansible-playbook ./dev/standalone-keycloak/keycloak-playbook.yaml
注意 如果第一次运行失败,请重试,服务可能尚未可用。
-
使用在剧本运行结束时找到的公钥更新您的
.compose.env
文件PULP_SOCIAL_AUTH_KEYCLOAK_PUBLIC_KEY="keycloak-public-key"
在完成标准的开发设置步骤后,当您访问http://localhost:8002时,它将重定向到 Keycloak Open ID Connect 流程登录页面,您可以在其中使用其中一个开发 SSO 用户的凭据登录(密码是用户名)。如果您想使用非 Keycloak 用户登录,您需要使用Django 管理控制台 <http://localhost:5001/automation-hub/admin/>
_。
如果您想以超级用户身份登录,您可以执行以下两种操作之一
-
使用管理员用户登录
Django 管理控制台 <http://localhost:5001/automation-hub/admin/>
_ -
使用 admin/admin 登录
Keycloak 实例 <http://localhost:8080/>
_ 以编辑 LDAP 用户的角色:选择一个开发 SSO 用户,选择角色映射 > 客户端角色 > automation-hub 并添加hubadmin
角色。用户使用 user_group 管道与相应的组相关联。
运行 API 测试¶
可以使用 Docker Compose 轻松运行单元测试和集成测试。目前,没有简单的方法可以使用 Docker 运行 pulp 功能测试。
有关测试的更多信息,请参阅编写测试。
单元测试¶
运行所有单元测试
make docker/test/unit
运行特定测试用例
make docker/test/unit TEST=.api.test_api_ui_sync_config
集成测试¶
集成测试可以从主机或通过 Docker 容器运行。在运行任一操作之前,必须执行以下步骤
- 在您的
.compose.env
中设置PULP_GALAXY_REQUIRE_CONTENT_APPROVAL=true
。 - 运行
make docker/loadtoken make docker/load_test_data
通过 Docker¶
注意
需要 Docker 或 Podman 的测试将不会在 Docker 内部运行,并将被跳过。如果您需要编写容器测试,请通过主机运行集成测试。
运行所有集成测试
make docker/test/integration/container
任何一组 pytest 标志都可以传递到此命令
# run any test who's name matches my_test
make docker/test/integration/container FLAGS="-k my_test"
# run tests marked as galaxyapi_smoke
make docker/test/integration/container FLAGS="-m galaxyapi_smoke"
通过主机¶
警告
这要求您 Shell 中的python
可执行文件为 python 3,并且可能不适用于 Mac OS 等系统,在这些系统上python
指的是python2
。这也要求您的机器上安装了virtualenv
。
运行所有集成测试
make docker/test/integration
使用特定标记运行集成测试
make docker/test/integration MARK=galaxyapi_smoke
测试数据¶
将容器镜像推送到本地注册表
信息
make api/push-test-images
要将镜像推送到 Galaxy NG 托管的容器镜像注册表(通过 pulp_container),您需要先标记镜像,以告诉 Docker 或 Podman 您想将镜像与注册表关联。在本地开发设置中,pulp_container 与 Galaxy API 同时在端口 5001 上运行。
像这样标记一个镜像
docker image tag <IMAGE_ID> localhost:5001/<NAME>:<VERSION>
或者,与命名空间关联
docker image tag <IMAGE_ID> localhost:5001/<NAMESPACE>/<NAME>:<VERSION>
然后将镜像推送到引擎,引擎会将其上传到现已关联的注册表
docker push localhost:5001/testflat
创建一组用于测试的集合
信息
make api/create-test-collections
其他依赖项¶
在运行 Docker 环境时,项目的父目录被挂载到容器中,作为/app
。在DEV_SOURCE_PATH
环境变量中列出的所有项目都以可编辑模式(pip install -e
)安装在容器中。要从主机文件系统加载其他项目,例如galaxy-importer
或pulp_ansible
到容器中,您应该将它们克隆到相对于您的galaxy_ng
工作副本位置的父目录中。
例如,您想在galaxy-importer
项目上工作,并使用您在本地做出的更改来运行开发环境。
-
将
galaxy-importer
克隆到父目录:cd your/preferred/projects/folder git clone https://github.com/ansible/galaxy-importer cd galaxy_ng
-
将
galaxy-importer
添加到您.compose.env
文件中的DEV_SOURCE_PATH
变量:export DEV_SOURCE_PATH='galaxy_ng:galaxy-importer'
-
重新创建您的开发环境:
./compose down make docker/build docker/migrate ./compose up
小贴士
以上步骤可以用于其他 Pulp 插件,例如pulp_ansible
或pulp_container
使用特定上游分支运行开发环境的步骤¶
-
克隆本地
galaxy_ng
、pulpcore
和pulp_ansible
,所有仓库必须位于同一目录级别。cd ~/projects/ git clone https://github.com/pulp/pulpcore git clone https://github.com/pulp/pulp_ansible git clone https://github.com/ansible/galaxy_ng # and optionally git clone https://github.com/ansible/ansible-hub-ui git clone https://github.com/ansible/galaxy_importer
-
检出到所需分支。
pulp_ansible
的 main 分支与特定范围的pulpcore
版本兼容。因此,建议根据 pulp_ansible/requirements.txt 中定义的约束检出到特定分支或标签,或者如果您知道它与您拥有的 pulp_ansible 分支兼容,则将其检出到 main 分支。示例cd ~/projects/pulpcore git checkout 3.9.0
也可以通过其
refs/pull/id
检出到特定拉取请求。 -
编辑
galaxy_ng/.compose.env
文件。cd ~/projects/galaxy_ng cat .compose.env COMPOSE_PROFILE=standalone DEV_SOURCE_PATH='pulpcore:pulp_ansible:galaxy_ng' LOCK_REQUIREMENTS=0
DEV_SOURCE_PATH 指向您本地克隆的仓库,顺序很重要,从最高到最低依赖关系,否则 pip 会引发版本冲突。
因此 pulpcore 是 pulp_ansible 的依赖关系,而 pulp_ansible 是 galaxy_ng 的依赖关系,必须在 DEV_SOURCE_PATH 变量中遵守此顺序。
LOCK_REQUIREMENTS 当设置为 0 时,它告诉 docker 跳过固定需求的安装,仅依赖于每个仓库
setup.py
中定义的包。 -
运行
./compose build
使这些更改生效。 -
运行所需的 compose 命令:
./compose up
、./compose run
等。
更新版本¶
现在,'版本' 的真实来源位于 setup.cfg 中的 bumpversion
节。
[bumpversion]
current_version = 4.3.0.dev
要更新版本,建议“更新”版本,而不是显式指定它。
使用 bump2version 来递增 '版本' 字符串,无论它在哪里需要。
它可以“更新”'补丁'、'次要'、'主要' 版本组件。
Makefile 中也有用于更新版本的 target。例如,要执行 '补丁' 版本更新
$ make dev/bumpversion-patch
上面的命令将更新 '补丁' 级别并更新所有使用它的文件。
注意:目前,bump2version 配置不会提交或标记更改。因此,更新版本后,您需要手动提交更改并标记。
$ git commit -v -a
$ git tag $NEWVERSION
如果我们想启用它,bump2version 也可以自动执行此操作。
调试¶
https://github.com/ansible/galaxy_ng/wiki/Debugging-with-PDB
将 galaxy-importer.cfg 添加到开发环境¶
要设置您自己的 galaxy-importer.cfg,请将类似以下内容添加到 /dev/Dockerfile.base
RUN mkdir /etc/galaxy-importer \
&& printf "[galaxy-importer]\n \
REQUIRE_V1_OR_GREATER = True\n \
LOG_LEVEL_MAIN = INFO\n" | tee /etc/galaxy-importer/galaxy-importer.cfg