JFrog Japan Blog

DevOpsを加速する、JFrog日本法人メンバーによるブログです。

JFrog ArtifactoryやXrayといった自社ツールはもちろん、CI/CDやコンテナ技術(DockerやKubernetes)などDevOpsの一般的な内容も扱います。
その他、日本でのDevOps事例紹介やお楽しみコンテンツも掲載予定です。 JFrogならではの面白くて役に立つブログを目指しますので、お楽しみに!

デブサミ2021夏でDevSecOpsを始めるためのヒントをお伝えしました #devsumi

こんにちは、JFrogデベロッパーアドボケイトのよこなです。毎日地獄のように暑いですが皆さんバテていませんか…。

7月30日に行われたDevelopers Summit 2021 SummerにてJFrogはプラチナスポンサーをさせていただきました。

スポンサーセッションとしてDevSecOpsの話をしたので、簡単に振り返ってみます!といってもプレゼンの動画も公開される予定ですし、基本的に資料はそれだけ見てもなんとなく分かるように作ってありますし(本人はいつもそのつもり…)、ポイントと所感だけ。
speakerdeck.com

セッションでお伝えした内容は次のような感じです。

  • DevOps復習: コラボレーションにより顧客に価値を届け続けることを目指す
  • DevSecOpsの考え方ではDevとOpsに加えSec(セキュリティ)も協力する
    • セキュリティといっても色々あるが、DevSecOpsでは主にソフトウェアのセキュリティを扱う
    • 開発ライフサイクル(≒CI/CD)に自動で行うセキュリティチェックを組み込むのを目指すと分かりやすい
  • ソフトウェアのセキュリティとして取り組めることにも種類があるが、動的・静的なチェックともに(できる/必要なところから)行うと良い
  • 関心の向きがちな自分の書いたコードのみならず、依存するOSSの脆弱性にも対策を講じる必要がある
    • OSSの脆弱性を放置したことによるインシデント(個人情報の流出など)は実際に事例がある
    • CI/CDを活用し、自動で早めかつ定期的なチェックを行う
  • 効率良いセキュリティチェックのためにもバイナリ・リポジトリマネージャーでアーティファクトを管理する
    • アーティファクトは依存解決が済んでおり、リリースする対象となる
    • 自らビルドして作成したアーティファクト・ライブラリなど外から取得したアーティファクトの両方を管理しておく
    • セキュリティチェックが出来る以外にも管理のメリットは多数ある
  • ツール追加で自動のセキュリティチェックを当たり前にするとともに、効率化により出来た時間は思考や判断が必要な作業に割く
  • どこから始めるかは組織次第だが、まずは普段の悩みや隣の人との雑談など身近なところからやっていきたい
    • DevOpsやDevSecOpsなどが定着していない(させづらい)組織ではセキュリティというポイントを使って周りを巻き込むのも手である
    • 自分が楽に、幸せになるところからやればそれが組織にとってプラスになる

三行に出来たら良かったんですが…結構長くなりました。これが40分程度のセッションのまとめです。
純粋にセキュリティやっていき💪な方はぜひ参考にしていただけたら嬉しいですし、終盤で話したように「周りを巻き込むためのタネ」とするのもアリだと思います。結果として何かが良くなるのであれば!
実際DevSecOpsはとても関心が高く、JFrogにコンタクト取って下さるかたも、セキュリティきっかけで興味を持ったという方がたくさんいらっしゃいますよ!

さて、ソフトウェアエンジニアだった頃の私がこうしたセキュリティに対する取り組みを理解していたかというと…足りていなかったように思います。
どちらかというとマーケティングとか自分の担当システムの使い手といった方々とのコラボを重視していた私ですが、運用やセキュリティとのそれについては今振り返ればもっと出来たことがありました。単純に知識不足が原因な気がします。
言い訳ではないですが、担当以外のことって難しいし時間も足りないし、ちゃんと分かってコラボレーションのため積極的に動くのは簡単なことではないですよね。「もやもやを抱えて仕事しているけど自分にはどうしようもない」「やる気はあるが何をどう変えたらいいか分からない」という方に日々出会うのも本当によく分かります😢
だからこそデベロッパーアドボケイトとなった今、忙しい中クイックに大事なことを知るための話をしたり、スーパーマンじゃないエンジニア(←まさに私のような)にも出来ることをお伝えしたりと、過去の学びからなるべく有益なネタを見つけようと思う今日この頃です。
ぜひ皆さんの悩みや取り組みなども教えて下さいね。

