プラグインのインストール
- こちらの手順のとおりやってみる
Mavenのインストール
- yumでインストールする手順
- yumを使わない方法で参考にした手順
- ~/.bashrcに以下を追加
- Javaのパスをご確認の上、設定してください
JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.45.x86_64/jre
- proxy環境では以下のファイルを配置する(以下は記述例)
- 詳しくはこちら
~/.m2/settings.xml
<settings>
.
.
<proxies>
<proxy>
<id>example-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.example.com</host>
<port>8080</port>
<username>proxyuser</username>
<password>somepassword</password>
<nonProxyHosts>www.google.com|*.example.com</nonProxyHosts>
</proxy>
</proxies>
.
.
</settings>
プラグインのビルド
- 以下を実行する
- target/aws-device-farm.hpiが生成される
$ git clone git@github.com:awslabs/aws-device-farm-jenkins-plugin.git
$ cd aws-device-farm-jenkins-plugin
$ make clean compile
Jenkinsにプラグインをインストール
AWS側の設定
設定
- AWSマネージメントコンソールにログイン後して「Identity & Access Management」を選択する
- 左側の項目の「ユーザー」を選択する
- 「新規ユーザーの作成」を選択する
- ユーザー名を入力して、"ユーザーごとにアクセスキーを生成"にチェックが入っていることを確認して作成する
- ポリシーを以下のように設定する
Jenkins側の設定
システムの設定
- Jenkinsにログインして、「Jenkinsの管理」⇒「システムの設定」を選択する
- 画面下部にある"AWS Device Farm"のところにあるAKIDとSKIDを入力して保存する
-
- AKID/SKIDがご不明な方はこちらをご覧ください
-
Jenkinsジョブの設定
- AmazonDeviceFarmを使いたいジョブを選択して、「設定」を選択する
- 「ビルド後の処理の追加」⇒「Run Tests on AWS Device Farm」を選択する
- 以下のように設定する(ここでは対象のテストにFuzzテストを選択した)
プロキシ下では使えない??
- 正確に言えば、ジョブの設定で入力すべきProject/DevicePoolが選択肢に何もでてこなかった
- EC2上で同じことを試みると、作成したProject/DevicePoolは表示されていた
- プロキシの設定付きで再起動をしてもダメだった
- 認証プロキシだからダメなのかと思ってsquidを使ったもので試したけどダメだった
- ※
回避策がみつかったら追記します→ 使えるようにはなったので下に追記します
プロキシ環境下で使う方法
- これを試しているうちに、「というかAmazonのサービスだからEC2使えよという話だよな・・・」と思いましたが見てみることに
- Jenkinsの設定で以下のプロキシの設定を試したのですがダメ、つまりはプラグイン側でプロキシに対応するようにしないといけない
- システムの環境変数定義
- 起動オプションにプロキシ設定追加
- 仕方なくjava不慣れな僕がコード見てみることに^^;
- こんなのやったよというのを書きます
-
$ mvn clean compile
する前に以下のコードを追加しておきます。以上です
src/main/java/org/jenkinsci/plugins/awsdevicefarm/AWSDeviceFarm.java
49 /**
50 * Private AWSDeviceFarm constructor. Uses the roleArn to generate STS creds if the roleArn isn't null; otherwise
51 * just uses the AWSCredentials creds.
52 * @param creds AWSCredentials creds to use for authentication.
53 * @param roleArn Role ARN to use for authentication.
54 */
55 private AWSDeviceFarm(AWSCredentials creds, String roleArn) {
56 if (roleArn != null) {
57 STSAssumeRoleSessionCredentialsProvider sts = new STSAssumeRoleSessionCredentialsProvider
58 .Builder(roleArn, RandomStringUtils.randomAlphanumeric(8))
59 .build();
60 creds = sts.getCredentials();
61 }
62
63 ClientConfiguration clientConfiguration = new ClientConfiguration().withUserAgent("AWS Device Farm - Jenkins v1.0");
64 //以下2行を追加
65 clientConfiguration.setProxyHost("[プロキシホスト]");
66 clientConfiguration.setProxyPort([プロキシポート]);
.
.
.
323 private Upload upload(File file, Project project, AWSDeviceFarmUploadType uploadType, Boolean synchronous) throws IOException, AWSDeviceFarmException {
324 CreateUploadRequest appUploadRequest = new CreateUploadRequest()
325 .withName(file.getName())
326 .withProjectArn(project.getArn())
327 .withContentType("application/octet-stream")
328 .withType(uploadType.toString());
329 Upload upload = api.createUpload(appUploadRequest).getUpload();
330 //CloseableHttpClient httpClient = HttpClients.createDefault(); この行を以下の4行のように変更する
331 CloseableHttpClient httpClient = HttpClients.custom()
332 .useSystemProperties()
333 .setProxy(new HttpHost("[プロキシホスト]", [プロキシポート]))
334 .build();
335
336 HttpPut httpPut = new HttpPut(upload.getUrl());
実行結果
DeviceFarm
Jenkins
- ジョブのトップから結果が閲覧できる
補足
- DeviceFarmのテストで失敗するとJenkinsのビルド結果も失敗として扱われます
~ただの宣伝~
- 全国のSeleniumer必読
- Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください