将 GitHub 与 AWS 代码构建集成,以便在 AWS 构建中触发并执行我的测试用例

问题描述 投票:0回答:1

背景:我的项目和测试用例位于 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
amazon-web-services github amazon-ec2 github-actions aws-codebuild
1个回答
0
投票

一种方法可能是通过环境变量传递秘密。但是,我不推荐它,因为秘密将在 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 凭证

© www.soinside.com 2019 - 2024. All rights reserved.