Dockerのジェンキンズ:Jenkinsコンテナの中でDockerを走らせること


この記事はもともと投稿されたHackmamba
ジェンキンズは、人気の連続統合と配信(CI/CD)ツールです.ジェンキンズはオープンソースで、その既存のソフトウェアを維持して、その機能性を増やすためにプラグインを構築する大きな開発者コミュニティを持ちます.
ジェンキンズを使用している間、優れたコミュニティサポートで、あなたはDockerのようなコンテナ技術でJenkinsを走らせることによって解決することができる構成ファイル衝突のような問題に苦しむかもしれません.しかし、あなたがJenkinsでアプリケーションをDockerizeする計画をするならば、DockerでJenkinsを走らせることは新しい挑戦をもたらします.
この記事ではDockerでJenkinsを設定し、Dockerコンテナの実行を可能にします.最後に、ビルドを自動化し、Dockerイメージを押すことによってセットアップをテストします.

githubリポジトリ


ソースコードとDockerfile Githubの上のnodejsアプリケーションのhere .

必要条件


この記事に従ってください.
  • Dockerと端末に関する知識
  • ドッカーハブアカウント-無料作成here .
  • ジェンキンズを知ることは厳しい要求ではありませんが、それは良いことでしょう.

    DockerでJenkinsを設定する


    DockerでJenkinsを設定してDockerを実行できるようにするには、少なくとも2つのオプションがあります.
  • DockerのDockerと
  • カスタムJenkins Dockerイメージを作成し、コンテナをホストシステムデーモンにマウントする
  • この記事では後者のオプションを使用しますが、まずDockerでDockerについて学びます.
    DockerのDocker
    DockerのDockerの主な目的はDockerコアチームがDocker開発でより速く働くのを助けることです.そして、当時(2013年から2015年)、DockerでDockerを動かす唯一の方法は*-privileged* **を実行します.
    それは動作しますが-privileged 複数のコンテナが共有するときにデータの破損などの他の問題を紹介します/var/lib/docker . Dockerデーモンだけが/var/lib/docker 設計によって.
    今日、物事は非常に異なっている.DockerのDockerは、より安全で安全なアプローチを持っていますrootless containers フリーウェアツールsysbox . sysboxのようなツールでは、-特権フラグのないDockerでDockerを実行し、通常のコンテナとしてKubernetesクラスタの複数ノードを実行するような特定のシナリオを最適化できます.

    カスタムジェンキンズイメージの作成


    起動するにはDockerfile を追加します.
    FROM jenkins/jenkins:lts
    USER root
    RUN apt-get update -qq \
        && apt-get install -qqy apt-transport-https ca-certificates curl gnupg2 software-properties-common
    RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
    RUN add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/debian \
       $(lsb_release -cs) \
       stable"
    RUN apt-get update  -qq \
       && apt-get install docker-ce=17.12.1~ce-0~debian -y
    RUN usermod -aG docker jenkins
    
    The Dockerfile カスタムジェンキンズイメージを作成するすべてのコマンドが含まれます.
  • The FROM コマンドは、dockerに基本イメージを伝えますjenkins/jenkins:lts ) カスタムイメージを構築するために.
  • 第一RUN コマンドはすべての必須パッケージをapt-get update . 次に、使用してカスタムジェンキンズイメージに必要な新しいものをインストールしますapt-get install .
  • 下記RUN コマンドはDocker Linux Debian配布CLIをダウンロードします.次に、次の1つのリポジトリに追加されます.
  • 最後のRUN コマンドはJenkinsユーザをDockerグループに追加します.
  • カスタムJenkinsイメージを構築するには、次の手順に従います.
    $ docker image build -t custom-jenkins-docker .
    
    Jenkinsを設定するにはイメージを実行できますが、そうすることができません.
  • コンテナーが停止し、再起動または削除されたときに、Jenkinsの構成とデータを格納します.
  • Dockerizeアプリケーション(ゴールの目標)Dockerデーモンの欠如のために(カスタムビルドして画像をプッシュする必要があります)カスタムジェンキンズイメージを使用する.
  • ストアジェンキンズデータ
    Jenkinsを保存するには、あなたのホストマシンにJenkinsの明示的なボリュームを作成する必要があります.これを行うには、この引数を追加します-v jenkins_home:/var/jenkins_home カスタムJenkinsイメージを実行するとき.
    JenkinsコンテナにおけるDockerデーモンの使用の有効化
    これを行うには、JenkinsコンテナのDocker CLIをホストマシン上のDockerデーモンに接続します.-v フラグ.イメージを実行するとき、この引数を追加します./var/run/docker.sock:/var/run/docker.sock .
    さて、すべての引数をまとめると、次のコマンドでカスタムJenkinsイメージを実行できます.
    $ docker run -it -p 8080:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock -v jenkins_home:/var/jenkins_home custom-jenkins-docker
    
    上記のコマンドを実行したら、localhostを訪れてくださいlocalhost:8080 Jenkins環境を設定するには

    Jenkins環境の設定


    あなたが行くときlocalhost:8080 , 次のようなWebページが表示されます.

    あなたはすぐに得ることができますadmin 返されるログからのパスワード.
    以下のようになります.

    次のプロンプトで、プラグインのインストールを選択します.Jenkinsは自動的にすべてのプラグインをインストールします.

    インストール後、最初の管理者ユーザーを作成し、設定を終了します.

    これまで、カスタムジェンキンズイメージを作成し、Dockerを実行できるように設定します.次に、JenkinsをGithub Repoのビルド(Docker Image)に自動化し、Docker Hubに公開することで、セットアップ全体をテストします.

    Dockerは、DockerでJenkinsとNODEJSアプリケーション


    Jenkins環境でnodejsアプリケーションをdockizeする前に、次のプラグインをインストールする必要があります.

  • nodejsプラグイン:ビルドステップとしてnodejsスクリプトを実行するには

  • Cloudbees Dockerのビルドと発行プラグインDockerfile ベースのプロジェクトとDockerハブに構築された画像を公開します.
  • 上記のプラグインをインストールするには、Jenkinsダッシュボード上で、システム構成の下でJenkinsを管理するために、プラグインの管理を選択します.その後、プラグインマネージャーで使用可能なタブをクリックし、それぞれのプラグインを検索してインストールします.

    NodeJSプラグイン
    管理Jenkinsでは、まだシステム構成の下で、グローバルツール構成を選択し、次のイメージに類似したNodeJSインストールを追加します.

    アプリケーションをdockerizeするビルドジョブを作成する
    Jenkinsダッシュボードで起動するには、新しい項目をクリックし、フリースタイルプロジェクトを選択して名前を付けます.次に、「了解」をクリックします.

    次のWebページで、ソースコード管理タブをクリックし、gitを選択し、GithubリポジトリのURLを追加します.https://github.com/Kikiodazie/Backend-RESTful-API.git .

    リポジトリがパブリックであるとき、資格情報フィールドを空白にしておきます.
    次に、ビルドタブをクリックして構築し、NodjsアプリケーションイメージをCloudBees Dockerビルドを使用して発行し、プラグインを発行するためのビルドステップを追加します.

    Dockerビルドを選択してビルドステップを選択した後、your_Dockerhub_id/desired_name_of_the_repokikiodazie/node-docker .
    Docker Hubのレジストリ資格を追加した場合でも、DockerでJenkinsを有効にしないため、残りのフィールドを空白にします.

    空のレジストリ資格情報を解決するには、コマンドラインを介してJenkinsコンテナ内のDockerハブアカウントにログインしてジェンキンズのアクセスを与える必要があります.
    得るbash コンテナの実行:
    $ docker exec -it <container_name/container_id> /bin/bash
    
    次にコンテナの内部で実行します.
    $ docker login
    
    このプロセスを完了するには、Docker Hubの資格情報を入力します.

    Jenkinsに戻る、今すぐビルドをクリックし、NODEJSアプリケーションイメージが構築され、あなたのDockerハブのアカウントに公開されます.
    ビルド履歴でコンソール出力を表示できます.

    出力は以下のようになります.

    上記のイメージは、DockerのJenkinsがイメージを構築し、Docker Hubに公開することを示しています.

    結論


    この記事はDockerでJenkinsを設定してDockerを実行し、Docker HubにリモートGithubリポジトリのDockerイメージを構築して発行することによってテストします.

    資源


    DockerでJenkinsを学ぶには、次のリソースをチェックします.

  • Installing Jenkins in Docker - ジェンキンズ文書について
  • Using Docker-in-Docker for your CI or testing environment? Think twice
  • Easy Jenkins with a System Container