如何在AWS Device Farm中为Appium测试获取AWS CodeArtifact私有包
在AWS Device Farm中解决Appium测试访问CodeArtifact私有NPM包的问题
针对你遇到的三个核心问题,以下是具体的解决方案,无需sudo权限,可直接在Device Farm环境中执行:
核心思路
- 无sudo安装AWS CLI v2到用户本地目录
- 利用Device Farm实例的IAM角色自动获取凭证,无需手动配置密钥
- 通过AWS CLI生成CodeArtifact的npm登录命令并执行
- 修改测试配置,直接从CodeArtifact拉取私有包,替代手动tgz安装
步骤1:无sudo安装AWS CLI v2
在测试配置的install阶段添加以下命令,将CLI安装到用户主目录的.local/bin(该目录默认在PATH中):
# 下载AWS CLI v2压缩包 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" # 静默解压到用户目录 unzip -q awscliv2.zip -d $HOME # 无sudo安装到.local目录 $HOME/aws/install -i $HOME/.local/aws-cli -b $HOME/.local/bin # 验证安装成功 aws --version
步骤2:配置CodeArtifact npm登录
在install阶段添加登录命令(替换占位符为你的实际信息):
# 生成并执行CodeArtifact npm登录命令 aws codeartifact login --tool npm --repository YOUR_REPO_NAME --domain YOUR_DOMAIN --domain-owner YOUR_ACCOUNT_ID --region YOUR_REGION
注意:需确保Device Farm测试项目关联的IAM角色拥有
codeartifact:GetAuthorizationToken和codeartifact:ReadFromRepository权限,无需手动输入Access Key。
步骤3:修改测试配置文件
更新后的完整配置如下,替换手动安装tgz的逻辑为直接从CodeArtifact拉取依赖:
version: 0.1 android_test_host: amazon_linux_2 phases: install: commands: - devicefarm-cli use node 20 - node --version - devicefarm-cli use appium 2 - appium --version - export APPIUM_BASE_PATH=/wd/hub - cd $DEVICEFARM_TEST_PACKAGE_PATH # 无sudo安装AWS CLI v2 - curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" - unzip -q awscliv2.zip -d $HOME - $HOME/aws/install -i $HOME/.local/aws-cli -b $HOME/.local/bin - aws --version # 登录CodeArtifact npm仓库 - aws codeartifact login --tool npm --repository YOUR_REPO_NAME --domain YOUR_DOMAIN --domain-owner YOUR_ACCOUNT_ID --region YOUR_REGION # 安装所有依赖(包括私有包) - npm install pre_test: commands: - |- appium --base-path=$APPIUM_BASE_PATH --log-timestamp \ --log-no-colors --relaxed-security --default-capabilities \ "{\"appium:deviceName\": \"$DEVICEFARM_DEVICE_NAME\", \ \"platformName\": \"$DEVICEFARM_DEVICE_PLATFORM_NAME\", \ \"appium:app\": \"$DEVICEFARM_APP_PATH\", \ \"appium:udid\":\"$DEVICEFARM_DEVICE_UDID\", \ \"appium:platformVersion\": \"$DEVICEFARM_DEVICE_OS_VERSION\", \ \"appium:chromedriverExecutableDir\": \"$DEVICEFARM_CHROMEDRIVER_EXECUTABLE_DIR\", \ \"appium:automationName\": \"CustomDriver\"}" \ >> $DEVICEFARM_LOG_DIR/appium.log 2>&1 & - |- appium_initialization_time=0; until curl --silent --fail "http://0.0.0.0:4723${APPIUM_BASE_PATH}/status"; do if [[ $appium_initialization_time -gt 30 ]]; then echo "Appium did not start within 30 seconds. Exiting..."; exit 1; fi; appium_initialization_time=$((appium_initialization_time + 1)); echo "Waiting for Appium to start on port 4723..."; sleep 1; done; test: commands: - cd $DEVICEFARM_TEST_PACKAGE_PATH/node_modules/tests/tests # 直接从CodeArtifact安装私有包 - npm install @your-scope/private-package --save - npm run remote:tests post_test: commands: - npm run generate-report - cp generated-report/index.html $DEVICEFARM_LOG_DIR artifacts: - $DEVICEFARM_LOG_DIR
关键注意事项
- 权限配置:必须确保Device Farm测试项目的IAM角色具备CodeArtifact的读取和授权令牌获取权限,否则登录会失败。
- 依赖声明:在package.json中正确声明私有包的依赖(如
"@your-scope/private-package": "^1.0.1"),npm install会自动从CodeArtifact拉取。 - 避免手动tgz:手动上传tgz容易引发依赖树不完整、权限验证失败等问题,通过CodeArtifact直接拉取是更可靠的方案。
内容的提问来源于stack exchange,提问作者rafaelasguerra
相关产品推荐
相关产品推荐

