ラベル Drone の投稿を表示しています。 すべての投稿を表示
ラベル Drone の投稿を表示しています。 すべての投稿を表示

2021年2月12日金曜日

[CodeShip][Drone.io] DockerHub pull rate limit に対応する

DockerHub の pull rate limit への対応方法メモです。
基本的には DockerHub にログインした状態で pull することになると思います。
ログイン情報のパスワードには DockerHub の設定から API トークンを発行しそれを設定します。


ただ、このユーザー/パスワードを各 CI サービスに適用する方法はサービスによって違います。今回は CodeShip と Drone.io の設定を紹介したいと思います。

CodeShip の場合

CodeShip Pro の場合です。 Basic の場合はコマンドの中で docker login コマンドを実行する方法になると思います。

Using Docker Image Registries | CloudBees Docs
上記リンク先のドキュメントに設定方法が記載されています。

手順としては大きく分けて2つで、Dockerconfig.json の用意とリポジトリ/ YAML の設定になります。

Dockerconfig.json の用意

まず DockerHub にログインするための config.json を生成します。

{
    "auths": {
        "https://index.docker.io/v1/": {
            "auth": "your_auth_string",
            "email": "your_email"
        }
    }
}  

json ファイルの中身は上記のようなものになります。
この json ファイルは docker login したら $HOME/.docker/config.json に保存されるものを使えばよいのですが、macOS の場合保存場所が keychain になっているため、下記方法で取得します。公式ドキュメントでは「Docker Credentials On Mac OSX」のあたりです。

まずは以下のような credentials.evn ファイルを作成します。
USERNAME/PASSWORD は適宜埋めてください(PASSWORD には API TOKEN)

DOCKER_USERNAME=...
DOCKER_PASSWORD=...
DOCKER_REGISTRY=https://index.docker.io/v1/
  

続いて、以下のコマンドを実行します。

mkdir ./dockercfg
docker run -it --rm \
    --env-file=credentials.env \
    -v "$(pwd):/opt/data/" \
    -v "/var/run/docker.sock:/var/run/docker.sock" \
    codeship/dockercfg-generator /opt/data/dockercfg

すると、カレントディレクトリ/dockercfg/ に config.json が出来上がります。

リポジトリ / YAML の設定

config.json が出来上がったらそれをシークレットファイルにして、CI 環境が読み込むように YAML に設定をします。

シークレットファイルの作成のためにプロジェクトの設定ページから codeship.aes をダウンロードしてください。リポジトリのルートに配置したら不用意に commit してしまわないように .gitignore に追加しておきましょう。

aes を配置したら以下のコマンドを実行します。パスは適宜変更してください。

jet encrypt dockercfg/config.json dockercfg.encrypted

出来上がった .encrypted ファイルは git add/commit します。

続いて YAML の設定をします。
追記するのは codeship-steps.yml ファイルの方です。
以下のように encrypted_dockercfg_path を追加してください。

- name: spec
  service: gcc
  command: /work/build.sh
  encrypted_dockercfg_path: ./dockercfg.encrypted
動作確認

これで設定は以上です。変更を commit/push して動作確認してみましょう。
うまく設定できていれば DockerHub の Token 一覧画面で最終アクセス日時が更新されるはずです。

Drone.io の場合

Images | Drone
Drone の公式ドキュメントはこちらです。

CodeShip と同じように Dockerconfig.json ファイルを作成し、それを drone のシークレットファイルとして CLI から登録します。
iutest で生成用に用意した Makefile があるので参考にしてください。
https://github.com/srz-zumix/iutest/tree/master/.ci/drone

json ファイルを作成したら以下のコマンドで登録できます。

	drone secret add --repository srz-zumix/iutest \
		--name dockerconfig \
		--data @dockerconfig.json

シークレットファイルをアップデートする場合は update サブコマンドを使います。

	drone secret update --repository srz-zumix/iutest \
		--name dockerconfig \
		--data @dockerconfig.json

PR でもこのシークレットファイルを利用可能にする場合は --allow-pull-request オプションを追加してください。
シークレットファイルを登録したら以下のように、このファイルを使用するように YAML の設定をします。

kind: pipeline
name: test

image_pull_secrets:
  - dockerconfig

steps:
...


image_pull_secrets に指定するのは secret add/update したときに指定した --name オプションの名前です。

動作確認

設定は以上です。
CodeShip と同様にトークンが利用されたかどうかを確認しましょう。

まとめ

今回対応した CodeShip/Drone どちらも Dockerconfig.json ファイルをシークレットに用意してそれを環境に読ませる方法でした。

最初 Drone の方は

echo -n '<ユーザ名>:<アクセストークン>' | base64

の結果を auth に設定していて、それではうまくいかなくて手こずっていたのですが、CodeShip のやり方を知って助かりました。
(Mac 環境で base64 してるのが原因?)

ともあれ、CodeShip や Drone と同様に Docker の config.json を使った login をする CI サービスではこの方法が使えそうです。

今回は以上です。

2020年11月10日火曜日

Travis CI の新プランについて

 The Travis CI Blog: The new pricing model for travis-ci.com

Travis CI の新しい料金プランが 2020/11/02 より始まり、あっという間にクレジットを使い切りました。


新しいプランでは 10,000 クレジットが毎月与えられ、それを消費するスタイルですが、圧倒的に足りない・・

こちら↑はブログからの抜粋ですが、マイニングとかに悪用されたのが理由のようです。
制限かかっても仕方がないな…とは思います。
が、今まで CI サービスの中でも制限ゆるい方だったのが、一気にキツめの部類になったので辛いですねぇ…
まぁ、今まで無料だからと気にせずマトリックス組んでましたが、このままではキツイので体制を見直すことにしました。(自作 C++ テスティングフレームワークの iutest で主に使ってて、複数パターンでテストしてました↑)
ただ、それでも 10,000 クレジットはあっという間になくなってしまうと予測されるので、サポートに OSS クレジットを申請してみました。

