ã¢ããªã±ãŒã·ã§ã³ãã³ã³ããåããããšã®å©ç¹ã«ã€ããŠã¯ããè³ã«ããŸãããã·ã¹ãã å šäœããã¹ãããããšãç®çãšããã¢ããªã±ãŒã·ã§ã³ãã¢ããªã±ãŒã·ã§ã³ã® ãã¹ããã³ã³ããåããããšã®å©ç¹ã«ã€ããŠã¯ããŸãè³ ã«ããŸããã ã³ã³ããå ã§ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ããå®è¡ãããšãã¢ããªã±ãŒã·ã§ã³ãæåŸ ã©ããã«å®è¡ãããŠããããšããã確å®ã«æããããšãã§ããŸãã ããã«ããã¹ãã Docker ã€ã¡ãŒãžãšããŠããã±ãŒãžåããããšã§ãè€æ°ã®ãã·ã³éã§ãã¹ãããã°ããå®è¡ããäžè²«æ§ã®ããç°å¢ã確ä¿ã§ããŸãã ãã®æçš¿ã§ã¯ããã¹ãããŒãªã³ã°ã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ããåãšãããŒã«ã®åäœãã¹ããšçµ±åãã¹ãã®ã³ã³ããåã«ã€ããŠèª¬æãããããã®å©ç¹ã瀺ããŸãã
ããŒãªã³ã°
ã³ã³ãããŒåããããã¹ã ããŒã«ã¯ãæ§æã®ç°ãªã 5 ã€ã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®çŸåšã®ãããªãã¯ã¹å šäœã§ãDocker ãšã³ãžã³ããŠãããŒãµã« ã³ã³ãããŒã« ãŠã£ã³ããŠãããã³ Docker Trusted ã¬ãžã¹ããªãå«ã Docker EE ã¹ã¿ãã¯ã®ã¹ãã¬ã¹ ãã¹ãã«äœ¿çšãããäžé£ã®ããŒã«ã§ãã ããŒã«èªäœã«ã¯ãããã€ãã®éèŠãªããããã£ããããŸãã
- ç¬èªã®ä»®æ³ Python ç°å¢ã§ Python 3 ã§èšè¿°ãããŠããŸã
- 2ã€ã®å€éšã¯ã©ã€ã¢ã³ããã€ããªã䜿çš
- ã·ã¹ãã ãã¹ããå®è¡ããããã®å€éšæ§æãã¡ã€ã«ãžã®3ã€ã®äŸåé¢ä¿ããããŸã
- ç¬èªã®åäœãã¹ããšçµ±åãã¹ãã«åæ Œãã
- ãã¹ãŠã®ã·ã¹ãã ãã¹ãã®ãã°ãåéããŸã
ãããã®ããããã£ã¯ãããŒã«ãã³ã³ãããŒåãããŠãããã©ããã«é¢ä¿ãªãååšããŸããããã®ããŒã«ãã³ã³ãããŒåããããšã§ãéçºãã³ãŒã管çãã³ã©ãã¬ãŒã·ã§ã³ãã©ã®ããã«å®¹æã«ãªãããèŠãŠãããŸãããã®æçš¿ã«ã¯å€ãã®ããã¹ããçšèªãããã®ã§ãå ±éã®ããŒã¹ããå§ããããã«ãããããã®ã¿ã€ãã®ãã¹ããç§ãã¡ã®ç®çã®ããã«äœã衚ããŠããã®ãã説æããŸãã
ã·ã¹ãã ããŒã«ããã¯ã¹: å®éã®ã¢ããªã±ãŒã·ã§ã³/ããŒã«ã ããã¯ãã³ã³ããåããå®å šãªã¢ããªã±ãŒã·ã§ã³ãšèããããšãã§ããŸãã
åäœãã¹ã: ãããã¯ãã¢ããªã±ãŒã·ã§ã³ã®åäœãã¹ãã§ãã å€éšäŸåé¢ä¿ã¯ãã¹ãŠã¢ãã¯ãããŸããã³ã³ããå ã§åäœãã¹ããå®è¡ããŸãã
çµ±åãã¹ã:ãããã¯ãã©ã€ãã·ã¹ãã ã«äŸåããçµ±åãã¹ãã§ãã ãããã®ãã¹ãã¯ãã³ã³ãããŒå ã§ãå®è¡ãããŸãã
ããã«ãŒãã¡ã€ã«ã®äœæ
ç§ãã¡ã®ããã«ãŒãã¡ã€ã«
1 ãã€ãœã³ãã:3.7.1 2 3 ã³ã㌠./client-binaries/Linux/<binary_1> /usr/local/bin/<binary_1> 4 COPY ./client-binaries/Linux/docker-18.09.4 /usr/bin/docker 5 6 ã¯ãŒã¯ãã£ã¬ã¯ããª/system_toolbox 7 ã³ã㌠./pip-requirements/requirements.txt ./proj/requirements.txt 8 RUN pip install -r ./proj/requirements.txt 9 10 ã³ã㌠./çµ±åãã¹ã ./çµ±åãã¹ã11 ã³ã㌠./ãã¹ãã±ãŒã¹ ./ãã¹ãã±ãŒã¹12 13 COPY ./sut-configs ./sut-configs14 ã³ã㌠./<binary_1>-configs ./<binary_1>-configs15 16 ã³ã㌠./ããŒã«ããã¯ã¹ ã/ããŒã«ããã¯ã¹17 18 ã³ã㌠./ã¡ã€ã¯ãã¡ã€ã« ã/ã¡ã€ã¯ãã¡ã€ã«19 ã³ã㌠./README.md ./README.md 20 ã³ã㌠./setup.py ./setup.py 21 RUN make install-dev 22 |
ã³ã³ãããŒå
ã®ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ã¯ãã€ã¡ãŒãžã«åºã¥ããŠããå¿
èŠããããŸãã çŸåšäœæ¥ããŠãããããžã§ã¯ãã¯Python 3ã§æžãããŠããã®ã§ããã£ã¬ã¯ãã£ãã䜿çšã㊠FROM python:3.7.1 å
¬åŒã«ç¶æãããŠããPythonã€ã¡ãŒãžãããã«ãããŸãã ããã¯ç§ãã¡ã®èŠªã§ãããããŒã¹ã€ã¡ãŒãžãšåŒã°ããããšããããŸãã ç§ãã¡ã¯ 3.7.1 ããŒãžã§ã³ã®ã€ã¡ãŒãžã䜿ã£ãŠãããDebian Linux (stretch ãšãåŒã°ããŸã) OS ãæäŸããŠããŸãã ããã¯ãããŒã«ã®äžéšã Alpine Linux ããŒãžã§ã³ã«ã¯å«ãŸããŠããªã SSH ã¯ã©ã€ã¢ã³ãã«äŸåããŠããããã§ãããPython ã®ããã±ãŒãžãããŒãžã£ãŒ pip ãä»ã㊠Python SSH ã¢ãžã¥ãŒã«ã§ãã Paramiko ãã€ã³ã¹ããŒã«ã§ãã䟿å©ããæ±ããŠããããã§ãã
åè¿°ã®ããã«ããã®ãããžã§ã¯ã㯠2 ã€ã®å€éšã¯ã©ã€ã¢ã³ã ãã€ããªã«äŸåããŠããŸãã ãã£ã¬ã¯ãã£ãã䜿çšã㊠COPY <src> <dst> ããããã Dockerfile ã«å«ããŸãã ãã®ã³ãã³ãã¯ãæå®ãããå®å
ãã¹ã«ããã€ã¡ãŒãžã®ãã¡ã€ã«ã·ã¹ãã ã«ãã€ããªãã³ããŒããŸãã äœ¿çš COPY ãšãã®ä»£æ¿ã³ãã³ãADDã®éãã«ã€ããŠã®ããã§ã®ã¡ã¢ã Dockerã®ãã¹ããã©ã¯ãã£ã¹ã¢ãããŒãã䜿çšããŸããADDãDockerCOPYã€ã¡ãŒãžå
ã®ãã£ã¬ã¯ããªãšããŠèªåçã«è§£åããããœãŒã¹ãã¹ããtarã¢ãŒã«ã€ããç§»åãããªã©ãããã€ãã®è¿œå æ©èœããããŸãããããã£ãŠããã¡ã€ã«ããã£ã¬ã¯ããªãã³ããŒããDockerfileãéå°ã«ãšã³ãžãã¢ãªã³ã°ããªããšããç®çã®ããã«ã COPY é©åãªã³ãã³ãã§ãã
ã¯ã©ã€ã¢ã³ããã€ããªã®è¿œå 以å€ã®ãã¹ãŠã®ã³ãã³ãã¯å
éš /system_toolboxã«ããããã WORKDIR ãã£ã¬ã¯ãã£ãã /system_toolboxã«èšå®ããŸãã ããã«ãããã³ã³ãã /system_toolbox å
ã®çŸåšã®äœæ¥ãã£ã¬ã¯ããªãèšå®ãããDockerfileå
ã®è¿œå ã®ããã¹ããã¯ãªãŒã³ã¢ããã§ããŸãã ããšãã°ãDockerfile ã® 6 è¡ç®ãã 16 è¡ç®ã次ã®ããã«èšè¿°ã§ããŸãã
6 ã³ã㌠./çµ±åãã¹ã /system_toolbox/çµ±åãã¹ã 7 ã³ã㌠./ãã¹ãã±ãŒã¹ /system_toolbox/ãã¹ãã±ãŒã¹ 8 9 COPY ./sut-configs /system_toolbox/sut-configs 10 ã³ã㌠./<binary_1>-èšå® /system_toolbox/<binary_1>-configs 11 12 ã³ã㌠./ããŒã«ããã¯ã¹ /system_toolbox/ããŒã«ããã¯ã¹ 13 |
ããã¯ããŸãããã§ãããããã ããèªã¿ã«ããã芪ãã£ã¬ã¯ããªæ§é ã«å€æŽãããå Žåã¯ããã¹ãŠã®è¡ã§ãã®ãã¹ã倿Žããå¿
èŠããããŸãã 代ããã«ããã£ã¬ã¯ãã£ãã䜿çšããŠã WORKDIR 次ã®ããã«åã¹ããŒãã¡ã³ããççž®ã§ããŸãã
6 ã¯ãŒã¯ãã£ã¬ã¯ããª/system_toolbox 7 ã³ã㌠./pip-requirements/requirements.txt ./proj/requirements.txt 8 RUN pip install -r ./proj/requirements.txt 9 10 ã³ã㌠./çµ±åãã¹ã ./çµ±åãã¹ã11 ã³ã㌠./ãã¹ãã±ãŒã¹ ./ãã¹ãã±ãŒã¹12 13 COPY ./sut-configs ./sut-configs14 ã³ã㌠./<binary_1>-configs ./<binary_1>-configs15 16 ã³ã㌠./ããŒã«ããã¯ã¹ ã/ããŒã«ããã¯ã¹17 |
äœæ¥ãã£ã¬ã¯ããªãèšå®ããããšãäœæ¥ãã£ã¬ã¯ããªã倿Žãããªãéããæ¬¡ã®ã³ãã³ãã¯ãã¹ãŠãã®ãã£ã¬ã¯ããªããå®è¡ãããŸãã ããã«ãŒãã¡ã€ã«ã®æ¬¡ã® 2 è¡:
7 ã³ã㌠./pip-requirements/requirements.txt ./proj/requirements.txt 8 RUN pip install -r ./proj/requirements.txt |
Python èŠä»¶ãã¡ã€ã«ãã³ããŒãããã£ã¬ã¯ãã£ãã䜿çšããŠãããã®èŠä»¶ããã¹ãŠã€ã³ã¹ããŒã«ããŸã RUN ã ãã®æ¹æ³ã§ RUN ãåŒã³åºããšã次ã®ã³ãã³ã RUN ãã·ã§ã«ã§å®è¡ãããLinux ã³ã³ãããŒã§ã¯æ¢å®ã§å®è¡ãããŸã /bin/sh -c ã
次㮠Dockerfile è¡ã¯ããã¹ããã©ã€ãã©ãª ã³ãŒããããã³å¿ èŠãªæ§æãã¡ã€ã«ãèšå®ããããã«ããŒã«ã«ãã£ãŠäœ¿çšãããŸãã
# ããŒã«ã®ã³ãŒã粟床ããã¹ãããããã®çµ±åãã¹ã ã³ã㌠./çµ±åãã¹ã ./çµ±åãã¹ã# ããŒã«ãå®è¡ããã·ã¹ãã ãã¹ãã±ãŒã¹ ã³ã㌠./ãã¹ãã±ãŒã¹ ./ãã¹ãã±ãŒã¹# ããŒã«ã®èšå®ãã¡ã€ã« COPY ./sut-configs ./sut-configs# ããŒã«ã®èšå®ãã¡ã€ã« ã³ã㌠./<binary_1>-configs ./<binary_1>-configs# ããŒãªã³ã°ã©ã€ãã©ãª ã³ã㌠./ããŒã«ããã¯ã¹ ã/ããŒã«ããã¯ã¹ |
ãããŠæåŸã«ãããã«ãŒãã¡ã€ã«ã®æåŸã®2è¡:
20 ã³ã㌠./setup.py ./setup.py 21 RUN make install-dev |
Python ã»ããã¢ãã ã¹ã¯ãªãããã³ããŒããŠããŒã«ãããã±ãŒãžåããŠå®è¡ããŸã make install-devãã詳现ã«ã€ããŠã¯ Makefile ã»ã¯ã·ã§ã³ã§èª¬æããŸãã
ã¡ã€ã¯ãã¡ã€ã«ã®äœæ
ã¡ã€ã¯ãã¡ã€ã«ã®äœæã¯ãå€ãã®å Žåãåéºã§ãã ãã®ã»ã¯ã·ã§ã³ã§ã¯ãããŒã«ã®å®è¡ãå¯èœã«ããäž»èŠãªã³ã³ããŒãã³ãã®ããã€ãã«ã€ããŠèª¬æããŸãã ãŸããã³ã³ããå ã®ããŒã«ããã¹ãããåäœãã¹ããšçµ±åãã¹ãã«ã€ããŠãèŠãŠãããŸãã Makefile ã®ãã®éšåã¯ãã€ã³ã¹ããŒã« ã¿ãŒã²ãããDocker ã¿ãŒã²ããããã¹ã ã¿ãŒã²ããããŠãŒãã£ãªãã£ã® 4 ã€ã®ã»ã¯ã·ã§ã³ã«åãããŠããŸãã 以äžã® Makefile ã®æç²ã®åŸã«ã¯ããŠãŒãã£ãªãã£ã¿ãŒã²ãããããŒãžã§ã³ãã§ãã¯ãè¡ããããæåã® 3 ã€ã®ã»ã¯ã·ã§ã³ã®èª¬æãç¶ããŸãã
1ã¡ãžã£ãŒ?=0
2ãã€ããŒ?=1
3
4 ããŒãžã§ã³=$(ã¡ãžã£ãŒ).$(ãã€ããŒ)
5
6 APP_NAME = "ã·ã¹ãã ããŒã«ããã¯ã¹"
7
8#ç§ãã¡ã®ããã«ãŒããã¢ã«ãŠã³ãå
9#HUB_NAMESPACE = "<hub_name>"
10
11 #ããã«ãŒãã¡ã€ã«ã®å Žæ
12 DOCKER_FILE_DIR = "ããã«ãŒãã¡ã€ã«"
13 DOCKERFILE = "${DOCKER_FILE_DIR}/Dockerfile"
14
15 IMAGE_NAME = "${APP_NAME}"
16 CUR_DIR = $(ã·ã§ã« ãšã³ãŒ "${PWD}")
17
18#Pythonãã©ãŒããããã§ãã«ãŒçšã ããã©ã«ã㯠78 ã§ã
19 PEP8_MAX_LINE_LENGTH = 99
20
21#ãŠããããã¹ããªãã·ã§ã³
22 NOSETEST_OPTS = --åé·æ§=2 --include='.*_test.py' --詳现ãšã©ãŒ --ã©ã=ããŒã«ããã¯ã¹
23 COVERAGE_OPTS = --ã«ãã¬ããžãã --ã«ããŒããã±ãŒãž=ããŒã«ããã¯ã¹ --ã«ããŒ-html --ã«ããŒãå«ã --ã«ããŒãã¹ã --ã«ããŒæ¶å» \
24 --cover-html-dir=../ãã¹ãçµæ/åäœãã¹ãã³ãŒãã«ãã¬ããž
25
26 #################################
27#ã€ã³ã¹ããŒã«ã¿ãŒã²ãã
28 #################################
29 .PHONY: install-dev
31 ã€ã³ã¹ããŒã«éçº:
32 @echo "+ $@"
33
34 @pip -e ãã€ã³ã¹ããŒã«ããŸãã35
36 .åœç©:ãããããªãŒãº
37 @echo "+ $@"
38 @pipããªãŒãº|grep -v system_toolbox > pip-requirements/requirements.txt
39
40
41 #################################
42#ããã«ãŒã¿ãŒã²ãã
43 #################################
44 .åœç©:ã¯ãªãŒã³ã€ã¡ãŒãž
45 ã¯ãªãŒã³ã€ã¡ãŒãž: ããŒãžã§ã³ãã§ãã¯
46 @echo "+ $@"
47 @docker rmi ${HUB_NAMESPACE}/${IMAGE_NAME}:latest ||ç
48 @docker rmi ${HUB_NAMESPACE}/${IMAGE_NAME}:${VERSION} ||ç
49
50 .åœç©:ç»å
51 ç»å: ããŒãžã§ã³ ãã§ãã¯
52 @echo "+ $@"
53 @docker build -t ${HUB_NAMESPACE}/${IMAGE_NAME}:${VERSION} -f ./${DOCKERFILE} .54 @docker tag ${HUB_NAMESPACE}/${IMAGE_NAME}:${VERSION} ${HUB_NAMESPACE}/${IMAGE_NAME}:latest
55 @echo ãå®äºãã
56 @dockerç»å --ãã©ãŒããã '{{.Repository}}:{{.Tag}}\t\t Built: {{.CreatedSince}}\t\tSize: {{.ãµã€ãº}}' |\
57 grep ${IMAGE_NAME}:${VERSION}
58
59 .åœç©:ããã·ã¥
60ããã·ã¥:ã¯ãªãŒã³ç»å
61 @echo "+ $@"
62 @docker push ${HUB_NAMESPACE}/${IMAGE_NAME}:${VERSION}
63 @docker push ${HUB_NAMESPACE}/${IMAGE_NAME}:latest
64
65 #################################
66#ãã¹ãã¿ãŒã²ãã
67 #################################
68 .åœç©:ãã¹ããŠããã
69 ãã¹ããŠããã:
70 @echo "+ $@"
71 錻ãã¹ã ${NOSETEST_OPTS}
72
73 .ãã©ããŒ:ãã§ãã¯FMT
74 #check-FMT: ç»å
75 ãã§ãã¯FMT:
76 @echo "+ $@"
77 pycodestyle --ãã¡ã€ã«å='*.py' --exclude='*.sh,*.md,*.txt,Makefile,*.swp' --max-line-length=${PEP8_MAX_LINE_LENGTH} *
78
79 .ãã©ããŒ:ãã¹ãã¹ã¿ãã£ãã¯
80ãã¹ãéç:
81 @echo "+ $@"
82 ãã€ãªã³ã-déè€ã³ãŒããã¹ãã±ãŒã¹
83 ãã€ãªã³ãããŒã«ããã¯ã¹
84 ãã€ãªã³ãçµ±åãã¹ã
85
86 .åœç©:ãã¹ãŠãã¹ãããŸã
87ãã¹ããªãŒã«:ãã§ãã¯FMTãã¹ãéçãã¹ããŠããã
88
89 .åœç©:ãã¹ãã³ã³ãã
90ãã¹ãã³ã³ãã:ç»å
91 @echo "+ $@"
92 @docker run --rm --name toolbox-unit-tests ${HUB_NAMESPACE}/${IMAGE_NAME}:latest make test-all
93 @docker run --rm --name toolbox-int --volume ${CUR_DIR}/results:/root/logs -e REGISTRY_USERNAME=foo -e REGISTRY_PASSWORD=bar \
94 ${HUB_NAMESPACE}/${IMAGE_NAME}:latest python ./integration-tests/testbed_validation.py
95
96 .ãã©ããŒ:çµ±å-éç
97çµ±å-éç:ç»å
98 @echo "+ $@"
99 @docker run --rm --name toolbox-int --volume ${CUR_DIR}/results:/root/logs -e REGISTRY_USERNAME=foo -e REGISTRY_PASSWORD=bar \
100 ${HUB_NAMESPACE}/${IMAGE_NAME}:latest python ./integration-tests/testbed_validation.py
101 #@python ./integration-tests/testbed_validation.py
102
103 .PHONY:çµ±å-ãã¹ãããã-調æ»
104çµ±åãã¹ãããã調æ»:
105 @echo "+ $@"
106 @python ./integration-tests/testbed_validation.py --topology-filter=poc_ --sut-filter=${TESTBED_SURVEY_SUT} \
107 --create-system ${INTEGRATION_PERSONA} ${DRY_RUN}
108
109
110 #################################
111#ãŠãŒãã£ãªãã£
112 #################################
113
114 .PHONY: ããŒãžã§ã³ ãã§ãã¯115ããŒãžã§ã³ãã§ãã¯:
116 @echo "+ $@"
117 if [ -z "${VERSION}" ];ããããã\
118ãšã³ãŒãããŒãžã§ã³ãèšå®ãããŠããŸããã;\
119 誀ã ;\
120 ãã®ä» \
121 echo "VERSION is ${VERSION}";\
122 fi
123
|
ã€ã³ã¹ããŒã« ã¿ãŒã²ãã
ã€ã³ã¹ããŒã« ã¿ãŒã²ããã«ã¯ 2 ã€ã®ã³ã³ããŒãã³ãããããŸãã æåã® install-dev㯠Dockerfile ããå®è¡ãããŸãã RUN make install-devãããã«ãŒãã¡ã€ã«ã§å®è¡ããããšãå®è¡ãããŸãpip install -e . ã³ã³ããå
ã ããã¯æ¥œããã³ãã³ãã§ããã詳现ãå®éã«ææ¡ããã«ã¯å°ãæãäžããå¿
èŠããããŸããã
ãã®ã³ãã³ãã®å©äŸ¿æ§ãææ¡ããããã«ãããã§ã¯Pythonä»®æ³ç°å¢ã«ã€ããŠå°ãèã«çœ®ããŸãã Python ã¢ããªã±ãŒã·ã§ã³ãäœæããå Žåã¯ãPython ããã±ãŒãžãšæ¡åŒµæ©èœãé
åžããã¡ã«ããºã ã§ãã Distutils ã§äœ¿çšã§ããã¢ããªã±ãŒã·ã§ã³ã®èª¬æãæäŸãããã¡ã€ã«ãçšæ setup.py ããã®ãäžè¬çã§ãã ããå
·äœçã«ã¯ãPythonã®ããã¥ã¡ã³ããããã»ããã¢ããã¹ã¯ãªããã¯ãDistutilsã䜿çšããŠã¢ãžã¥ãŒã«ããã«ããé
åžãããã³ã€ã³ã¹ããŒã«ãããã¹ãŠã®ã¢ã¯ãã£ããã£ã®äžå¿ã§ãã ã»ããã¢ããã¹ã¯ãªããã®äž»ãªç®çã¯ãã¢ãžã¥ãŒã«ãæäœããããŸããŸãªã³ãã³ããæ£ããããšãããããã«ãDistutilsã«ã¢ãžã¥ãŒã«ã®é
åžãèšè¿°ããããšã§ããã
ãã ããPythonã䜿çšããå Žåã¯ãä»®æ³ç°å¢ã§å®è¡ããããã«ãã¹ãŠãèšå®ããããšããããããŸãã ã³ãŒãã倿Žãããã³ã«äœæ¥ãã£ã¬ã¯ããªãä»®æ³ç°å¢ã«ãªã³ã¯ããããã«ç¹°ãè¿ãpython setup.py installå¿
èŠãããã®ã¯å°ãé¢åãªå Žåããããããååšãããã£ã¬ã¯ããªsetup.pyã§å®è¡ã§ããŸãpip install -e .ãããã«ããã倿Žãå ãããã¡ã€ã«ãšä»®æ³ç°å¢ã®ããã±ãŒãžã®éã«sudoã·ã³ããªãã¯ãªã³ã¯ãäœæããããããææ°ããŒãžã§ã³ã®Pythonã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ããŸãã
ã€ã³ã¹ããŒã« ã¿ãŒã²ãã pip-freezeã® 2 çªç®ã®éšå ã¯æ¥œãããå°ããããããããªã£ãŠããŸãã ã³ã³ããå
ã§ãã¹ããå®è¡ããå¿
èŠã¯ãããŸããããPythonã§éçºãããšãã«ç¥ã£ãŠãããšäŸ¿å©ãªã³ãã³ãã§ãã ã¢ããªã±ãŒã·ã§ã³ãé©åãªæ°ã®ããã±ãŒãžãèç©ããŠããå Žåã ã§ requirements.txtãã¹ãŠã®ããŒãžã§ã³ãèªåã§ç®¡çããã®ãé£ããå ŽåããããŸãã ãã®ã³ãã³ãã¯ãã¢ããªã±ãŒã·ã§ã³ãšäºææ§ã®ãããã¹ãŠã®ããã±ãŒãžããŒãžã§ã³ãååŸããã¢ããªã±ãŒã·ã§ã³ã®ã requirements.txt èªåçã«æŽæ°ããããã®åªããæ¹æ³ã§ãã
ããã«ãŒã¿ãŒã²ãã
Docker ã¿ãŒã²ããã§ã¯ãã€ã¡ãŒãžã®äœæãšä¿å®ã«ã€ããŠèª¬æããŸãã æåã® clean-image ãã®ã¯åææ¡ä»¶ãšããŠå®è¡ version-check ãããæ¬¡ã«ææ°ããŒãžã§ã³ãšéžæããããŒãžã§ã³ã®äž¡æ¹ãåé€ããŸãã ã€ã¡ãŒãžãåé€ããããšãããšãã«ã€ã¡ãŒãžãååšããªããšãããšã©ãŒã衚瀺ãããŠãããã¹ãããŒã«ãããã§ã·ã£ããããŠã³ããããšã¯ãããŸããããããã£ãŠãæ§æã䜿çšããŸã command  || true ã ããŒã«é¢æ°ã¯åžžã«trueãè¿ããã¹ã¯ãªãããäžå¿
èŠã«äžæ¢ããã®ãé²ããŸãã
ã€ã¡ãŒãžã®æ§ç¯ãšã¿ã°ä»ãã«ã¯ã image ã¿ãŒã²ããã䜿çšããŸãã ããã«ãããåææ¡ä»¶ã®ããŒãžã§ã³ ãã§ãã¯ãå®è¡ãããæå®ããã HUB_NAMESPACE, IMAGE_NAMEã䜿çšã㊠VERSION ãåã«äœæãã Dockerfile ããã€ã¡ãŒãžããã«ããããŸãã æ¬¡ã«ãã€ã¡ãŒãžã«ã¿ã°ãä»ããããã€ã¡ãŒãžãæ£ãããã«ãããã docker images ã¿ã°ä»ããããããšã確èªããããã«å®è¡ãããŸãã
ãããŠæåŸã«ãç§ãã¡ã®ã€ã¡ãŒãžã clean-image ããã·ã¥ããããã®ãäž¡æ¹ã image åææ¡ä»¶ã§ãã æ¬¡ã«ãææ°ããŒãžã§ã³ãšææ°ã®ã¿ã°ä»ãã€ã¡ãŒãžã®äž¡æ¹ã Docker Hub ã«ããã·ã¥ãããŸãã Docker Hubã«ãã°ã€ã³ããŠããå Žåã¯ãããã·ã¥ãèªåçã«å®äºãããã以å€ã®å Žåã¯ããã®æé ã§ãã°ã€ã³è³æ Œæ
å ±ãå
¥åããå¿
èŠããããŸãã
ãã¹ã察象
ããã¹ã ã¿ãŒã²ãããã»ã¯ã·ã§ã³ã§ã¯ãåäœãã¹ããçµ±åãã¹ããããã³ã¢ããªã±ãŒã·ã§ã³ãããŒã«ã«ã§å®è¡ããŠã³ã³ãããŒã§å®è¡ããããã®ã·ã¹ãã ããŒã«ã®ã¿ãŒã²ããã«ã€ããŠèª¬æããŸãã
æåã®ã¿ãŒã²ãã test-unit ã¯ãPython çšã® Nose ãã¹ã ããã±ãŒãžã䜿çšããŠã·ã¹ãã ãã¹ã ã³ãŒãã«å¯ŸããŠåäœãã¹ããå®è¡ããPython 圢åŒãã§ã㯠ããã±ãŒãž Pycodestyle ã䜿çšããŠããŒã«ããã¯ã¹ ã³ãŒãã®ã¹ã¿ã€ã«èŠåããã§ãã¯ããã·ã¹ãã ãã¹ã ã±ãŒã¹ãã·ã¹ãã ããŒã«ããã¯ã¹ ã³ãŒãã check-fmt test-static ããã³çµ±åãã¹ãã«å¯Ÿã㊠Python ãªã³ã¿ãŒ Pylint ãå®è¡ããŸãã
æåŸã® 2 ã€ã®ã¿ãŒã²ããã¯ãDockerfile ã§åã«äœæããã€ã¡ãŒãžã䜿çšããŠã³ã³ãããŒã§ãã¹ããå®è¡ããã¿ãŒã²ããã§ãã ã¿ãŒã²ãã test-container ã¯åäœãã¹ããå®è¡ããç¶ããŠçµ±åãã¹ããå®è¡ããŸãã ã³ãã³ã:
92 docker run --rm --name toolbox-unit-tests ${HUB_NAMESPACE}/${IMAGE_NAME}:latest make test-all
|
ãã©ã°ã䜿çšããŠ--rmããã»ã¹ãå®äºãããã³ã³ãããåé€ãããã©ã°ã䜿çšããŠã³ã³ããã«ç¹å®ã®ååãæå®ããã€ã¡ãŒãž${HUB_NAMESPACE}/${IMAGE_NAMEã®ææ°ããŒãžã§ã³ãéžæããŸã}ã--name:latestããã³ã³ãã³ãmake test-allãéä¿¡ããŸããtest-unitcheck-fmttest-staticdocker run
çµ±åãã¹ãã¯ã以äžãåŒã³åºãããšã«ãã£ãŠå®è¡ãããŸãã
93 docker run --rm --name toolbox-int --volume ${CUR_DIR}/results:/root/logs -e REGISTRY_USERNAME=foo -e REGISTRY_PASSWORD=bar \
94 ${HUB_NAMESPACE}/${IMAGE_NAME}:latest python ./integration-tests/testbed_validation.py
|
ããã«ãããã·ã¹ãã ããŒã«ããã¯ã¹ã«å¯ŸããŠçµ±åãã¹ããå®è¡ãããŸãã ãŸããDockerããªã¥ãŒã ãäœæããŠãã¢ããªã±ãŒã·ã§ã³ããäœæããããã°ãã¡ã€ã«ãããŒã«ã«ãã·ã³ã«è»¢éããã³ã³ãããåé€ããããšãã«è¡šç€ºããŸãã æåŸã«ãå®è¡ãã integration-static ãšãã³ã³ãããŒå
ã®éççµ±åãã¹ãã®ã¿ãå®è¡ãã integration-testbed-survey ãã©ã€ã ã·ã¹ãã ã§çµ±åãã¹ããå®è¡ãããŸãã
ã³ã³ãããŒåããããã¹ããå®è¡ããæ¹æ³
ãã®èšå®ã®åŸãç§ãã¡ã¯ä»ãç§ãã¡ã®ä»äºã®å ±é ¬ã享åããããšãã§ããŸãã ã³ã³ãããŒå ã§ãã¹ãŠã®ãã¹ããå®è¡ããæ¹æ³ã«ã€ããŠèª¬æããŸããããŒã«ããã¯ã¹ã«å¯ŸããŠããã€ãã®ã·ã¹ãã ãã¹ããå®è¡ããããšããŸãããããã®éã«èª°ããããŸããŸããŒã«ããã¯ã¹ã©ã€ãã©ãªã倿Žããå Žåãããã±ãŒãžã®ããŒãžã§ã³ã倿Žããããããã€ãã©ã€ã³å ã®å¥ã®PRãšç¡æèã®ãã¡ã«ç«¶åããã©ã€ãã©ãªæ©èœã远å ãããããå Žåãããã¯åžžã«æ¥œããã.... ãŸãããã¯ç§ã®ãã·ã³ã§åäœããŸãããšããå¿çã
ããã軜æžããããã«ãDocker Hubãªããžããªã«ããã·ã¥ãããŠããããã make test-container å®å
šã«æ©èœããŠãããšç¢ºä¿¡ããŠããã€ã¡ãŒãžããæåã«åäœãã¹ããå®è¡ã§ããŸãã æ¬¡ã«ãä¿¡é Œã§ããã€ã¡ãŒãžã«å¯ŸããŠãçµ±åãã¹ããå®è¡ããŸãã ããã«ããããã·ã³éã§åãç°å¢ã§ãã¹ããå®è¡ãããããã«ãªããäžè¬çã«éçºãè¿
éã«ãªããã³ãŒãã£ã³ã°ãšã¯ã¹ããªãšã³ã¹ãããæ¥œãããªããŸãã ãã£ã¬ã¯ããª${CUR_DIR}/resultsãã«ãªã³ã¯/root/logsããããªã¥ãŒã ãäœæããã®ã§ãã³ã³ããã§ã®å®è¡äžã«ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠçæããããã¹ãŠã®ãã°ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ããããšãã§ããŸãã
ä»åŸã¯ãã³ã³ãããŒã§ããŸããŸãªãã¹ããå®è¡ã§ãããããæè»æ§ãå€§å¹ ã«åäžããŸãã ç°ãªããã·ã³éã§äžè²«ããç°å¢ã§ãã¹ããå®è¡ããæœåšçãªç«¶åãåé¿ã§ããããšã«å ããŠããœãŒã¹ã³ãŒããšãã¹ãã³ãŒãã®äžè²«æ§ãç¶æããªããããããã®ãã¹ãã宿çã«å®è¡ããèªåJenkinsãžã§ãã®èšå®ã«é©ããŠããŸãã