コンテンツにスキップ

TravisCI との統合

travisci-logo

このガイドでは、プッシュのたびに Mayhem が自動的にコードをテストできるよう TravisCI パイプラインをセットアップする方法を説明します。

TravisCI パイプラインで Mayhem を実行するには、以下が必要です

  1. Mayhem API トークン を作成します。
  2. 作成したトークンを MAYHEM_TOKEN という名前の「シークレット変数」としてパイプランの変数に追加します。

TravisCI と Mayhem を連携するためのパイプライン構成

TravisCI パイプラインを構成してコードをテストするには、.travis.yml ファイルを作成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
services:
  - docker

stages:
  - build

jobs:
  include:
    - stage: build
      name: "Build Job"
      script:
        # Build and push Docker image to registry
        - docker login ghcr.io -u $GITHUB_USERNAME -p $GITHUB_TOKEN
        - docker build -f Dockerfile -t ghcr.io/$REPO_SLUG:$TRAVIS_BRANCH .
        - docker push ghcr.io/$REPO_SLUG:$TRAVIS_BRANCH

env:
  global:
    # Set <username>/<repo> to lowercase
    - REPO_SLUG=$(echo "$TRAVIS_REPO_SLUG" | tr '[:upper:]' '[:lower:]')
  jobs:
    # Specify one or more Mayhemfiles for testing
    - MAYHEMFILE=mayhem/Mayhemfile.lighttpd
    - MAYHEMFILE=mayhem/Mayhemfile.mayhemit

script:
  # Download Mayhem CLI and log in to Mayhem server
  - curl -Lo ~/bin/mayhem ${MAYHEM_URL}/cli/Linux/mayhem && chmod +x ~/bin/mayhem
  - mayhem login $MAYHEM_URL $MAYHEM_TOKEN
  # Execute Mayhem run and fail if no run was executed
  - run=$(mayhem --verbosity info run . --project $REPO_SLUG --owner $GITHUB_USERNAME --image ghcr.io/$REPO_SLUG:$TRAVIS_BRANCH --file ${MAYHEMFILE} --duration 60 --branch-name $TRAVIS_BRANCH --revision $TRAVIS_COMMIT --ci-url https://app.travis-ci.com/github/$TRAVIS_REPO_SLUG/jobs/$TRAVIS_JOB_ID 2>/dev/null);
  - if [ -z "${run}" ]; then exit 1; fi
  # Otherwise, determine run name and wait for job to complete
  - runName=$(echo ${run} | awk -F / '{ print $(NF-1) }');
  - travis_wait 30 mayhem --verbosity info wait $run --owner $GITHUB_USERNAME --sarif sarif-${runName}.sarif --junit junit-${runName}.xml;
  - status=$(mayhem --verbosity info show --owner $GITHUB_USERNAME --format json $run | jq '.[0].status')
  - if [[ ${status} == *"stopped"* || ${status} == *"failed"* ]]; then exit 2; fi
  # Fail if defects were found
  - defects=$(mayhem --verbosity info show --owner $GITHUB_USERNAME --format json ${run} | jq '.[0].defects|tonumber')
  - if [[ ${defects} -gt 0 ]]; then echo "${defects} defects found!"; exit 3; fi

Mayhem と TravisCI の統合

Mayhem と TravisCI を適切に統合するのに必要な .travis.yml ファイルについて説明したので、次は、動作するサンプルを確認します。

Info

このサンプルでは、mcode-action-examples にあるアセットをフォークし、ターゲットの TravisCI パイプラインに Mayhem を統合しています。

github-repo

TravisCI で構成を動作させるには、まず、シークレット変数を設定する必要があります。このサンプルでは、次のパイプライン変数が設定されています。

  1. MAYHEM_TOKEN: ユーザー生成の Mayhem API トークンです。
  2. MAYHEM_URL: Mayhem サーバーの URL です。https://app.mayhem.security を設定します。
  3. GITHUB_USERNAME: GitHub ユーザー名です。
  4. GITHUB_TOKEN: GitHub アクセス トークンです。

secret-variables

さらに、上記の .travis.yml 構成では、Docker イメージをビルドして GitHub Container Registry にプッシュします。そのため、プロジェクトの可視性が Public に設定されていることを確認し、Mayhem が GitHub Container Registry からリポジトリの Docker イメージをプルできるようにします。

repo-visibility

上記の手順を完了すると、パイプラインを実行して Mayhem でターゲットをテストすることができるようになります。

successful-pipeline