最後に、デブサミの運営、参加者、スピーカーの皆様、お疲れさまでした。そして、ありがとうございました。


ちょうど次のウェビナーがDevSecOpsに関するツールについてなのでよければぜひ!スピーカーは同僚の三宅です◎
leap.jfrog.com

JFrog Artifactoryを使ってDocker Hubのdownload rate limit (ダウンロード回数の制限) を回避する

Docker Hubのdownload rate limitとは?

blog.jfrog.co.jp

以前この記事で詳しく紹介した(翻訳ですが…)とおり、みんな大好きDocker Hubを無料で使っていると次のような利用制限がかかります。

ダウンロードの制限
イメージのプルが制限され、匿名ユーザーは6時間あたり100回、無料アカウントだと6時間あたり200回までとなります。

今日はダウンロードの際、JFrog Artifactory(クラウド版)をプロキシとして間に挟むことでこの回数をなるべく消費せずにDockerイメージを取得する方法を見ていきます。他のメリット含め、詳細は先ほど紹介した記事をご覧ください!

https://cdn-ak.f.st-hatena.com/images/fotolife/i/ihcomega/20200915/20200915055858.png

Artifactoryの設定をする

Artifactoryのアカウントを作成する

jfrog.com

ここからクラウド版の無料アカウントを作成します。もちろん有料アカウントをお持ちの方はそちらをお使いいただけます。
サーバー名(Server Name)はお好きなものを指定してください。 <サーバー名>.jfrog.ioにアクセスすればJFrog Platformが使えるようになります。なお、既に他のサーバーで使われている名前は指定できません。

リモートリポジトリを作成する

リポジトリにはいくつか種類がありますが、Docker Hubのように別のリポジトリと接続するときはリモートリポジトリを使います。

「New Remote Repository」をクリックする

パッケージの種類として「Docker」を選択する

リポジトリ作成に必要な情報を入力する

  • リポジトリ名は何でも良いですが、<特徴(アプリ名、サービス名など)>-<パッケージの種類>-<リポジトリの種類>とするのが分かりやすくてオススメです。ここでは example-docker-remoteとしました
  • URLにはイメージの取得先としてDocker Hub https://registry-1.docker.io/ を指定します(デフォルトで入力されています)。
  • Docker Hubにログインした状態でイメージを取得するには、ログイン情報も入力します

Save & Finishをクリックするとリポジトリが作成され、次のような画面が表示されます。ログインなどの操作をコマンドラインで行うのに便利です。

作成したリポジトリを操作するためのヒント

Dockerイメージをpullする

例としてGradleのイメージを取得することとします。普通にDocker Hubからダウンロードする場合、 docker pull gradleとやる操作です。
Artifactoryを介してDocker Hubにアクセスできるよう、まずはログインします(Docker for Mac / Windowsを使っている場合はsudoが要りません)。 *1

sudo docker login <サーバー名>.jfrog.io

続いて、必要なイメージをArtifactory経由でpullします。 *2

docker pull <サーバー名>.jfrog.io/example-docker-remote/gradle:latest

これで初回のみDocker Hubへアクセスしますが、1度コンテナイメージを取得したらArtifactoryにキャッシュされるので、2回目以降はそこから取得するようになります。
取得済みのアーティファクトはArtifactoryのUI上でも確認することができます。

ちなみに

自分のダウンロード回数の確認

残り何回ダウンロードできるかは Download rate limit | Docker Documentation に記載されている方法で調べることが可能です。

ダウンロード回数の上限と残り (あと92/200)

リモートリポジトリへの操作のコマンド確認

