
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Cycle CLI容器化版本是将Cycle命令行界面(CLI)打包为容器的解决方案。传统上,Cycle CLI与Cycle测试自动化软件安装程序一起分发,而容器化版本增强了灵活性,允许用户不仅在本地环境,更重要的是在CI/CD流水线中执行Cycle测试,无需专用Windows虚拟机代理,同时兼容Linux架构。尽管在容器中可执行的测试类型存在一定限制,但它为许多客户提供了可行的替代方案。
cycle-cli所需的所有依赖,可在任何支持容器运行时的环境(如Azure DevOps、GitLab、GitHub Actions的托管代理/运行器)中运行,无需对执行系统进行额外配置。token或client-id/client-credential(推荐)进行Cycle认证,详情参见Cycle OAuth2认证文档。容器需要访问本地Cycle项目文件(如.cycproj、.feature文件),通过-v参数将主机目录挂载到容器内的/code目录。
基本语法
bashdocker run -v "$(pwd):/code"
说明
$(pwd):主机当前工作目录(Cycle项目所在目录)。/code:容器内的目标目录,项目文件将映射到此处,容器可访问其中的.cycproj、config/secrets.conf及/combined文件夹等。通过--env参数将主机环境变量传递到容器,至少需传递Cycle认证所需的DOCKERIZED_CYCLE_APP_ID和DOCKERIZED_CYCLE_APP_SECRET。
基本语法
bashdocker pull cyclelabs/cycle-cli:latest docker run --rm \ --env DOCKERIZED_CYCLE_APP_ID="${DOCKERIZED_CYCLE_APP_ID}" \ --env DOCKERIZED_CYCLE_APP_SECRET="${DOCKERIZED_CYCLE_APP_SECRET}" \ cyclelabs/cycle-cli:latest \ --clientid "${DOCKERIZED_CYCLE_APP_ID}" \ --client-credential "${DOCKERIZED_CYCLE_APP_SECRET}" \ -p /code combined/api-test.feature
关键环境变量
| 环境变量 | 说明 |
|---|---|
DOCKERIZED_CYCLE_APP_ID | Cycle应用的AppID |
DOCKERIZED_CYCLE_APP_SECRET | Cycle应用的密钥 |
配置文件(.conf)用于安全映射秘密值,避免明文暴露,使cycle-cli可在测试中使用这些值。
1. .conf文件与Cycle变量映射
在Cycle测试的.feature文件中,通过Background步骤从.conf文件加载变量:
gherkinBackground: If I verify file "combined/local.conf" exists Then I assign values from config file "combined/local.conf" to variables Else I assign values from config file "combined/secrets.conf" to variables EndIf
2. .conf文件示例(secrets.conf)
将环境变量映射为Cycle变量:
inipw_oracle_db=${PW_ORACLE_DB} pw_sql_db=${PW_SQL_DB} pw_db2=${PW_DB2} pw_mysql=${PW_MYSQL} pw_openssh=${PW_OPENSSH}
3. 在.feature文件中使用变量
引用上述配置的变量(如$pw_openssh):
gherkinScenario: OpenSSH/Linux - Cycle CI When I open terminal with SSH encryption connected to "openssh.ci.cyclelabs.io:22" logged in as "cycl-ci" $pw_openssh sized to 25 lines and 80 columns Then I see "~]$" on last line in terminal within 15 seconds And I close terminal
4. 变量黑名单(VariableBlacklist)
为防止秘密值在Cycle报告中明文显示,需在.cycproj文件中配置VariableBlacklist:
json"VariableBlackList": ["pw_azuresql", "pw_db2", "pw_moca", "pw_mysql", "pw_oracle_db", "pw_openssh"]
使用docker-compose.yml可简化多容器协调(如Cycle CLI容器与Selenium Chrome容器)和环境配置。
示例:Chrome浏览器测试的docker-compose.yml
yamlservices: cycle-browser-test-chrome: image: "cyclelabs/cycle-cli:latest" shm_size: 2g volumes: - .:/code # 挂载当前目录到容器/code depends_on: - "chrome" # 依赖Chrome容器启动 environment: DOCKERIZED_CYCLE_APP_ID: ${DOCKERIZED_CYCLE_APP_ID} DOCKERIZED_CYCLE_APP_SECRET: ${DOCKERIZED_CYCLE_APP_SECRET} PW_OPENSSH: ${PW_OPENSSH} # 其他秘密环境变量 command: ["--clientid", "${DOCKERIZED_CYCLE_APP_ID}", "--client-credential", "${DOCKERIZED_CYCLE_APP_SECRET}", "-p", "/code", "combined/grocerio-browser-test-chrome.feature"] chrome: image: "selenium/standalone-chrome" environment: - CHROME_OPTS=--no-sandbox --disable-dev-shm-usage --headless volumes: - /dev/shm:/dev/shm ports: - "4444:4444" hostname: chrome privileged: true shm_size: 2g
说明
depends_on:确保chrome容器先启动,Cycle测试才能连接Chrome浏览器。shm_size:设置共享内存大小,避免浏览器运行时内存不足。command:指定Cycle CLI执行命令,包括认证参数和测试特征文件路径。在Jenkins流水线中,通过Jenkinsfile配置多阶段测试,使用Docker Compose执行不同类型的Cycle测试。
Jenkinsfile片段
groovystage('Run Cycle Browser Test - Chrome') { steps { catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { sh "docker compose -f chrome-test-docker-compose.yml up --attach cycle-browser-test-chrome --abort-on-container-exit" sh "docker compose -f chrome-test-docker-compose.yml down" } } }
秘密管理
Jenkins中通过"Manage Jenkins → Manage Credentials"存储秘密,在流水线中引用:
groovyenvironment { DOCKERIZED_CYCLE_APP_ID = credentials('cycle-app-id') DOCKERIZED_CYCLE_APP_SECRET = credentials('cycle-app-secret') }
在GitHub Actions中,通过secrets存储秘密,在工作流文件中映射为环境变量。
.github/workflows/cycle-test.yml片段
yamljobs: cycle-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run Cycle test with Docker Compose env: DOCKERIZED_CYCLE_APP_ID: ${{ secrets.DOCKERIZED_CYCLE_APP_ID }} DOCKERIZED_CYCLE_APP_SECRET: ${{ secrets.DOCKERIZED_CYCLE_APP_SECRET }} run: | docker compose -f chrome-test-docker-compose.yml up --attach cycle-browser-test-chrome --abort-on-container-exit
Windows(命令提示符)
cmdset DOCKERIZED_CYCLE_APP_ID=your-app-id set DOCKERIZED_CYCLE_APP_SECRET=your-app-secret
Windows(PowerShell)
powershell$env:DOCKERIZED_CYCLE_APP_ID="your-app-id" $env:DOCKERIZED_CYCLE_APP_SECRET="your-app-secret"
Mac/Linux(终端)
bashexport DOCKERIZED_CYCLE_APP_ID="your-app-id" export DOCKERIZED_CYCLE_APP_SECRET="your-app-secret"
bashdocker pull cyclelabs/cycle-cli:latest docker run --rm \ --shm-size=2g \ -v "$(pwd):/code" \ --env DOCKERIZED_CYCLE_APP_ID="${DOCKERIZED_CYCLE_APP_ID}" \ --env DOCKERIZED_CYCLE_APP_SECRET="${DOCKERIZED_CYCLE_APP_SECRET}" \ cyclelabs/cycle-cli:latest \ --clientid "${DOCKERIZED_CYCLE_APP_ID}" \ --client-credential "${DOCKERIZED_CYCLE_APP_SECRET}" \ -p /code combined/api-test.feature
在包含docker-compose.yml的目录中运行:
bashdocker compose up
执行完成后停止并移除容器:
bashdocker compose down
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务