チームスピリットデベロッパーブログ

チームスピリット開発者のブログ

Jenkins と Autify を連携させた話

こんにちは。TSFエンジニアリングチームの小松原です。

TeamSpirit では、スモークテストをAutifyでテストしています。

今回は、開発の最新資材をJenkinsでデプロイしてAutifyで動かす仕組み作りを自分が担当したのでご紹介します。

事前準備

Autify のアクセストークン を取得しておきます。

Jenkins Job の設定

大まかな流れは以下のようにJekins Job を設定して動かしています。

Jenkis Job 設定イメージ

  1. Jenkins でデプロイしたい Git ブランチを Pull します。
  2. Pull した資材をテスト環境にデプロイします。
  3. 以下の Autify との 連携Shell で Autify API を叩き、完了までポーリングします。

Autify との 連携Shell について

この Shell を動かすに必要なパラメーターは以下の通りです。

# Resutl HTML Template
function getTestResultToHtml(){

mkdir -p "${WORKSPACE}"/test_result

cat <<EOF > "${WORKSPACE}"/test_result/index.html 
    <!DOCTYPE html>
    <html lang="ja">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Autify Test $2 Result</title>
      </head>
      <body>
        <div class="description">
          <h2><a href=$1>Autify Test $2 Result</a></h2>
          <dl>
            <dt>Status</dt><dd>$3</dd>
            <dt>Review needed</dt><dd>$4</dd>
            <dt>Finished</dt><dd>$5</dd>
          </dl>
        </div>
        <div>
          <h2>Raw Test Result</h2>
          <pre><code>$6</code></pre>
        </div>
      </body>
    </html>
EOF
}


# Run a test plan on Autify
execute_response=$(\
  curl -XPOST -H "Authorization: Bearer ${AUTIFY_API_ACCESS_TOKEN}" \
  https://app.autify.com/api/v1/schedules/${AUTIFY_TEST_PLAN_ID} \
)

# Get test plan result ID to get a URL
test_plan_result_id=$(echo ${execute_response} | jq -r .data.id) 

# Build a result URL
test_plan_result_url="https://app.autify.com/projects/${AUTIFY_PROJECT_ID}/results/${test_plan_result_id}"
echo ${test_plan_result_url}

# Test Result Status Response Polling
while true
do
  test_result=$(\
    curl -X 'GET' \
       "https://app.autify.com/api/v1/projects/${AUTIFY_PROJECT_ID}/results/${test_plan_result_id}" \
       -H 'accept: application/json' \
       -H "Authorization: Bearer ${AUTIFY_API_ACCESS_TOKEN}"\
  )
  
  result_status=$(echo ${test_result} | jq -r .status)
  
  printf "progress status : ${result_status}"
  
  # Check Test Status
  if [ "$result_status" = "passed" ] || [ "$result_status" = "failed" ] || [ "$result_status" = "skipped" ] || [ "$result_status" = "canceled" ]; then
    # End Test
    printf "end polling status : ${result_status}\n"
    printf "$(echo ${test_result} | jq -r .)"
    
    getTestResultToHtml ${test_plan_result_url} $(echo ${test_result} | jq -r .id) ${result_status} $(echo ${test_result} | jq -r .review_needed) $(echo ${test_result} | jq -r .finished_at) "$(echo ${test_result} | jq -r .)"
    break;
  fi
  
  sleep ${POLLING_INTERVAL};
done

ビルド成果物

上記のShellの実行結果は以下のようなイメージで出力されます(一部加工しています)。

感想

Autify APIを試せるページがあるので、実装時に助かりました。 あとは、Autify のデータ機能を外部から柔軟に置換できたらと感じました。

苦労した箇所は、Shell スクリプトの if の条件文の箇所です。[ 条件文 ] のように [ の後に半角スペースが必要なことに気づかず苦労しました。

今後の展望

将来的に Autify CLI と Jenkins の連携とあるので、リリースされたら試してみたいです。