上で紹介したリポジトリ作成直後に表示されるコマンドは、後からも確認できます。ArtifactsのビューでSet Me Upをクリックしてください。

右上の「Set Me Up」をクリックする

すると、さっきみたいな画面がまた表示されます。

バーチャルリポジトリの利用

今回はリモートリポジトリ経由での操作を紹介しましたが、リモートリポジトリと紐付いたバーチャルリポジトリを使うことも可能です。
バーチャルリポジトリとは、複数のリポジトリを束ねるためのリポジトリです。用途ごとに複数のリポジトリを作ってある場合も、リモートリポジトリに対して操作を行うことでリポジトリの使い分けを意識しなくて済むので楽です。


以上、この簡単なステップだけでDocker Hubの制限に悩まされることも減るはずです。無料でお気軽に始められるのでぜひお試しあれ😋

*1:Artifactoryのバージョンが古い場合、リポジトリにログインする必要があるかもしれません。その場合は docker login <サーバー名>-example-docker-remote.jfrog.io を試してみてください

*2:Artifactoryのバージョンによっては docker pull <サーバー名>-example-docker-remote.jfrog.io/gradle とする必要があります

ふだん実践しているインフォーマルコミュニケーションのポイント #devsumi

デベロッパーアドボケイトのよこなです。2月にデブサミ(Developers Summit)に登壇した際、「フォーマルコミュニケーションとインフォーマルコミュニケーションの使い分けについて意識していることはあるか」といったご質問をいただいたのですが、面白いテーマだなと思ったので今更ながらブログ記事にしてみます。

speakerdeck.com

資料はこちらです。JFrogとしてのスポンサーセッションでしたが製品ネタはナシで、周りの人を巻き込みながらDevOpsを少しずつ実践していこうというお話をしました。人の協力を得るからにはコミュニケーションは不可欠で、だからこそ関連する質問をいただいたということですね。
コミュニケーションがフォーマルかインフォーマルか、どういうコミュニケーションを取るかといったことはあまり意識したことがなかったので、自分の行動をふりかえって「インフォーマルコミュニケーションにおいて(無意識に)実践していること」を書いてみます。なんとなく習慣や癖として身についている思考を言葉にしてみるという記事になります。

ちなみにコミュニケーションとか人の心理とかマネジメントとか…技術ネタとかと比べるとふわっとして言語化が難しいものを語るときは何か参考文献を用意するようにしているのですが、今回は以下をヒントとして使いました。

(フォーマルコミュニケーション、インフォーマルコミュニケーションについての書籍が意外と見つからなかったのですが、私の探し方のせい?)


インフォーマルコミュニケーションは仕事の一部

はじめに私のインフォーマルコミュニケーションに対しての考え方をお伝えしておくと、仕事上の関係や状況を良くするために使うアイテムと捉えています。雑談や世間話とはいえプライベートでのそれとは異なりますし、だからこそこのような記事が書けるんだなぁと改めて考えると気付かされます。
まぁただ本当に間抜けな発言をしたり趣味でダジャレ(すごく面白い)を言ったりすることもあるので、私と一緒に働いたことのある方が見たら笑っちゃうかもしれません。そんなちゃんと考えてないでしょ、本能のまま喋ってるだけでしょ、と…。もちろんまったく頭を使っていなくてそういう時も多々あります。ハハハ。

意識しているポイント3選

ということで漸く本題ですが、仕事にプラスの影響を与えればいいなという「インフォーマルコミュニケーション」とか「オフとは違う雑談」をしている際、実践していることたち3選です。

1. 課題と目的を意識する

そもそも頭を使ってインフォーマルコミュニケーションを取りたいのはちょっとした困りごと、より良くしたい状況があるときです。

  • ◯◯さんが元気ないな
  • △△さんが最近何を思っているか謎だな
  • チームの雰囲気が良くないな
  • 連休明けで皆ポケポケしてるな

