2017-06-02 4 views
2

Ich habe eine kleine .NET Core-Webanwendung in einem Docker-Container ausgeführt, die in Jenkins erstellt und bereitgestellt wird. Das Docker-Repository wird über Quay gehostet.Docker Build & Deploy auf Jenkins nimmt immer mehr Zeit in Anspruch

Anfangs dauerte es weniger als eine Minute, & den Container zu erstellen. Aber im Laufe der Zeit hat jeder Build & Deploy immer mehr Zeit in Anspruch genommen, bis zu über einer Stunde. Hier sind einige hoffentlich relevante Teile aus dem Anfang des Protokolls:

aus dem Repository von Git-Check-out:

... 
+ ./build.sh 
+ REPO=quay.io/my/dir 
+ IMAGE=quay.io/my/dir:dddaca1fd347b1fabea342a6a65431b68f793ad4 
+ docker pull quay.io/my/dir 
Using default tag: latest 
latest: Pulling from my/dir 
Digest: sha256:9a654ad205764a668c1fc531c0972d1273b0920dc8282a8c7b6498482cee7975 
Status: Image is up to date for quay.io/my/dir:latest 
+ docker build -t quay.io/my/dir:dddaca1fd347b1fabea342a6a65431b68f793ad4 . 
Sending build context to Docker daemon 121.9 kB 
Sending build context to Docker daemon 121.9 kB 
... 

die Docker Bild schieben, denke ich:

... 
+ '[' true = true ']' 
+ docker tag -f quay.io/my/dir:dddaca1fd347b1fabea342a6a65431b68f793ad4 quay.io/my/dir:latest 
+ '[' true = true ']' 
+ docker tag -f quay.io/my/dir:dddaca1fd347b1fabea342a6a65431b68f793ad4 quay.io/my/dir:latest-master 
+ docker tag -f quay.io/my/dir:dddaca1fd347b1fabea342a6a65431b68f793ad4 quay.io/my/dir:master-62 
+ docker push quay.io/my/dir 
The push refers to a repository [quay.io/my/dir] (len: 26) 
... 

Dann wird die Zeit meistens von folgenden Teilen eingenommen:

... 
7db029aae55d: Preparing 
7db029aae55d: Pushing 
7db029aae55d: Pushed 
55d4937daea6: Preparing 
55d4937daea6: Pushing 
55d4937daea6: Pushed 
7ed278cf0e04: Preparing 
7ed278cf0e04: Pushing 
7ed278cf0e04: Pushed 
master-49: digest: sha256:8ce1e...<more of the key>...90503 size: 21007 
4c16f41d1cc1: Image already exists 
8f1aae847e7a: Image already exists 
28a352fdaf13: Image already exists 
80151bfc7fc5: Image already exists 
54c7eb98ce04: Preparing 
54c7eb98ce04: Pushing 
54c7eb98ce04: Pushed 
b1131d0b29bb: Preparing 
... more of the same 

Ich bin ein Neuling zu Docker und würde einige freundliche Hilfe schätzen. Hier ist meine build.sh und Dockerfile:

build.sh

#!/bin/bash -ex 

REPO=quay.io/my/dir 
IMAGE=$REPO:$GIT_COMMIT 

docker pull $REPO 
docker build -t $IMAGE . 
docker run --rm $IMAGE /bin/bash -c "cd /app/test/Project.Tests && dotnet test" 

if [ "$TAG_LATEST" = true ]; then 
    docker tag -f $IMAGE $REPO:latest 
fi 

if [ "$TAG_LATEST_MASTER" = true ]; then 
    docker tag -f $IMAGE $REPO:latest-master 
fi 

# $TAG defined prior to running script 
docker tag -f $IMAGE $REPO:$TAG 

docker push $REPO 

Dockerfile

FROM microsoft/dotnet:1.1.1-sdk 

EXPOSE 5000 

COPY . /app 
WORKDIR /app 
RUN cd src/Project && dotnet restore --configfile NuGet.config --no-cache 
RUN cd test/Project.Tests && dotnet restore --no-cache 
RUN dotnet build 

