跳至内容

开发设置

项目仓库

  1. 创建您自己的仓库分支
  2. 将其克隆到您的项目文件夹

注意

建议将所有 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 进行开发,只需执行以下操作

  1. 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
    

  2. 在您的.compose.env文件中设置ANSIBLE_HUB_UI_PATH指向克隆的 UI 仓库的位置。不需要绝对路径,但它们更容易设置。如果您想使用相对路径,它必须相对于dev/docker-compose.yml

    ANSIBLE_HUB_UI_PATH='/your/preferred/projects/folder/ansible-hub-ui'
    
  3. 完成下一节中的其余步骤。一旦一切都运行起来,UI 就可以在http://localhost:8002访问。

运行构建步骤

接下来,运行以下步骤以构建您的本地开发环境

  1. 构建 Docker 镜像

    make docker/build
    
  2. 初始化和迁移数据库

    make docker/migrate
    
  3. 加载开发数据

    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 员工相关。社区贡献者应跳过此选项。

  1. 在您的.compose.env文件中设置COMPOSE_PROFILE=insights并注释掉ANSIBLE_HUB_UI_PATH(如果已设置)。
  2. 安装节点。已知节点 v18+ 可以工作。旧版本也可能可以工作。
  3. 切换到您的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 实例。

  1. 启动 Keycloak 实例及其依赖项

    ./compose up -d keycloak kc-postgres ldap
    
  2. 使用 Realm 和 Client 引导 Keycloak 实例,然后捕获所需的公钥

    ansible-playbook ./dev/standalone-keycloak/keycloak-playbook.yaml
    

    注意 如果第一次运行失败,请重试,服务可能尚未可用。

  3. 使用在剧本运行结束时找到的公钥更新您的.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/>_。

如果您想以超级用户身份登录,您可以执行以下两种操作之一

  1. 使用管理员用户登录Django 管理控制台 <http://localhost:5001/automation-hub/admin/>_

  2. 使用 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-importerpulp_ansible到容器中,您应该将它们克隆到相对于您的galaxy_ng工作副本位置的父目录中。

例如,您想在galaxy-importer项目上工作,并使用您在本地做出的更改来运行开发环境。

  1. galaxy-importer克隆到父目录:

    cd your/preferred/projects/folder
    git clone https://github.com/ansible/galaxy-importer
    cd galaxy_ng
    
  2. galaxy-importer添加到您.compose.env文件中的DEV_SOURCE_PATH变量:

    export DEV_SOURCE_PATH='galaxy_ng:galaxy-importer'
    
  3. 重新创建您的开发环境:

    ./compose down 
    make docker/build docker/migrate
    ./compose up
    

小贴士

以上步骤可以用于其他 Pulp 插件,例如pulp_ansiblepulp_container

使用特定上游分支运行开发环境的步骤

  1. 克隆本地galaxy_ngpulpcorepulp_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
    
  2. 检出到所需分支。pulp_ansible 的 main 分支与特定范围的 pulpcore 版本兼容。因此,建议根据 pulp_ansible/requirements.txt 中定义的约束检出到特定分支或标签,或者如果您知道它与您拥有的 pulp_ansible 分支兼容,则将其检出到 main 分支。示例

    cd ~/projects/pulpcore
    git checkout 3.9.0
    

    也可以通过其 refs/pull/id 检出到特定拉取请求。

  3. 编辑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 会引发版本冲突。

    因此 pulpcorepulp_ansible 的依赖关系,而 pulp_ansiblegalaxy_ng 的依赖关系,必须在 DEV_SOURCE_PATH 变量中遵守此顺序。

    LOCK_REQUIREMENTS 当设置为 0 时,它告诉 docker 跳过固定需求的安装,仅依赖于每个仓库 setup.py 中定义的包。

  4. 运行 ./compose build 使这些更改生效。

  5. 运行所需的 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