背景:我的项目和测试用例位于 gihub 存储库中。我在 GitHub 中创建了 test.yaml 文件,每当开发人员在主分支上创建推送或拉取请求时,该文件就会触发 GitHub Actions 中的工作流程。许多测试用例都通过了,但端到端场景除外,这些场景依赖于连接到 AWS 中托管的数据库。我被告知要在 AWS 中创建一个代码构建项目并将其与 GitHub 集成,以便在 AWS 中创建构建并在那里运行测试。 问题:问题是我所有的秘密和变量都列在 GitHub 秘密中。 buildspec.yaml 文件应该是什么样子?我不想在 AWS 秘密管理器中再次创建秘密。有没有办法导出它们或绕过此步骤?您能否就我的 buildspec.yaml 文件在 AWS 中的外观提供指导?
这是我当前在 GitHub 中的 test.yaml 工作流程文件。该项目位于 gradle 中。
name: Karate Test Workflow
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Java
uses: actions/setup-java@v1
with:
java-version: '17'
- name: Cache Gradle packages
uses: actions/cache@v2
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: ${{ runner.os }}-gradle
- name: Grant execute permission for gradlew
run: chmod +x karatetest/gradlew
- name: Build and run Karate tests
working-directory: ./karatetest
env:
KARATE_OPTIONS: ${{ vars.KARATE_OPTIONS }}
KARATE_ENV: ${{ vars.ENV }}
TEST_API_URL: ${{ secrets.APIURL }}
CONNECT_TIMEOUT: ${{ vars.CONNECT_TIMEOUT }}
READ_TIMEOUT: ${{ vars.KARATE_READTIMEOUT }}
RETRY_COUNT: ${{ vars.KARATE_RETRYCOUNT }}
RETRY_INTERVAL: ${{vars.RETRYINTERVAL }}
TEST_USERNAME: ${{ secrets.DATAINGEST_DB_USERNAME }}
TEST_PASSWORD: ${{ secrets.DATAINGEST_DB_PASSWORD }}
TEST_URL: ${{ secrets.DATAINGEST_SERVER_URL }}
TEST_DRIVER_CLASS_NAME: ${{ secrets.DRIVERCLASSNAME }}
TEST_BOOTSTRAP_SERVERS: ${{ secrets.KAFKA_SERVER }}
TEST_GROUP_ID: ${{ vars.GROUPID }}
TEST_API_USERNAME: ${{ secrets.API_USERNAME }}
TEST_API_PASSWORD: ${{ secrets.API_PASSWORD }}
TEST_NBS_URL: ${{ vars.NBS_URL }}
TEST_WRONGAPIURL: ${{ secrets.WRONGAPIURL }}
run: |
./gradlew test \
-Dkarate.options="$KARATE_OPTIONS" \
-Dkarate.env="$KARATE_ENV" \
-Dtest.apiurl="$TEST_API_URL" \
-DconnectTimeout="$CONNECT_TIMEOUT" \
-DreadTimeout="$READ_TIMEOUT" \
-DretryCount="$RETRY_COUNT" \
-DretryInterval="$RETRY_INTERVAL" \
-Dtest.username="$TEST_USERNAME" \
-Dtest.password="$TEST_PASSWORD" \
-Dtest.url="$TEST_URL" \
-Dtest.driverClassName="$TEST_DRIVER_CLASS_NAME" \
-Dtest.bootstrapServers="$TEST_BOOTSTRAP_SERVERS" \
-Dtest.groupId="$TEST_GROUP_ID" \
-Dtest.apiusername="$TEST_API_USERNAME" \
-Dtest.apipassword="$TEST_API_PASSWORD" \
-Dtest.nbsurl="$TEST_NBS_URL" \
-Dtest.wrongapiurl="$TEST_WRONGAPIURL"
- name: Upload Karate Test Report
uses: actions/upload-artifact@v2
if: always()
with:
name: karate-report
retention-days: 1
path: |
./karatetest/build/cucumber-html-reports/
./karatetest/build/karate-reports
一种方法可能是通过环境变量传递秘密。但是,我不推荐它,因为秘密将在 AWS 日志和环境变量下可见。 也就是说,您可以使用 GitHub 操作 AWS CodeBuild run build:
- name: Run in CodeBuild
uses: aws-actions/aws-codebuild-run-build@v1
with:
project-name: your-project-name
buildspec-override: path/to/buildspec.yml
hide-cloudwatch-logs: true # Disable stream to hide secrets.
env-vars-for-codebuild: first_secret,second_secret
env:
first_secret: ${{ secrets.first_secret }}
second_secret: ${{ secrets.second_secret }}
然后在
buildspec.yml
中,您可以输入 $first_secret
和 $second_secret
。或者,如果您使用 GitHub Action runner 和 ${{env.first_secret}}
、${{env.second_secret}}
。
更好的方法是在运行 CodeBuild 之前将您的机密推送到 AWS。在您的工作流程中,您可以运行以下命令:
aws secretsmanager create-secret --name your_secret_name --secret-string ${{secrets.MY_SECRET}}
记得配置 AWS 凭证。