結果が来たら追記したいと思います。

Travis CI のかわりにオススメの CI サービスは?
さて、これを機に Travis CI から引っ越しする方も多いと思います。
GitHub Actions に移る方が多そうですが、別のサービスもオススメしておきます。

  • CircleCI
    まぁこれは知ってる人も使ってる人も多いと思うので、こっちに移る人も多いかも。
    OSS プランであれば 400,000 クレジット使えます。
    iutest の 2020/10 月の利用結果はこちら。まだ余裕あり
  • Drone.io
    Drone (Cloud)は OSS であれば完全フリーで使えます。
    並列数とか制限ありません(ただし、リソースは限られてる)
    iutest では gcc/clang の各バージョンでのテストをしています。
  • Azure Pipelines
    GitHub Actions よりは少ない 10 並列ですが、それでも強力な CI サービスです。
    GitHub Actions は(まだ)YAML のアンカー・エイリアスに対応していないので、独自のテンプレート構文が使える Azure Pipelines のほうが、マトリックスは組みやすいと思います。
    Travis CI でマトリックス組んでた人にはオススメです。
  • その他
    iutest では他にもたくさんの CI サービスを利用しているのでよければ参考にしてください。
最後に
DockerHub の pull rate limit の対応をしてたんですが、これまたインパクトのデカイ変更でした。。。このような CI サービスの悪用は他のサービスでも起こりそうな気がしてますが。。。今後の CI as a Service はどうなっていくんでしょうね。。。

2019年3月20日水曜日

[CI] 帰ってきたクラウド版 Drone



以前サービスされていた Drone.io のクラウド版が帰ってきてました。
というわけで、(ちょうどとある CI からジョブを引っ越しさせたいと思っていたので)
早速使ってみました。

セットアップ
まずはサインナップからですが省略します。

ダッシュボードにリポジトリがリストアップされているので、CI したいリポジトリを選んで「ACTIVATE」を押します。


リポジトリの「SETTINGS」が開くので、もう一度「ACTIVATE」を押します。


すぐに ACTIVATE は完了し、設定が表示されます。
いくつか設定できる項目がありますが、最初に気にしておくところは「Project visibility」くらいだと思います。


Drone は YAML config のみのようなので、つづいて yaml を作成をしていきます。

パイプライン作成
それでは、.drone.yml ファイルを書いていきましょう。
フォーマットは公式ドキュメントを見るのが一番良いのでそちらを参照してください。
Pipeline

iutest では以下のように書いてみました。
kind: pipeline
name: benchmark_test

steps:
- name: bench
  image: gcc
  commands:
    - cd test
    - make -C benchmark
    - make bench

steps に配列で処理を定義できる感じですね。簡単!

これをリポジトリルートに置いたら commit/push しましょう。
自動でビルドが開始されます。(反応もいい感じ)




複数のパイプライン
Drone では複数のパイプラインを定義できます。

kind: pipeline
name: test1

※1つ目のパイプラインの処理

---
kind: pipeline
name: test2

※2つ目のパイプラインの処理


このように --- で区切ることで複数のパイプラインが作成できます
それぞれのパイプラインの書き方は特に変わらずそのままです。
(※YAML anchor/alias はこれを越えられないみたいです)




Plugin を使う
Drone ではプラグインを使うことで、複雑な処理を書くことなくパラメータの設定だけでツールやサービスを簡単に利用できる仕組みになっています。
どんなプラグインがあるかはこちらにまとまっています。
http://plugins.drone.io/

今回は Slack Plugin を使ってステータス通知をしてみました。

steps:
- name: slack
  image: plugins/slack
  settings:
    webhook:
      from_secret: SLACK_WEBHOOK
    channel: ci
    username: drone
    icon_url: https://raw.githubusercontent.com/drone/brand/master/logos/png/drone-logo-dark_256.png
  when:
    status: [ success, failure ]


Webhook URL は見えないように from_secret: SLACK_WEBHOOK にしています。
こちらは「SETTINGS」ページの「Secrets」のところで生成できます。


動かしてみるとこのように通知が飛んできました!

簡単ですね。

skip コメント
つづいて、CI のスキップコメントメッセージについてまとめているので、そちらの更新も行いました。
https://github.com/srz-zumix/ci-skip


ドキュメントは見当たらなかったのですが、他の CI サービスと同様に [ci skip] [skip ci] が使えます。
また、***no_ci*** も使えるようです。

Badge
シメは、お決まりのバッジですね。
「SETTINGS」 タブを開くと最下部に「Badges」があるのでそこから取得できます。




一点だけ注意があって、ブランチ指定をした場合に生成される URL が ?ref=/refs/heads/develop のようにパラメータが付きますが、執筆時にはこの URL だと「build: none」と表示されてしまってました。

https://0-8-0.docs.drone.io/badges/
0.8.0 のドキュメントですが、こちらを参考に ?branch=develop に変えたところ、イメージが取得できました。


最後に
クラウド版は一度閉じてはいましたが、その間もオンプレミスで進化を続けていただけあって、簡単にかつ素早く動いたので良かったです。
(いつから戻ってきたんだろ)

最近、他の CI サービスの・・・で苦労してたので、シンプルに使える Drone がまた使えるようになったのはすごく助かりますね。
オンプレミス版を Jenkins の代わりとして使ってる企業も多いようなので、ぜひ一度使ってみてください。

ではでは。