CI/CDの実現を行うツール「Jenkins」の紹介

みなさん、こんにちは。早坂 翔太(はやさか しょうた)と申します。

現在は人力で行ってきた作業を無人操作による効率化と自動検証における環境の設計とアプリケーションに対するユニットテストの開発を行っています。

経験者目線だと「なるほどー」「あんな感じかな?」とイメージが付きそうな単語ではあるかもしれませんが、ミラスタブログの目線はキャリアチェンジやエンジニアでデビューする人の目線も多く感じるので、ふわっと説明と一例を載せれたらと思います。

Jenkinsってなに?

まず案件などで「経験したことがあるスキル」の欄とかに「CI&CD」といった単語を見たことはありませんか?正式な意味としては、

CI = 継続的インテグレーション

CD = 継続的デリバリー

という意味づけがされているんです。

(わかってなさそうな人の画像)

???となる方も大丈夫、Jenkinsの役割や目的も踏まえて見てみましょう。

Jenkinsは大きく3つの実現を達成する為に利用されています。

  • 「ソフトウェアのリリーススピードの向上」
  • 「開発プロセスの自動化」
  • 「開発コストの削減」

(理解してるか微妙な人の画像)

うん、こう聞くと「なんか凄いことしてるんだなぁ」と思います。

そのくらいで大丈夫です。

ここで一例です。

自分が作ったスクリプト、ソースがあると思います。

それを実行しますよね?で結果が帰ってきます。それを確認して問題ない、ここを直さないとだめじゃん!というプログラミングとしてのルーティンみたいなものがあります。

それは呼び出すメソッドの数やクラスの数によって見なきゃいけない部分は多くなり、気にしなきゃいけなくなる範囲もでかくなるのです。

しまいには外部からファイルを読み込んで、外のAPIをよんでレスポンス受けて・・・なんてやったら「新しいの作らないといけないのに!」「次これ直さないといけないのに!」と大変なのです。

これが業務でも一緒です、人の目は有限で個人差もあります。

(忙しそうな人の画像)

じゃあ1回の動作で、それを勝手に動かして結果が返ってくる、それが確認出来るようになるなんてなったら大分楽ですよね?

それが「3つの実現を達成」を掲げているJenkinsで叶うのです。

今の開発では「Git」が代表的に利用されていると思います。

これは皆さんも知っての通りバージョン管理でソースコード等を纏めて置けるシステム。

本番に使うソースが合って、ローカルにクローンして、作業用にブランチを切って….とプログラミングをやった人は現場で開発している人はよくやっていると思います。

Jenkinsは「ブランチ名」「Gitの場所」等を指定し、「実行したいコマンド」を指定することで1つの「ジョブ」という名前で作成され、あとは実行ボタンを押すだけでやってくれちゃいます。

例としては….

pipeline {
    agent any 
    stages {
        stage('Checkout') { 
            steps {
                // Checkoutステージを定義・実行したいbranchをCheckoutする
            }
        }
        stage('run') { 
            steps {
                // runステージを定義・実行したいコマンド等を入力する
            }
        }
    }
}

このように定義すれば最低限gitから引っ張ってきたブランチを実行する、という最低限のジョブが完成します。これ以降は1クリックで以上の内容が実行されます。

今回は単純なイメージでこのように少量の説明となりましたが、実行した結果をこのように出してリンクを出力したり、ジョブ実行中だけ有効な環境変数を付けたり、外部のプラグインを適用したりと様々なことが再現出来ます。

規模が大きくなればなるほど助かりますし、リリースされたアプリケーションに追加で改修、安全かどうかを週に1回実行して確認等にも使用でき、非常に需要が高く柔軟性も兼ねてます。

どうでしょう?

今はイメージが付きにくいかもしれませんが、このような技術があるということを共有したいと思い、今回書かせていただきました。

以上です。

また次の記事でお会いしましょう。