など。こうした小さな気付きをもとに、話の内容や相手、タイミング、手段などを考えてから人とコミュニケーションを取ることはよくあります。
例えば「◯◯さんが元気ないな」ということが気になったとしても、どういったアプローチを取るかは様々です。

【相手と内容】

  • ◯◯さんの話を聞いてなんで元気がないのか探ってみる
  • ◯◯さんに持ちネタを披露して元気づける
  • 今はそっとしておいてとにかく観察する
  • ムードメーカーの□□さんに話しかけて明るい雰囲気を作る

【タイミングや手段】

  • 一緒にランチしたときさりげなく
  • ミーティング前のスキマ時間に
  • 1on1で
  • チャットで

いずれも元気のない◯◯さんを思っての行動だとしても、コミュニケーションの取り方は異なります。
そして、臨機応変にこうした切り替えが出来ると良いもののなかなか難しいこともあるので、予め行動を決めておくのです。
「今日16時からミーティングあるし、◯◯さんはいつも早めに来てるから自分も早めに言って話しかけてみよう」とかですね。

手段の決め方は

  • 相手が好む方法か? (例えば、相手がいつもご飯の時おしゃべりならご飯に誘ってみたらいい)
  • 自分がうまくやれる方法か? (例えば、自分はテキストコミュニケーションが苦手だと思うなら避ければいい)
  • 実現可能か? (例えば、そもそも滅多に会えないのに「次会ったら言おう」というタイミングの計り方ではチャンスを逃すかもしれない)

といったことから自分なりにベストだと思う方法を選べば良い(慎重に考えすぎなくて良い)と思います。

2. よく聞き、相手の反応から情報を得る

当たり前じゃんと思うかもしれませんが、意外と出来ていないことも多いのがこれです。
何かを良くしたい人は、多かれ少なかれアツい思いを持っていて、それを発信することで周りを動機付けたりパワーを与えたりすることが得意だったりします。
ただ、そればかりになってしまうと相手から得られたはずの情報を見落としかねません。上に書いた、「ベストなコミュニケーションの取り方を自分なりに考える」ということも難しくなります。

ぐっと我慢して口を噤んでおき、かわりに目や耳をフル稼働させるのもコミュニケーションスキルのひとつだと言える気がします。

3. 振り返る

これは目的があってこそ出来る行動ですが、やろうと思っていたコミュニケーションを終えたら自分なりに上手く出来たかふりかえります。
もちろん全然思い通りにいかないことも多々ありますが、自分の行動も相手の反応も覚えておいて次どうするかをぼんやり考えます。

以上が意識している3つのポイントでした!要は、無計画に望まないということですね。しかしコミュニケーションって難しいよね・・・失敗もたくさんしながら磨いていきたいものです💪
この記事がネットの海を泳いで、いつか質問してくださった方にも届いたら嬉しいな!(そう思うならもっと早く書きましょう)

Jenkins PipelineでJFrog Artifactoryを使えるよう設定する

お、お久しぶりです…デベロッパーアドボケイトのよこなです。

登壇で使うデモで得た知見を少しずつブログ記事にしていきます。今回はJenkinsからArtifactoryへアーティファクトをプッシュするのに必要な設定です。
なおJenkinsには「フリースタイルジョブ」といってGUIを使って設定できるジョブもありますが、定義をJenkinsfileという設定ファイルでで書ける「Jenkins Pipeline」を使っていきます。
そうすると設定ファイルをSCM(Gitとかですね)で管理できるので設定の管理や再現が比較的楽になるというメリットがありますよ〜。
ところで素朴な疑問…フリースタイルは片仮名、Pipelineはアルファベットで表記することが多い気がします。なぜだろう。

まぁそれはいいとして、やっていくぞ〜

Artifactoryのプラグインをインストールする

まずはJenkinsでArtifactoryを使えるよう設定します。専用のプラグインがあるので簡単!

plugins.jenkins.io

左側のメニューにある「Jenkinsの設定」から「プラグインの管理」を開いて…

f:id:ihcomega:20210415213030p:plain
f:id:ihcomega:20210415214127p:plain

「利用可能」タブでArtifactoryを検索すれば出てくるのでインストールします。