WORKDIR /app/src/Project 
CMD ["dotnet", "run", "--server.urls", "https://0.0.0.0:5000"] 

Bild Geschichte

$ sudo docker history quay.io/my/dir 
IMAGE    CREATED    CREATED BY          SIZE    COMMENT 
0e58e5457605  4 days ago   /bin/sh -C#(nop) CMD ["dotnet" "run" "--s... 0B 
<missing>   4 days ago   /bin/sh -C#(nop) WORKDIR /app/src/Project 0B 
<missing>   4 days ago   /bin/sh -c dotnet build       782kB 
<missing>   4 days ago   /bin/sh -c cd test/Project.Tests && dotn... 15.8MB 
<missing>   4 days ago   /bin/sh -c cd src/Project && dotnet rest... 2.4MB 
<missing>   4 days ago   /bin/sh -C#(nop) WORKDIR /app     0B 
<missing>   4 days ago   /bin/sh -C#(nop) COPY dir:c9cbed0051facc2... 62kB 
<missing>   3 weeks ago   /bin/sh -C#(nop) EXPOSE 5000/tcp    0B 
<missing>   4 weeks ago   /bin/sh -c mkdir warmup  && cd warmup ... 297MB 
<missing>   4 weeks ago   /bin/sh -C#(nop) ENV NUGET_XMLDOC_MODE=skip 0B 
<missing>   4 weeks ago   /bin/sh -c curl -SL $DOTNET_SDK_DOWNLOAD_U... 290MB 
<missing>   4 weeks ago   /bin/sh -C#(nop) ENV DOTNET_SDK_DOWNLOAD... 0B 
<missing>   4 weeks ago   /bin/sh -C#(nop) ENV DOTNET_SDK_VERSION=... 0B 
<missing>   4 weeks ago   /bin/sh -c apt-get update  && apt-get i... 1.64MB 
<missing>   4 weeks ago   /bin/sh -c apt-get update && apt-get insta... 123MB 
<missing>   4 weeks ago   /bin/sh -c apt-get update && apt-get insta... 44.6MB 
<missing>   4 weeks ago   /bin/sh -C#(nop) CMD ["/bin/bash"]   0B 
<missing>   4 weeks ago   /bin/sh -C#(nop) ADD file:f4e6551ac34ab44... 124MB 
+0

Können Sie die verschiedenen Layergrößen Ihrer Bilder mit dem Docker History anzeigen? Es wäre besonders nützlich, einige Versionen des Bildes zu vergleichen, wenn Sie sie haben, so dass wir sehen können, ob es bestimmte Schichten gibt, die mit der Zeit exponentiell größer werden. –

+0

machst du saubere Checkouts von der Quellcodeverwaltung bevor du das COPY tust./App? Ich frage mich, ob zwischen den Builds ein paar große Sachen hängen. Ich nehme an, Sie verwenden Internet-Quay, aber wenn Sie Inhouse-Hosted Kai verwenden, funktioniert Ihre Registrierung möglicherweise nicht so gut, was die langsamen Pushs verursacht. – burnettk

+0

@RobBlake Ich habe getan, was Sie sagten (ich hoffe) und fügte diese Informationen hinzu. Ich füge noch einige Teile des Logs hinzu, die helfen könnten. – Groppe

Antwort

2

Ich löste dies durch die letzte Zeile in meinem build.sh Datei zu ändern:

docker push $REPO 

zu

docker push $REPO:$TAG 

ich auf jedem Build das gesamte Repository zurück zum Kai Server schieben, statt von nur dem Bild, das ich gerade erstellt habe. Jeder Build dauert länger als der letzte Build, da das Repository mit jedem Image wächst, das hinzugefügt wird.

+1

Ich dachte, es würde auf den neuesten Stand setzen, anstatt alles zu schieben, aber die Dokumentation und das Testen zeigen etwas anderes. Netter Fund, danke für das Follow-up! – BMitch

Verwandte Themen