web-dev-qa-db-ja.com

Dockerイメージにgitコマンドを含めることはできますか?

私はドッカーが初めてです。コミットされたファイルをチェックするためにプロジェクトビルドの一部として実行されるイメージを作成したいと思います。

私の要件は、Dockerファイルに次のステートメントが必要であることです

  1. 現在のGitリポジトリからコミットされたファイルを取得する
  2. コピーmyapp// app
  3. CMD /app/entry.pl <git files>(コマンドライン引数として)

このプロセスのイメージを作成したいと思います。

現在のローカルリポジトリからgit commitedファイルリストを取得し、それらのファイルをアプリケーションに渡してスキャンする必要があります。

イメージを構築している間は、アプリケーションをコピーする必要がありますが、コンテナの実行中はgit diffを実行して、変更されたファイルを検索し、それを引数としてアプリケーションに渡す必要があります。

Dockerコンテナでgit diffを実行することはできますか?

更新:

Dockerから現在のリポジトリでgit diffを実行しようとしましたが、gitリポジトリではないと言っています。 Doclabイメージをgitlab ymlファイルへの継続的な統合の一部として実行しています。

この要件を達成するために私を助けてください?

6
Techie

はい、できます。それについてお勧めします。

  1. 一般ユーザーに関連付けられたgithubでgitトークンを定義します。そのユーザーには読み取り権限のみを与えたいと思います。
  2. ビルドにカスタマイズできるように、Dockerfileでgitに関連するいくつかのARGを宣言します。
  3. DockerfileにGitインストールを追加します。
  4. 行う git cloneリポジトリ全体ではなく、必要なフォルダのみを複製します。

したがって、Dockerfileは、たとえばdebian/ubuntuの場合があります。

FROM <your linux distribution>
ARG GIT_USER
ARG GIT_TOKEN
ARG GIT_COMMIT
ARG SW_VERSION
RUN apt-get update
RUN apt-get -y install git
RUN git clone -n https://${GIT_USER}:${GIT_TOKEN}@github.com/<your git>/your_git.git --depth 1 && cd <your_git> && git checkout ${GIT_COMMIT} <dir_you_want_to_checkout>
COPY myapp/ /app
CMD /app/entry.pl /<your_git>/<dir_you_want_to_checkout>/...

次に、あなたが知っているようにあなたが構築することができます:

docker build -t --build-arg GIT_USER=<your_user> --build-arg GIT_TOKEN=d0e4467c63... --build-arg GIT_COMMIT=a14dc9f454... <your_image_name> .

幸運を。

4
mulg0r

Gitコマンドを使用できる最小限のDockerイメージが必要な場合は、イメージとしてgitlab/gitlab-runner:Alpine from here を使用することをお勧めします。

執筆時点では、このイメージは40Mbであり、Gitを使用できる私が描ける最小サイズに近いです。これにより、パッケージマネージャを使用してgitをインストールする際に、ある程度の時間がスキップされます。

画像自体は gitlab の人々によって頻繁に管理されているようです。

2
Stunts

imageにgitがインストールされている場合は、Dockerコンテナーでgitコマンドを実行できます。インストールはベースイメージのosに依存します。centos7に基づくdockerfileの例を次に示します。

FROM centos:7
RUN yum clean all && yum install -y git
0
arash sc