ä»å¹Žã®åãã«ãCI / CDããã»ã¹ããµããŒãããããã®ãªãŒãã³ãœãŒã¹ãŠãŒãã£ãªãã£ïŒdappããŒãžã§ã³0.25ïŒã«ååãªæ©èœã»ããããããã€ãããŒã·ã§ã³ã®äœæ¥ãéå§ããããšå€æããŸããã ããŒãžã§ã³0.26ã§ã¯ãYAMLæ§æãç»å ŽããRuby DSLãã¯ã©ã·ãã¯ãšããŠå®£èšãããŸããïŒãã®åŸããµããŒããããªããªããŸãïŒã 次ã®ããŒãžã§ã³0.27ã§ã¯ãäž»ãªé©æ°ã¯Ansibleãåããã³ã¬ã¯ã¿ãŒã®å€èŠ³ãšèããããšãã§ããŸãã ãããã®æ°è£œåã«ã€ããŠããã«è©³ãã説æãããšããæ¥ãŸããã
2019幎8æ13æ¥æŽæ°ïŒ dappãããžã§ã¯ãã®ååãwerfã«å€æŽããããã®ã³ãŒããGoã«æžãæããããããã¥ã¡ã³ããå€§å¹ ã«æ¹åãããŸããã
èæ¯
ç§ãã¡ã¯2幎以äždappãéçºããŠãããæ¥åžžã®ã¡ã³ããã³ã¹ã§ããŸããŸãªãµã€ãºã®å€ãã®ãããžã§ã¯ããç©æ¥µçã«äœ¿çšããŠããŸãã ãŠãŒãã£ãªãã£ã®æåã®ããŒãžã§ã³ã¯ã Chefã䜿çšããŠã€ã¡ãŒãžãæ§ç¯ããããšãç®çãšããŠèæ¡ãããŸããã ããã«ã Rubyãã»ãšãã©ãã¹ãŠã®ãšã³ãžãã¢ãšéçºè ã«éŠŽæã¿ããããšããäºå®ãè¿œå ãããšããdappãRuby gemãšããŠå®è£ ãããšããè«ççãªæ±ºå®ãäžããŸããã Dappfileæ§æãRuby DSLã®åœ¢åŒã§äœæããããšãé©åã§ãããšèããããŸãã-è¿ããã£ãŒã«ãã§ããVagrantããã®æåäŸãç¥ãããŠããããããªãããããã§ãã
ãŠãŒãã£ãªãã£ãéçºããããšãdappã«ã¯2çªç®ã®å°éåéã§ããKubernetesãžã®ã¢ããªã±ãŒã·ã§ã³é ä¿¡ãå¿ èŠã§ããããšãç解ãããããã«ãªããŸããã ãã®ãããHelmãã£ãŒãã§äœæ¥ããã¢ãŒããããããšã³ãžãã¢ã¯Goã§YAMLæ§æãšãã³ãã¬ãŒãããã¹ã¿ãŒããŸããããéçºè ã¯Helmã«ããããéä¿¡ãå§ããŸããã äžæ¹ã§ã¯ãKubernetesãžã®é ä¿¡ã¯dappã®äžå¯æ¬ ãªéšåã«ãªããä»æ¹ã§ã¯ãGoã¯Dockerããã³Kubernetesãšã³ã·ã¹ãã ã®äºå®äžã®æšæºã«ãªã£ãŠããŸãã Rubyã§æžãããdappã¯ä»ã§ã¯èŠããŸããïŒDockerã³ãŒããåå©çšããã®ãé£ããå ŽåããŠãŒã¶ãŒã¯ãã°ãã°ã¢ã»ã³ããªãã·ã³ã«Rubyã眮ããããªãã ãã§ãããã€ããªãããŠã³ããŒãããæ¹ãã¯ããã«ç°¡åã§éŠŽæã¿ãããã§ãããã®çµæãdappéçºã®äž»ãªç®æšã¯ïŒaïŒã³ãŒãããŒã¹ã®Goãžã®ç¿»èš³ãbïŒYAMLæ§æã®å®è£ ã
ããã«ãéå»æ°å¹Žéãã·ã§ãã¯æ©æ¢°ã®å¶åŸ¡ãšçµã¿ç«ãŠã®äž¡æ¹ã®çç±ã§ãç§ãã¡ã«åãã®ããããŠããŸããã çµå±ã®ãšãããAnsibleã«åãæ¿ããããšã§ãDevOpsãšã³ãžãã¢ã ãã§ãªããäŒè°ã§æãé »ç¹ã«çºçããåé¡ã¯dappã§ã®Ansibleã®ãµããŒãã§ãã ã ãããã£ãŠã3çªç®ã®ç®æšã¯Ansible-collectorã®å®è£ ã§ããã
YAMLæ§æ
å ã»ã©ã ãã®èšäºã§ãã§ã«YAMLæ§æã玹ä»ããŸããããä»ããããã«è©³ããæ€èšããŸãã
ã¢ã»ã³ããªæ§æã¯ã
dappfile.yaml
ïŒãŸãã¯
dappfile.yml
ïŒã§èª¬æã§ããŸãã æ§æåŠçã¹ãããã¯æ¬¡ã®ãšããã§ãã
- dappã¯
dappfile.y[a]ml
èªã¿åããŸãã - Goãã³ãã¬ãŒããšã³ãžã³ãèµ·åããæçµçãªYAMLãã¬ã³ããªã³ã°ãããŸãã
- ã¬ã³ããªã³ã°ãããèšå®ã¯YAMLããã¥ã¡ã³ãã«åå²ãããŸãïŒ
---
æ¹è¡ããïŒ; - åYAMLããã¥ã¡ã³ãã«æäžäœã«dimgãŸãã¯artifactå±æ§ãå«ãŸããŠããããšãæ€èšŒãããŸãã
- æ®ãã®å±æ§ã®æ§æã確èªãããŸãã
- ãã¹ãŠãæ£åžžã§ããå Žå-æçµæ§æã¯ãæå®ãããdimg'eyããã³artifact'ovããäœæãããŸãã
å€å žçãªDappfileã¯Ruby DSLã§ãããããç°å¢å€æ°ã®
ENV
èŸæžãžã®ã¢ã¯ã»ã¹ãã«ãŒãå ã®dimgã®å®çŸ©ãã³ã³ããã¹ãç¶æ¿ã䜿çšããäžè¬çãªãã«ãåœä»€ã®å®çŸ©ãªã©ãããã€ãã®ããã°ã©ãã³ã°ãå¯èœã§ãã éçºè ãããã®ãããªæ©äŒã奪ããªãããã«ãGo-templatesã®ãµããŒããdappfile.ymlã«è¿œå ããããšã決å®ãããŸãã-Helm chart'amãšåæ§ã§ãã
ãã ãããã¹ããšdimg_groupsã䜿çšããŠã³ã³ããã¹ãã®ç¶æ¿ãæŸæ£ããŸããã ããã¯ãå©äŸ¿æ§ãããæ··ä¹±ããããããŸããã ãããã£ãŠã
dappfile.yml
ã¯YAMLããã¥ã¡ã³ãã®ç·åœ¢é åã§ãããåããã¥ã¡ã³ãã¯dimgãŸãã¯ææç©ã®èª¬æã§ãã
åãšåãããã«ãdimgã¯1ã§ãååãªãã§ãããŸããŸããã
dimg: ~ from: alpine:latest shell: beforeInstall: - apk update
ã¢ãŒãã£ãã¡ã¯ãã«ã¯ååãå¿ èŠã§ã çŸåšã§ã¯ãã¢ãŒãã£ãã¡ã¯ãã€ã¡ãŒãžããã®ãã¡ã€ã«ã®ãšã¯ã¹ããŒãã§ã¯ãªããã€ã³ããŒãïŒDockerfileããã®ãã«ãã¹ããŒãžæ©èœãšåæ§ïŒã«ã€ããŠèª¬æããŠããŸãã ãããã£ãŠããã¡ã€ã«ãååŸããã¢ãŒãã£ãã¡ã¯ããæå®ããå¿ èŠããããŸãã
artifact: application-assets ... --- dimg: ~ ... import: - artifact: application-assets add: /app/public/assets after: install - artifact: application-assets add: /vendor to: /app/vendor after: install
ãã£ã¬ã¯ãã£ã
git
ã
git remote
ã
shell
ã¯DSLããYAMLã«ã»ãšãã©ããã®ãŸãŸãåãæ¿ããããŸãããã¢ã³ããŒã¹ã³ã¢ã®ä»£ããã«camelCaseã䜿çšããïŒKubernetesã®ããã«ïŒããã£ã¬ã¯ãã£ããç¹°ãè¿ãå¿ èŠã¯ãããŸããããé åãæå®ããŠãã©ã¡ãŒã¿ãŒãçµåããå¿ èŠããããŸãïŒ
git: - add: / to: /app owner: app group: app excludePaths: - public/assets - vendor - .helm stageDependencies: install: - package.json - Bowerfile - Gemfile.lock - app/assets/* - url: https://github.com/kr/beanstalkd.git add: / to: /build shell: beforeInstall: - useradd -d /app -u 7000 -s /bin/bash app - rm -rf /usr/share/doc/* /usr/share/man/* - apt-get update - apt-get -y install apt-transport-https git curl gettext-base locales tzdata setup: - locale-gen en_US.UTF-8
å©çšå¯èœãªãã¹ãŠã®å±æ§ã®åºæ¬çãªèª¬æã¯ã ããã¥ã¡ã³ãã«èšèŒãããŠããŸã ã
ããã«ãŒENVããã³LABEL
dappfile.yml
ã§ã¯ãç°å¢å€æ°ãšã©ãã«ã次ã®ããã«è¿œå ã§ããŸãã
docker: ENV: <key>: <value> ... LABELS: <key>: <value> ...
YAMLã§ã¯ãDappfileããã³Dockerfileã«ãã£ãããã«ã
ENV
ãŸãã¯
LABELS
ãç¹°ãè¿ãããšã¯ã§ããŸããã
ãã³ãã¬ãŒããšã³ãžã³
ãã³ãã¬ãŒãã䜿çšããŠãç°ãªãdimgãŸãã¯ã¢ãŒãã£ãã¡ã¯ãã®å šäœçãªãã«ãæ§æã決å®ã§ããŸãã ããã¯ãããšãã°ãå€æ°ã䜿çšããŠå ±éã®ããŒã¹ã€ã¡ãŒãžãç°¡åã«ç€ºãããšãã§ããŸãã
{{ $base_image := "alpine:3.6" }} dimg: app from: {{ $base_image }} ... --- dimg: worker from: {{ $base_image }}
...ãŸãã¯å®çŸ©ããããã¿ãŒã³ã䜿çšããããè€éãªãã®ïŒ
{{ $base_image := "alpine:3.6" }} {{- define "base beforeInstall" }} - apt: name=php update_cache=yes - get_url: url: https://getcomposer.org/download/1.5.6/composer.phar dest: /usr/local/bin/composer mode: 0755 {{- end}} dimg: app from: {{ $base_image }} ansible: beforeInstall: {{- include "base beforeInstall" .}} - user: name: app uid: 48 ... --- dimg: worker from: {{ $base_image }} ansible: beforeInstall: {{- include "base beforeInstall" .}} ...
ãã®äŸã§ã¯ã
beforeInstall
ã¹ããŒãžã®æ瀺ã®äžéšãå ±ééšåãšããŠå®çŸ©ãããŠãããådimgã«ããã«å«ãŸããŠããŸãã
Go /ãã³ãã¬ãŒãã®æ©èœã®è©³çŽ°ã«ã€ããŠã¯ãããã¹ã/ãã³ââãã¬ãŒãã¢ãžã¥ãŒã«ã®ããã¥ã¡ã³ããšãæšæºæ©èœãè£å®ããsprigã¢ãžã¥ãŒã«ã®ããã¥ã¡ã³ããåç §ããŠãã ããã
Ansibleã®ãµããŒã
Ansible-collectorã¯3ã€ã®éšåã§æ§æãããŠããŸãã
- Python 2.7ã眮ãããŠããdappdeps / ansibleã€ã¡ãŒãžãglibcããã³ãã®ä»ã®ã©ã€ãã©ãªã§ã³ã³ãã€ã«ããããããããã£ã¹ããªãã¥ãŒã·ã§ã³ã§åäœããŸãïŒç¹ã«Alpineã«é¢é£ïŒã Ansibleã¯ããããã«ã€ã³ã¹ããŒã«ãããŸãã
-
dappfile.yaml
Ansibleã䜿çšããdappfile.yaml
ã¢ã»ã³ããªæ§æã®ãµããŒã ã - ã¹ããŒãžçšã®ã³ã³ãããŒãèµ·åããdappã®ãã«ã㌠ã ãããã®ã³ã³ããã§ã¯ã
dappfile.yml
æå®ãããã¿ã¹ã¯dappfile.yml
ãŸãã Builderã¯ãã¬ã€ããã¯ãäœæãããããèµ·åããã³ãã³ããçæããŸãã
Ansibleã¯å€æ°ã®ãªã¢ãŒããã¹ãã®ç®¡çã·ã¹ãã ãšããŠéçºãããŠãããããéçºè ã¯ããŒã«ã«ã¹ã¿ãŒãã¢ããã«é¢é£ãããã®ãç¡èŠã§ããŸãã ããšãã°ãChefã®å Žåã®ããã«ãå®è¡äžã®ã³ãã³ãããã®ãªã¢ã«ã¿ã€ã åºåã¯ãããŸãã ãã¢ã»ã³ããªã«ã¯ãå®è¡æéã®é·ãã³ãã³ããå«ãŸããŠããå ŽåããããŸãããã®åºåã¯ãªã¢ã«ã¿ã€ã ã§è¡šç€ºãããšäŸ¿å©ã§ãããAnsibleã¯å®äºåŸã«ã®ã¿åºåã衚瀺ããŸãã GitLab CIãä»ããŠèµ·åããå Žåãããã¯ãã«ãã®ãã³ã°ãšèŠãªãããšãã§ããŸãã
2çªç®ã®åé¡ã¯ãAnsibleã®äžéšã§ããstdoutã³ãŒã«ããã¯ã§ããã ãããã®äžã«ã¯ãé©åºŠã«æçãã§ã¯ãããŸããã§ããã JSON圢åŒã®å®å šãªçµæãå«ãåé·ãªåºåããŸãã¯ãã¹ãåãã¢ãžã¥ãŒã«åãããã³ã¹ããŒã¿ã¹ãå«ãããããªãºã ããããŸãã ãã¡ãããç§ã¯èªåŒµããŠããŸãããç»åãçµã¿ç«ãŠãããã®é©åãªã¢ãžã¥ãŒã«ã¯æ¬åœã«ãããŸããã
3çªç®ã«ééããã®ã¯ãããã€ãã®Ansibleã¢ãžã¥ãŒã«ãå€éšãŠãŒãã£ãªãã£ïŒæããªãïŒãPythonã¢ãžã¥ãŒã«ïŒããã«æããªãïŒãããã³Pythonãã€ããªã¢ãžã¥ãŒã« ïŒæªå€¢ïŒïŒã«äŸåããŠããããšã§ãã ç¹°ãè¿ããŸãããAnsibleã®äœæè ã¯ãäœæãã·ã¹ãã ãã€ããªãšã¯å¥ã«èµ·åãããããšãããšãã°ã
userdel
ã
/sbin
ã§ã¯ãªããå¥ã®ãã£ã¬ã¯ããªã®ã©ããã«ããããšãèæ ®ããŸããã§ãã...
ãã€ããªã¢ãžã¥ãŒã«ã®åé¡ã¯ãaptã¢ãžã¥ãŒã«ã®æ©èœã§ãã SOã©ã€ãã©ãªãšããŠpython-aptã¢ãžã¥ãŒã«ã䜿çšããŸãã aptã¢ãžã¥ãŒã«ã®å¥ã®æ©èœã¯ãã¿ã¹ã¯ã®å®è¡äžã«ãpython-aptã®ããŒãã倱æããå Žåã«ããã®ã¢ãžã¥ãŒã«ãå«ãããã±ãŒãžãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ããããšããããšã§ãã
äžèšã®åé¡ã解決ããããã«ãçããã³ã¹ã¯ãªããã¿ã¹ã¯çšã®ãã©ã€ããåºåãå®è£ ãããŸããã Ansiballzã¡ã«ããºã ãªãã§èµ·åã§ããŸãã ãŸããstdoutã³ãŒã«ããã¯ãå®è£ ãã
useradd
ã
userdel
ã
usermod
ã
getent
ãªã©ã®ãŠãŒãã£ãªãã£ã¢ã»ã³ããªãdappdeps / ansibleã«è¿œå ããpython-aptã¢ãžã¥ãŒã«ãã³ããŒããå¿ èŠããããŸããã
ãã®çµæãdappã®Ansibleãã«ããŒã¯UbuntuãDebianãCentOSãAlpineã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã§åäœããŸããããã¹ãŠã®ã¢ãžã¥ãŒã«ããŸã ãã¹ããããŠããããã§ã¯ãªããããdappã«ã¯æ£ç¢ºã«ãµããŒããããã¢ãžã¥ãŒã«ã®ãªã¹ãããããŸãã æ§æã§ãªã¹ãã«ãªãã¢ãžã¥ãŒã«ã䜿çšããå Žåãã¢ã»ã³ããªã¯éå§ãããŸãã-ããã¯äžæçãªæªçœ®ã§ãã ãµããŒããããŠããã¢ãžã¥ãŒã«ã®ãªã¹ãã¯ããã«ãããŸã ã
dappfile.yml
ã§Ansibleã䜿çšãããã«ãæ§æã¯ã
shell
æ§æã«äŒŒãŠããŸãã
ansible
ããŒã«ã¯å¿ èŠãªã¹ããŒãžããªã¹ããããåã¹ããŒãžã«ã¯ã¿ã¹ã¯ã®é åãå®çŸ©ãããŠããŸã-éåžžã®ãã¬ã€ããã¯ãšã»ãŒåæ§ã«ã
tasks
å±æ§ã®ä»£ããã«ã¹ããŒãžåã®ã¿ã瀺ãããŸãã
ansible: beforeInstall: - name: "Create non-root main application user" user: name: app comment: "Non-root main application user" uid: 7000 shell: /bin/bash home: /app - name: "Disable docs and man files installation in dpkg" copy: content: | path-exclude=/usr/share/man/* path-exclude=/usr/share/doc/* dest: /etc/dpkg/dpkg.cfg.d/01_nodoc install: - name: "Precompile assets" shell: | set -e export RAILS_ENV=production source /etc/profile.d/rvm.sh cd /app bundle exec rake assets:precompile args: executable: /bin/bash
äŸã¯ããã¥ã¡ã³ãããååŸãããŸã ã
ããã§çåãçããŸãïŒ
dappfile.yml
ã«ã¿ã¹ã¯ã®ãªã¹ããããªãå Žåãä»ã®ãã¹ãŠïŒãããã¬ãã«ã®ãã¬ã€ããã¯ãã€ã³ãã³ããªïŒãã©ãã«ããã®ãã話ãããçãæå¹ã«ããæ¹æ³ãšè©±ãããŠããçã¯ã©ãã«ããã®ãïŒãŸãã¯ç¡å¹ã«ããæ¹æ³ïŒïŒ Ansibleã®èµ·åæ¹æ³ã«ã€ããŠèª¬æããŸãã
ãã«ããŒã¯èµ·åãæ åœããŸã -ããã¯ãã¹ããŒãžã§Dockerã³ã³ãããŒã®èµ·åãã©ã¡ãŒã¿ãŒã決å®ããéåžžã«è€éãªã³ãŒãã§ã¯ãããŸããïŒç°å¢å€æ°ãansible-playbookèµ·åã³ãã³ããå¿ èŠãªããŠã³ãã ãŸãããã«ããŒã¯ãããã€ãã®ãã¡ã€ã«ãçæãããã¢ããªã±ãŒã·ã§ã³ã®äžæãã£ã¬ã¯ããªã«ãã£ã¬ã¯ããªãäœæããŸãã
-
hosts
-Ansibleã®ã€ã³ãã³ããªã ããŠã³ããããã€ã¡ãŒãždappdeps / ansibleå ã®Pythonãžã®ãã¹ãæã€localhostãã¹ãã¯1ã€ã ãã§ãã -
ansible.cfg
-Ansibleèšå®ã æ§æã§ã¯ãæ¥ç¶ã¿ã€ãã¯local
ãã€ã³ãã³ããªãžã®ãã¹ãã³ãŒã«ããã¯stdoutãžã®ãã¹ãäžæãã£ã¬ã¯ããªãžã®ãã¹ãããã³èšå®become
次ã®ãšããã§ãããã¹ãŠã®ã¿ã¹ã¯ã¯rootãŠãŒã¶ãŒããèµ·åãããŸããbecome_user
ã䜿çšãããšããã¹ãŠã®ç°å¢å€æ°ããŠãŒã¶ãŒããã»ã¹ã§äœ¿çšå¯èœã«ãªãã$HOME
ïŒsudo -E -H
ïŒãæ£ããèšå®ãããŸãã -
playbook.yml
ãã®ãã¡ã€ã«ã¯ãå®è¡äžã®ã¹ããŒãžã®ã¿ã¹ã¯ã®ãªã¹ãããçæãããŸããhosts: all
ãã£ã«ã¿ãŒã¯hosts: all
æå®ãããæé»çãªãã¡ã¯ãã³ã¬ã¯ã·ã§ã³ã¯gather_facts: no
èšå®ããããšã«ããç¡å¹ã«ãããŸãã setupããã³set_factã¢ãžã¥ãŒã«ã¯ãµããŒããããã¢ãžã¥ãŒã«ã®ãªã¹ãã«ããããããããã䜿çšããŠãã¡ã¯ããæ瀺çã«åéã§ããŸãã
åã®äŸã®
beforeInstall
ã¹ããŒãžã®ã¿ã¹ã¯ã®ãªã¹ãã¯ããã®ãããª
playbook.yml
å€ãããŸãã
--- hosts: all gather_facts: no tasks: - name: "Create non-root main application user" user: name: app ... - name: "Disable docs and man files installation in dpkg" copy: content: | path-exclude=/usr/share/man/* path-exclude=/usr/share/doc/* dest: /etc/dpkg/dpkg.cfg.d/01_nodoc
Ansible Assemblyã¢ããªã±ãŒã·ã§ã³ã®æ©èœ
ãªã
ansible.cfg
èšå®ã¯æ¬¡ã®ãšããã§ãã
[become] become = yes become_method = sudo become_flags = -E -H become_exe = path_to_sudo_insdie_dappdeps/ansible_image
ãããã£ãŠãã¿ã¹ã¯ã§ã¯ã
become_user: username
ã®ã¿ãæå®ããŠã¹ã¯ãªãããå®è¡ãããããŠãŒã¶ãŒããã³ããŒããŸãã
ã³ãã³ãã¢ãžã¥ãŒã«
Ansibleã«ã¯ãã³ãã³ãããã³ã¹ã¯ãªãããå®è¡ããããã®4ã€ã®ã¢ãžã¥ãŒã«ïŒ
raw
ã
script
ã
shell
ããã³
command
ãŸãã
raw
ãš
script
ã¯ãAnsiballzã¡ã«ããºã ãªãã§å®è¡ãããŸããããã¯ãããã«é«éã§ãããã©ã€ãåºåããããŸãã
raw
è€æ°è¡ã®ã¢ãããã¯ã¹ã¯ãªãããå®è¡ã§ããŸãã
- raw: | mvn -B -f pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:resolve mvn -B -s /usr/share/maven/ref/settings-docker.xml package -DskipTests
確ãã«ã
environment
å±æ§ã¯ãµããŒããããŠããŸãããããããåé¿ã§ããŸãïŒ
- raw: | mvn -B -f pom.xml -s $SETTINGS dependency:resolve mvn -B -s $SETTINGS package -DskipTests args: executable: SETTINGS=/usr/share/maven/ref/settings-docker.xml /bin/ash -e
ãã¡ã€ã«
ãã®æ®µéã§ã¯ã
git
ãã£ã¬ã¯ãã£ããé€ãããªããžããªããã³ã³ããã«ãã¡ã€ã«ã転éããã¡ã«ããºã ã¯ãããŸããã ããŸããŸãªçš®é¡ã®æ§æãã¹ã¯ãªããããã®ä»ã®å°ããªãã¡ã€ã«ãã€ã¡ãŒãžã«è¿œå ããã«ã¯ãã³ããŒã¢ãžã¥ãŒã«ã䜿çšã§ããŸãã
- name: "Disable docs and man files installation in dpkg" copy: content: | path-exclude=/usr/share/man/* path-exclude=/usr/share/doc/* dest: /etc/dpkg/dpkg.cfg.d/01_nodoc
ãã¡ã€ã«ã倧ããå Žåã
dappfile.yml
å ã«ä¿åããªãããã«ãGo-templateããã³
.Files.Get
é¢æ°ã䜿çšã§ããŸãã
- name: "Disable docs and man files installation in dpkg" copy: content: | {{.Files.Get ".dappfiles/01_nodoc" | indent 6}} dest: /etc/dpkg/dpkg.cfg.d/01_nodoc
å°æ¥çã«ã¯ããã¡ã€ã«ãã¢ã»ã³ããªã³ã³ããã«æ¥ç¶ããããã®ã¡ã«ããºã ãå®è£ ããã倧ããª
include*
ããã³ãã€ããªãã¡ã€ã«ãã³ããŒãããããªãã
include*
ãŸãã¯
import*
ã䜿çšã§ããããã«ãªã
include*
ã
ãã³ãã¬ãŒãå
dappfile.yaml
Goãã³ãã¬ãŒãã«ã€ããŠã¯æ¢ã«è¿°ã¹ãŸããã Ansibleã¯jinja2ãã³ãã¬ãŒãããµããŒãããŠãããããã2ã€ã®ã·ã¹ãã ã®ã»ãã¬ãŒã¿ãŒã¯åãã§ãããããjinjaåŒã³åºãã¯Go-templateãšã³ãžã³ãããšã¹ã±ãŒãããå¿ èŠããããŸãã
- name: "create temp file for archive" tempfile: state: directory register: tmpdir - name: Download archive get_url: url: https://cdn.example.com/files/archive.tgz dest: '{{`{{ tmpdir.path }}`}}/archive.tgz'
ãã«ãã®åé¡ããããã°ãã
ã¿ã¹ã¯ãå®è¡ãããšãäœããã®ãšã©ãŒãçºçããå ŽåããããŸãããç»é¢äžã®ã¡ãã»ãŒãžã ãã§ã¯ç解ã§ããªãå ŽåããããŸãã ãã®å Žåãç°å¢å€æ°
ANSIBLE_ARGS="-vvv"
æå®ããŠéå§ã§ããŸããåºåã«ã¯ãã¿ã¹ã¯ã®ãã¹ãŠã®åŒæ°ãšçµæã®ãã¹ãŠã®åŒæ°ããããŸãïŒjson stdoutã³ãŒã«ããã¯ã®äœ¿çšãšåæ§ïŒã
ç¶æ³ãæ確ã§ãªãå Žåã¯ãã€ã³ãã
dapp dimg bulid --introspect-error
ã¢ãŒãã§ã¢ã»ã³ããªãéå§ã§ããŸãïŒ
dapp dimg bulid --introspect-error
ãšã©ãŒãçºçãããšã¢ã»ã³ããªãåæ¢ããã³ã³ããå ã§ã·ã§ã«ãèµ·åããŸãã ãšã©ãŒã®åå ãšãªã£ãã³ãã³ãã衚瀺ãããé£æ¥ããã¿ãŒããã«ã§äžæãã£ã¬ã¯ããªã«ç§»åããŠ
playbook.yml
ãç·šéã§ããŸãã
ãŽãŒãŽãŒãŽãŒ
ããã¯dappã®éçºã«ããã3çªç®ã®ç®æšã§ããããŠãŒã¶ãŒã®èŠ³ç¹ããã¯ãã€ã³ã¹ããŒã«ã®ç°¡çŽ åãé€ããŠãã»ãšãã©å€æŽã¯ãããŸããã Goã®ãªãªãŒã¹0.26ã§ã¯ã
dappfile.yaml
ããŒãµãŒãå®è£ ãããŸããã çŸåšãã¡ã€ã³ã®dappæ©èœãGoã«å€æããäœæ¥ãé²è¡äžã§ããã¢ã»ã³ããªã³ã³ããããã«ããŒã®èµ·åãGitãšã®é£æºã ãããã£ãŠãAnsibleã¢ãžã¥ãŒã«ãå«ããã¹ãã§ã®ããªãã®å©ãã¯äžèŠã§ã¯ãããŸããã GitHubã§åé¡ãçºçããã®ãåŸ ã£ãŠããããTelegramã®ã°ã«ãŒãdapp_ruã«ã¢ã¯ã»ã¹ããŠãã ãã ã
2019幎8æ13æ¥æŽæ°ïŒ dappãããžã§ã¯ãã®ååãwerfã«å€æŽããããã®ã³ãŒããGoã«æžãæããããããã¥ã¡ã³ããå€§å¹ ã«æ¹åãããŸããã
PS
çã¯ã©ãã§ããïŒ cowsayããã°ã©ã ã¯dappdeps / ansibleã§ã¯ãªãã䜿çšãããã³ãŒã«ããã¯stdoutã¯cowsayãå«ãŸããã¡ãœãããåŒã³åºããŸããã æ®å¿µãªãããçã®ããªãdappã§ã®AnsibleïŒãããã誰ãããªããåé¡ãäœæããã®ãæ¢ããªãã§ãããïŒã
PPS
ããã°ãã芧ãã ããã
- ã Werfã¯Kubernetesã®CI / CDããŒã«ã§ãïŒã¬ãã¥ãŒããã³ãããªã¬ããŒãïŒ ã ïŒDmitry Stolyarovã2019幎5æ27æ¥ãDevOpsConfïŒ ã
- ãç§ãã¡ã¯æ£åŒã«dappã代衚ããŠããŸã-CI / CDããµããŒãããããã®DevOpsãŠãŒãã£ãªã㣠ã
- ã dappã䜿çšããŠãããžã§ã¯ããæ§ç¯ããŸãã ããŒã1ïŒJava ";
- â dappãšGitLab CIã䜿çšããŠKubernetesã§ã¢ããªã±ãŒã·ã§ã³ããã«ãããã³ã€ã³ã¹ããŒã«ããŸã â;
- â dappã§ç·Žç¿ããŸãã ããŒã1ïŒåçŽãªã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ ";
- â dappã§ç·Žç¿ããŸãã ããŒã2. Helmã䜿çšããKubernetesã§ã®Dockerã€ã¡ãŒãžã®å±é ";
- ã CI / CDçšã®Dockerã€ã¡ãŒãžãdappãšäžç·ã«è¿ éãã€äŸ¿å©ã«çµã¿ç«ãŠãŸãïŒã¬ãã¥ãŒããã³ãããªã¬ããŒãïŒ ãã