f:id:ihcomega:20210415231753p:plain
※この操作は他とは別環境のまっさらなJenkinsで行ったので、スクショ内のJenkinsのバージョンが異なってUIも違います、すみません(バージョン違いでも大まかには同じです!)

プラグインの反映にはJenkinsの再起動が必要なので、止めて良いタイミング(≒ジョブの実行および実行予定がない時間帯)で忘れずに行ってくださいね。

Artifactoryと接続できるよう設定する

次はJenkinsの設定画面から「システムの設定」を開き、Artifactoryの認証情報を設定していきます。

f:id:ihcomega:20210415214055p:plain

プラグインをインストールしてあると、JFrogの設定エリアが登場します🎉

f:id:ihcomega:20210415232430p:plain

Add Artifactory Server をクリックすると以下のような入力欄が表示されるので、Artifactoryのサーバーを指定してクレデンシャルを入力すれば完了です。

f:id:ihcomega:20210415222623p:plain

Server IDはArtifactoryのサーバーを識別できるよう自分で設定しましょう。この値はJenkinsfile内でも使います。

Jenkins側の設定はこれだけです。

Jenkinsfileの記載

Jenkinsfile内で行えるArtifactoryの操作一覧はJenkinsのプラグインページにあります。ただ、ここで見られるのは取れるパラメーターとその型の情報のみなので、参考情報にしかなりませんね…。 www.jenkins.io

JFrogのwikiの方が詳細な使い方を知るのには便利です。
www.jfrog.com

Javaのパッケージマネージャー「Gradle」を例に用いますが、例えば使用するリモートリポジトリ・ローカルリポジトリを設定する際は以下のように書きます。

// リモートリポジトリ(依存関係の解決先)を指定する
rtGradleResolver(
  id: 'my-resolver', // Server IDと同じようにリポジトリを識別するために設定する
  serverId: 'my-artifactory-server', // 上で設定したServer IDはこのように使う
  repo: 'maven' // バーチャルリポジトリでもOK
)

// ローカルリポジトリ(アーティファクトの保管先)を指定する
rtGradleDeployer(
  id: 'my-deployer', // Server IDと同じようにリポジトリを識別するために設定する
  serverId: 'my-artifactory-server', // これも上で設定したServer ID
  repo: 'local-repo' // バーチャルリポジトリでもOK
)

こんな感じでJenkins越しにArtifactoryをじゃんじゃん使えるようになりました。

参考までに私がデモで使っていたJenkinsfileも貼っておきますが、 「Jenkinsfileどうやって書くの?」というブログ記事もまた書きたいと思います。
github.com

あとさらっと出てきたバーチャルリポジトリって何ぞや?とか。

ということで久々すぎる投稿になってしまいました…2021年からは技術ネタもエモい話も色々出していくので本ブログをよろしくおねがいします😤💦

2021年度 Q2(4〜6月)JFrog DevSecOps Platform ウェビナー予定

JFrog DevOps Acceleration Engineer 三宅です。

JFrog Japan では定期的に DevSecOps 関連のウェビナーを私と Developer Advocate の横田で担当してお届けしています。2021年度 Q2(4〜6月)の私担当分は JFrog 製品とソリューションを広く知っていただく期間とするべく「JFrog DevSecOps Platform」をテーマに下記計3回お届けする予定です(分量の配分などにより内容やスケジュールを変更する可能性がありますが、その場合は本ブログエントリーをアップデートします)。

  • 第1回 (2021/04/15 11:00): はじめての JFrog Platform (Getting Started with JFrog Platform)
  • 第2回 (2021/05/13 11:00): はじめての JFrog Artifactory (Getting Started with JFrog Artifactory)
  • 第3回 (2021/06/10 11:00): はじめての JFrog Xray (Getting Started with JFrog Xray)

多くの日本企業が新年度を迎えるこの4月から新たな気持ちでご参加いただければと思います!

また、ご質問やご要望などあればどしどしお寄せください。

それでは、また次回お会いできることを楽しみにしております!