
ã¿ãªããããã«ã¡ã¯ïŒ Habréã§ã¯ã ConcourseCIãªã©ã®ã¢ã»ã³ããªãµãŒããŒã«é¢ããæ
å ±ãã»ãšãã©ãªãããšã«æ°ä»ããŸããã ãã®ã®ã£ãããåããŠç°¡åãªçŽ¹ä»æãæžãããšã«ããŸããã ãã®ããŒã«ã®ç«ã®èª¬æãšå°ããªãã¥ãŒããªã¢ã«ã®äžã
ãããã£ãŠãConcourseCIã¯CI / CDãã«ããµãŒããŒã§ãã Pivotalã«ãã£ãŠéçºãããŠãããçŸåšæŽ»çºã«éçºãããŠããŸãã äŒç€Ÿèªäœã«ã¯ãã®ãããžã§ã¯ãã«ãã«ã¿ã€ã ã§åãçµãã§ãã人ãäœäººããããããçŸåšãæ°ããããŒãžã§ã³ãããªã宿çã«ãªãªãŒã¹ãããŠãããè¿œå æ©èœãç©æ¥µçã«å®è£
ããããã°ãè¿
éã«ä¿®æ£ãããŠããŸãã åœåãæãé »ç¹ã«èµ·ããããã«ãPivoââtalã¯Jenkinsã«äžæºã ã£ãããããã®ããŒã«ã瀟å
ã§äœ¿çšããããã«äœæããŸããããåŸã«ãã®ãããžã§ã¯ããGithubã«å
¬éããã³ãã¥ããã£ãåŒãç¶ãã ããããªãªãŒã¹ã¯ãã°ãã°ã³ãã¥ããã£ã®ãµãŒãããŒãã£éçºè
ããã®æ°ããæ©èœãæãä»ããŸãã å®å
šã«Goã§æžãããŠããŸãã
ãã®èšäºã§ã¯ïŒ
é·æ
ãã®è£œåã®äž»ãªå©ç¹ããªã¹ãããŸãã
- åæäœã¯åå¥ã®Dockerã³ã³ãããŒã§èµ·åãããããããã®è£œåã¯ãã¯ãããžãŒã«å®å
šã«äŸåããŸããã ã€ãŸããä»»æã®dockerã³ã³ãããŒå
ã§åéãããä»»æã®ã³ãŒããåéã§ããŸã
- çµã¿ç«ãŠããã»ã¹ã¯ããããã ãã€ãã©ã€ã³ ãçŸä»£ã®ã¢ã»ã³ããªã¯ãŸããŸãç·åœ¢ã«ãªã£ãŠããŠããããã ãããŠããã®ãããªã¹ã±ãžã¥ãŒã«ã®åœ¢ã§è€éãªçµã¿ç«ãŠæé ã説æããããšã¯ãéåžžã«äŸ¿å©ã§æç¢ºã«ãªããŸãã ConcourseCIã«ã¯ãèªã¿åãå°çšã®äœ¿ããããã°ã©ãã£ã«ã«Webã€ã³ã¿ãŒãã§ã€ã¹ãä»å±ããŠããŸãã

æ°ãããã¶ã€ã³ã¯çŸåšããŒã¿ã¢ãŒãã§ãããã³ãã¥ããã£ã«ãã£ãп޻çºã«è°è«ãããŠãããããç§ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯è¿ãå°æ¥ã«æä»£é
ãã«ãªãå¯èœæ§ããããŸãã æ°ããã€ã³ã¿ãŒãã§ã€ã¹ã¯æ¬¡ã®ããã«ãªããŸãã

- ç®±ããåºããŠç°¡åã«æ°Žå¹³ã«äŒžã³ãŸãã ååãªãªãœãŒã¹ããªãå Žåã¯ãæ°ãããã·ã³ã§å¥ã®ã¯ãŒã«ãŒãèµ·åããã¡ã€ã³ãµãŒããŒã®ã¢ãã¬ã¹ããã©ã¡ãŒã¿ãŒãšããŠæå®ãããšãä»ã®ãã¹ãŠãèªåçã«è¡ãããŸãïŒã¯ãŒã«ãŒã¯èªåèªèº«ãç»é²ããèªåèªèº«ã«ã€ããŠéç¥ããããã«ããã€ãã®äœæ¥ãè¡ãæºåãã§ããŸãã ã ããã«ãã¢ã»ã³ããªããã»ã¹äžã«äžŠåæäœãããå Žåã¯ãç°ãªãç©çãã·ã³ã§å®è¡ãããå¯èœæ§ããããŸãã æ°ããã¯ãŒã«ãŒã远å ããæäœã¯ãæåéã1ã€ã®ã³ãã³ããèµ·åããããšã§ãã
èšçœ®
åè¿°ããããã«ããããžã§ã¯ãã¯Goã§èšè¿°ãããŠããããããã®ãªãªãŒã¹ã«ã¯åäžã®ãã€ããªãã¡ã€ã«ãä»å±ããŠããã1ã€ã®ã³ãã³ãã§å®è¡ã§ããŸãã ããããããè¯ãæ¹æ³ããããŸãã ConcourseCIã¯å
¬åŒã®docker imageãæäŸãããããdocker-composeã䜿çšããŠã1ã€ã®ããŒã ã ãã§ãããžã§ã¯ããéå§ã§ããŸãã
éå§ãããConcourseCIã¯ã3ã€ã®éšåã§æ§æãããŠããŸãã
- PostgreSQLããŒã¿ããŒã¹
- ã³ã³ã³ãŒã¹Web ã ããã¯äžçš®ã®ãã¹ã¿ãŒã§ãã ã°ã©ãã£ã«ã«Webã€ã³ã¿ãŒãã§ã€ã¹ãšãæãéèŠãªããšã¯ãèªç©ºããåçšãã ATC ïŒ ãATCããŸãã¯ãèªç©ºäº€é管å¶ããšããçšèªïŒããã¯ã管å¶å®ããã©ã€ããç£èŠããæ»èµ°è·¯è¿ãã®ç©ºæž¯ã«ãããã©ã€ãã³ã³ãããŒã«ã¿ã¯ãŒã§ãïŒã ATCã¯ãªãœãŒã¹ãå²ãåœãŠãããŸããŸãªã¿ã¹ã¯ãå®è¡ããã¯ã©ã¹ã¿ãŒãç£èŠããŸãã å®éã®ã¢ã»ã³ããªã¯Concourse Webã§ã¯çºçãããã¢ã»ã³ããªã管çããã ãã§ãã¢ã¯ã»ã¹å¯èœãªã¯ãŒã«ãŒã«ã¿ã¹ã¯ãå§ä»»ããããšã«æ³šæããŠãã ããã ã¡ã€ã³ã®Concourse Webã·ã¹ãã ã¯1ã€ã ãååšã§ããŸãã
- ã³ã³ã³ãŒã¹ã¯ãŒã«ãŒ -ããã§å®éã®äœæ¥ãè¡ãããŸãã ã¯ãŒã«ãŒã¯ãATCããã¿ã¹ã¯ãåãåãããããå®è¡ããŠãçµæãå ±åããŸãã ã·ã¹ãã ã«ã¯ãååãªéãããã®ãšåãæ°ã®ãã®ãããªã¯ãŒã«ãŒãååšããå¯èœæ§ããããŸãã 1ã€ã®ãµãŒããŒ/ã€ã³ã¹ã¿ã³ã¹ã§1ã€ã®ã¯ãŒã«ãŒãå®è¡ããããšããå§ãããŸãã
ãããã£ãŠãå®å
šã«æ©èœãããµãŒããŒã¯ã1ã€ã®docker-composeã³ãã³ãã§èµ·åã§ããŸãã ãã ããATCã¯æå·åããããã£ãã«ãä»ããŠã¯ãŒã«ãŒãšéä¿¡ããéå§ããåã«äž¡åŽã§ããŒãã¹ãªããããå¿
èŠããããããæåã®éå§åã«ããŒãçæããå¿
èŠããããŸãã æ¬¡ã®ãããªããŒãçæããŸãã
mkdir -p keys/web keys/worker ssh-keygen -t rsa -f ./keys/web/tsa_host_key -N '' ssh-keygen -t rsa -f ./keys/web/session_signing_key -N '' ssh-keygen -t rsa -f ./keys/worker/worker_key -N '' cp ./keys/worker/worker_key.pub ./keys/web/authorized_worker_keys cp ./keys/web/tsa_host_key.pub ./keys/worker
ãã®åŸããã®ãã¡ã€ã«ã䜿çšããŠã·ã¹ãã å
šäœãèµ·åã§ããŸãïŒå
¬åŒãã¡ã€ã«ã¯ãã¡ããåç
§ ïŒã
version: '3' services: concourse-db: image: postgres:9.6 environment: POSTGRES_DB: concourse POSTGRES_USER: concourse POSTGRES_PASSWORD: changeme PGDATA: /database concourse-web: image: concourse/concourse links: [concourse-db] command: web depends_on: [concourse-db] ports: ["8080:8080"] volumes: ["./keys/web:/concourse-keys"] restart: unless-stopped # required so that it retries until concourse-db comes up environment: CONCOURSE_BASIC_AUTH_USERNAME: concourse CONCOURSE_BASIC_AUTH_PASSWORD: changeme CONCOURSE_EXTERNAL_URL: "${CONCOURSE_EXTERNAL_URL}" CONCOURSE_POSTGRES_HOST: concourse-db CONCOURSE_POSTGRES_USER: concourse CONCOURSE_POSTGRES_PASSWORD: changeme CONCOURSE_POSTGRES_DATABASE: concourse concourse-worker: image: concourse/concourse privileged: true links: [concourse-web] depends_on: [concourse-web] command: worker volumes: ["./keys/worker:/concourse-keys"] environment: - CONCOURSE_TSA_HOST=concourse-web:2222
Webã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšã§ããWebã¢ãã¬ã¹ã®å®éã®å€ã倿°CONCOURSE_EXTERNAL_URL
ã«ãšã¯ã¹ããŒãããããšãå¿ããªãã§ãã ããã
export CONCOURSE_EXTERNAL_URL=http:
ã芧ã®ãšããããã®äŸã§ã¯ãã¹ãŠã1å°ã®ãã·ã³ã§å®è¡ããŠããŸããã誰ãããã«å¶éãããã®ã§ã¯ãªããããŒãºã«å¿ããŠåæ£ã¯ã©ã¹ã¿ãŒãå®å
šã«äœæã§ããŸãã
èµ·ååŸããã©ãŠã¶ã§ãµãŒããŒã¢ãã¬ã¹ãéãããšãã§ãïŒäžèšã®äŸ-http://192.168.99.100:8080 ïŒããŸã 空ã®Concourse Webã衚瀺ãããŸãã
ã€ã³ã¹ããŒã«ã®è©³çްã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã
3ã€ã®ã³ã³ã»ãã
ã§ããããããžãã¹ã«åããããåã«ããäºããçè§£ããããã«çšèªãèŠãŠã¿ãŸãããã ConcourseCIã¯3ã€ã®åºæ¬æŠå¿µã§åäœããŸãã
ãªãœãŒã¹ -ã¢ã»ã³ããªã®ææãæäŸã§ãããªãœãŒã¹ããŸãã¯ã¢ã»ã³ããªã®çµæã«ãã£ãп޿°ã§ãããªãœãŒã¹ã å
žåçãªäŸïŒgit / hgãªããžããªãdocker-registerãFTPãS3ããã£ãããé»åã¡ãŒã«ãé»å ±ããããªã©ã å®å
šãªãªã¹ãã¯ãã¡ãã§ã ãããã«ãGithubã®åºå€§ãã§ãã€ã§ãäœããèŠã€ããããšãã§ããæ¥µç«¯ãªå Žåã¯èªåã§æžãããšãã§ããŸã ã ãªãœãŒã¹ã¯ç¹å®ã®äœæ¥ãè¡ããããããªãã¢ã¯ã·ã§ã³ã®ããã«è³æããæäŸãããã ãã§ããããšãçè§£ããããšãéèŠã§ãã
ã¿ã¹ã¯ã¯ããã«ãã®äžéšãšããŠå®è¡ã§ããäœæ¥åäœã§ãã ã¿ã¹ã¯ã¯ãéžæããdockerã³ã³ãããŒã§èµ·åãããŸãã
- ãžã§ã -ã¿ã¹ã¯ã ãªãœãŒã¹ãšã¿ã¹ã¯ã1ã€ã«çµåããŸãã ã€ãŸããå²ãåœãŠå
ã§ãªãœãŒã¹ãååŸããäœããã®åœ¢ã§ã¿ã¹ã¯ã§åŠçãããªãœãŒã¹ãåéããŠçµæãæŽæ°ããŸãã 1ã€ã®ã¿ã¹ã¯ã¯å®å
šã«åé¢ãããŠãããäœåºŠã§ãå¥ã
ã«å®è¡ã§ããŸãã
Webã€ã³ã¿ãŒãã§ã€ã¹ã®å€èг
ãããŠããã©ãŠã¶ãŒã§ã¯ConcourseCIã¯æ¬¡ã®ããã«ãªããŸãã

ããã¯ãã€ãã©ã€ã³ã®éåžžã«åçŽãªäŸã§ãããããã§ã¯GitãªããžããªãããœãŒã¹ãååŸããŠãããžã§ã¯ãã®æ§ç¯ãéå§ããããã«ãŒã€ã¡ãŒãžãäœæããé©åãªãªãœãŒã¹ã䜿çšããŠé»å ±ãã£ãã«ã®å
šå¡ã«éç¥ããæ¹æ³ãèŠãããšãã§ããŸãã
ãã®ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ããªãœãŒã¹ãšã¿ã¹ã¯ã®ã¿ã衚瀺ãããŸãããã¿ã¹ã¯ã¯è¡šç€ºãããŸããã ãã ããã¿ã¹ã¯ã®1ã€ïŒãã®äŸã§ã¯1ã€ïŒãã¯ãªãã¯ãããšãç·è²ã®åè§é
žå¡©ã®å
éšã§äœãèµ·ãã£ãŠãããã確èªã§ããŸãã

ãã®å³ã§ã¯ãæ°åã«ããŒã¯ãä»ããããŠããŸãã
- æåã§ã¿ã¹ã¯ãéå§ãããã¿ã³ã ãã€ã§ãåå®è¡ã§ããŸã
- 以åã®ãã¹ãŠã®ãã«ãã¯ãå±¥æŽã®åœ¢åŒã§èŠåºãã®äžã«é·ããã§ãŒã³ã§é
眮ãããŸã
- ãœãŒã¹ãååŸãããªãœãŒã¹ã äžç¢å°ã¯ãååŸããæå³ããŸããã€ãŸãããªãœãŒã¹ããçŽ æããååŸãããŸãã
- 1ã€ã®ã¿ã¹ã¯ã®äœæ¥ã®çµäºã ãã®ãªã³ã¯ãéããŠããããžã§ã¯ãã®ã¢ã»ã³ããªäžã«çºçããã³ã³ããã®stdoutãã°ã確èªã§ããŸãã
- ãªãœãŒã¹ïŒdockerã€ã¡ãŒãžïŒãåéãããã©ã€ããŒãã¬ãžã¹ã¿ã«ããããããŸãã äžç¢å°ã¯ããããæå³ããŸããã€ãŸãããªãœãŒã¹ãæŽæ°ããŠããŸã
- æåŸã«ãç§éã¯ç§çšé»å ±ãã£ãã«ã§ã¡ãã»ãŒãžãæããŸã
ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ããã¹ãŠã®ãã€ãã©ã€ã³ãšã¿ã¹ã¯ã衚瀺ããçµæãç£èŠã§ããŸãã
ã³ã³ãã€ãŒã®å®å
šã«ãé«åºŠãªãããŒãžã§ã³ã®äŸãšããŠã ConcourseCIèªäœã®ã³ã³ãã€ãŒãåŒçšã§ããŸã ïŒã¯ããé©ãã¹ãããšã«ã圌èªèº«ããããèªåã§çµã¿ç«ãŠãã€ããã§ã:)ïŒ
ããããåè¿°ããããã«ãããã®Webã¯èªã¿åãå°çšã§ãã åççãªçåãçããŸããæ°ããã³ã³ãã¢ããããžã§ã¯ãã«è¿œå ããæ¹æ³ã¯ïŒ é£ã¶ããšã玹ä»ããæã§ãã
é£ã¶
Flyã¯ãã¿ãŒããã«ããConcourseCIã¯ã©ã¹ã¿ãŒå
šäœã管çã§ããã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ã§ãã 皌åäžã®ã³ã³ãã¥ãŒã¿ãŒã«ã€ã³ã¹ããŒã«ããããµãŒããŒã管çããŸãã ããã«ãããå¿
èŠãªãã¹ãŠã®æäœãå®è¡ããã¯ã©ã¹ã¿ãŒãç¶æã§ããŸãã
ãã®ã³ãã³ãã®ãã«ãåºåïŒå°ããªéšåïŒïŒ
$ fly help Usage: fly [OPTIONS] <command> Application Options: -t,
ããŒã ã¯Goã§èšè¿°ããã1ã€ã®ãã€ããªã§ããããŸãã githubããããŠã³ããŒãã§ããŸãããWebã€ã³ã¿ãŒãã§ãŒã¹ã®äžéšã«ãããªã³ã¯ã䜿çšããŠããŠã³ããŒãããæ¹ã䟿å©ã§ãã

/usr/bin/fly
ã«ããããããŠå®è¡ããŸãã
ããã§ãflyãã€ã³ã¹ããŒã«ãããŸããã ConcourseCIãéå§ããã«ã¯ããµãŒããŒã«å¯ŸããŠèªèšŒããå¿
èŠããããŸãã ããã¯éåžžã«ç°¡åã«è¡ãããŸãïŒ
$ fly --target office login --concourse-url=http://ci.your.concouce.server.com
ã©ãã§ïŒ
- --target ïŒãŸãã¯-t ïŒãã®ãµãŒããŒïŒã¿ãŒã²ãããã¿ãŒã²ãããµãŒããŒïŒã®ååãæå®ããŸãã ãã®äŸã§ã¯ãããã¯ãofficeããšããååã§ãã å®éã«ã¯ãè€æ°ã®ãµãŒããŒã䜿çšã§ããŸãã1ã€ã¯äŒç€Ÿçšã1ã€ã¯ããŒã å°çšããã1ã€ã¯ããŒã«ã«ã³ã³ãã¥ãŒã¿ãŒäžã«ããããã¥ãŒããªã¢ã«ã®ãã¬ãŒãã³ã°ãè¡ããŸãã -tãªãã·ã§ã³ã䜿çšãããšããããã®ãµãŒããŒãç°¡åã«åãæ¿ããããšãã§ããŸãã
- login-ãã°ã€ã³ã³ãã³ã
- --concourse-url -ConcourseCIã¯ã©ã¹ã¿ãŒãé
眮ãããŠããURLãæå®ããŸã ã åããŠç€ºãããã
ã³ãã³ããå
¥åãããšããŠãŒã¶ãŒåãšãã¹ã¯ãŒãã®å
¥åãæ±ããããŸãã ã€ã³ã¹ããŒã«äžã«docker-compose.ymlãã¡ã€ã«ã§æå®ããããŒã¿ãå
¥åããŸãïŒ CONCOURSE_BASIC_AUTH_USERNAME
ããã³CONCOURSE_BASIC_AUTH_PASSWORD
ãäžèšãåç
§ïŒ
$ fly help
ãŸãã¯ããã¥ã¡ã³ãããŒãžã§å
¥åãããšã䜿çšå¯èœãªãã¹ãŠã®ã³ãã³ãã®ãªã¹ããèŠã€ããããšãã§ããŸã ã
ãã°ã€ã³ã«æåãããšããã§ã«äœæ¥ãéå§ã§ããŸãã ãã®ã³ãã³ãã§æåã®ãã€ãã©ã€ã³ãäœæã§ãããšããŸãããïŒ
$ fly -t office sp -c pipeline.yml -p my-pipeline-name
ããã§ïŒ
- -t office-ã³ãã³ããå®è¡ããã¿ãŒã²ãããµãŒããŒã瀺ããŸãïŒãã®äŸã§ã¯ãåã®æé ã§ãã°ã€ã³æã«äœæããoffice ïŒ
- sp ïŒãŸãã¯set-pipeline ïŒ-çŽæ¥ãæ°ãããã€ãã©ã€ã³ãäœæããã³ãã³ãã åããŒã ã«ã¯ç¬èªã®çããšã€ãªã¢ã¹ããããŸãã å®å
šãª
set-pipeline
ã³ãã³ããæžãããçãsp
ãšã€ãªã¢ã¹ã䜿çšã§ããŸã-çµæã¯åãã«ãªããŸã - -c pipeline.yml-ãã€ãã©ã€ã³èªäœã®èšå®ãå«ããã¡ã€ã«ãYAMLããŒã¯ã¢ããèšèªã§èšè¿°ãããŠããŸãã æ¬¡ã®ç« ã¯ããã«å°å¿µããŸãã
- -p my-pipeline-name -Webã€ã³ã¿ãŒãã§ãŒã¹ã«è¡šç€ºããããã®ãã€ãã©ã€ã³ã®ååãèšå®ããŸãã
ãã®ã³ãã³ããå®è¡ããåŸããã©ãŠã¶ãŒã§ConcourseCIãéããæ°ãããã€ãã©ã€ã³ã確èªã§ããŸãã æåã¯äžæåæ¢ãããŸãã æ°ãããã€ãã©ã€ã³ãã¢ã¯ãã£ãã«ããã«ã¯ããã©ãŠã¶ã®éããâžããã¿ã³ãã¯ãªãã¯ããŸã

ãŸãã¯ããŒã ã䜿çšãã
$ fly -t office unpause-pipeline -p my-pipeline-name
ãã€ãã©ã€ã³æ§æ
ãã€ãã©ã€ã³ã®èšè¿°ãã©ã®ããã«é²è¡ããŠããããæ€èšããæãæ¥ãŸããã ãã¡ã€ã«ã¯YAML圢åŒã§èšè¿°ããããããžã§ã¯ãã®ãœãŒã¹ãšåããªããžããªã«ãã€ãŸãã³ãŒãã«ãè¿ããããã«ä¿åã§ããŸãã èšãæããã°ãåãããžã§ã¯ãã¯ãèªåèªèº«ãçµã¿ç«ãŠãæ¹æ³ãç¥ã£ãŠããããšèšãããšãã§ããŸããããã¯ãæ§æããã®äžã«ããããã§ãã ããã¯éåžžã«äŸ¿å©ã§ããåããã°ã©ããŒã¯å®å
šãªã¢ã»ã³ããªã®è©³çްãšåŸ®åŠãã確èªã§ãããããéçºã«åœ¹ç«ã€ããšã¯ééããããŸããã
ãã¡ã€ã«ã¯ããªãœãŒã¹ã®å®£èšïŒãªãœãŒã¹ïŒãšã¿ã¹ã¯ã®èª¬æïŒãžã§ãïŒã®ããã€ãã®éšåã«åå²ã§ããŸãã ããšãã°ãJavaãããžã§ã¯ãã®åçŽãªãã€ãã©ã€ã³ãäœæããŸãããã ãã®å ŽåãGitãªããžããªãããœãŒã¹ãååŸããGradleã䜿çšããŠãã¹ããå®è¡ããŠãããžã§ã¯ãããã«ããããã«ãçµæãAmazon S3ã¯ã©ãŠãã«ããããããŸãã
ãªãœãŒã¹ããå§ããŸãããã ãããã¯ãªãœãŒã¹ã®ã»ã¯ã·ã§ã³ã§èª¬æãããŠããŸãã ãã®å ŽåãGitãªããžããªãšAWS S3ã®2ã€ã®ãªãœãŒã¹ã宣èšããå¿
èŠããããŸãã
resources: - name: source-code type: git source: uri: git@your-project.git branch: master private_key: | ......... - name: aws-s3-release type: s3 source: bucket: releases regexp: directory_on_s3/release-(.*).tgz access_key_id: ........ secret_access_key: ........
ä»»æã®ååïŒ-nameïŒãä»ããŸããããã«ããããããã®ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããåãååã§ãã©ãŠã¶ãŒã«ãªãœãŒã¹ã衚瀺ãããŸãã
次ã«ã3ã€ã®ããšãè¡ã1ã€ã®ãžã§ããäœæããŸãã
- 宣èšããã
source-code
ãªãœãŒã¹ããsource-code
- ãããžã§ã¯ããéãã
aws-s3-release
ãããã€ãã
ã¿ã¹ã¯ã«ã€ããŠã¯ã jobs
ã»ã¯ã·ã§ã³ã§èª¬æããŠããŸãã奜ããªã ãäœæã§ããŸãã ç°¡åãªäŸã§ã¯ãããããžã§ã¯ãã®ãã«ãããšããååã®ã¿ã¹ã¯ã1ã€ã ãå®è¡ããŠããŸãã
jobs: - name: "Build project" plan: # - get: source-code trigger: true # , # - task: "Build gradle project" config: platform: linux image_resource: type: docker-image source: {repository: "chickenzord/alpine-gradle", tag: "latest" } inputs: - name: source-code outputs: - name: result-jar run: path: sh args: - -exc - | cd source-code gradle test gradle build # output, # cp build/libs/app.jar ../result-jar # S3 - put: aws-s3-release params: file: result-jar/app.jar acl: public-read
ãã®äŸãããã«è©³ããèŠãŠãããŸãããã
ãªãœãŒã¹ã®ãã¹ãŠã¯æç¢ºã§ããããã-getãšããŠå®£èšã- get
ãããã¯ãããŒã¿ãååŸããããšãæå³ããŸãã trigger: true
ãã©ã¡ãŒã¿ãŒã¯ããªãœãŒã¹ãæŽæ°ããããã³ã«ã¿ã¹ã¯èªäœãèµ·åãããããšãæå³ããŸãïŒãã®å Žåã誰ããã³ãããããã³ããããéå§ããããšãæå³ããŸãïŒã å¿
èŠã«å¿ããŠãããå
·äœçãªãã©ã¡ãŒã¿ãŒãæå®ã§ããŸããããã¯ãæ£ãããªãœãŒã¹ã®ããã¥ã¡ã³ãã«èšèŒãããŠããŸã ã
ã¿ã¹ã¯ïŒã¿ã¹ã¯ïŒã ãåç¥ã®ããã«ãããã§å®éã®ã¢ã¯ã·ã§ã³ãè¡ãããŸãã ã¿ã¹ã¯ã«ã¯ãçæãã¹ã2ã€ã®ããããã£ããããŸãã
- åä¿¡ããã³éä¿¡ããŒã¿ïŒ å
¥åããã³åºå ïŒãæã€ããšãã§ããŸã
- Dockerã³ã³ãããŒã§éå§ããŸãïŒå®éã«ã¯ããã¹ãŠãã³ã³ãããŒã§éå§ãããŸãããã¿ã¹ã¯ã§ã¯æç€ºçã«ã€ã¡ãŒãžãæå®ããå¿
èŠããããŸãïŒã
ãã®äŸã§ã¯ã1ã€ã®å
¥åãœãŒã¹ã®ã¿ãæå®ããŸããã
inputs: - name: source-code
åä¿¡ãœãŒã¹ã¯ããªãœãŒã¹ãŸãã¯ä»¥åã«èµ·åãããå¥ã®ã¿ã¹ã¯ã®ããããã§ãïŒããšãã°ããã§ãŒã³ã§ã¿ã¹ã¯ãå®è¡ããäžéçµæãæ¬¡ã®ã¿ã¹ã¯ã«æž¡ãããšãã§ããŸãïŒã å®éã«ã¯ãããã¯ã³ã³ãããŒå
ã«åãååã®ãã©ã«ããŒããããConcourseCIããã®ãã©ã«ããŒå
ã«ãªãœãŒã¹ã®ã³ã³ãã³ãïŒãã®å Žåã¯gitãªããžããªãŒã®ã³ã³ãã³ãïŒããã¡ããšé
眮ããããšãæå³ããŸãã ãã®ãããã¿ã¹ã¯ã®æ¬æã§æåã«è¡ã£ãããšã¯ããã®ãã©ã«ããŒïŒ cd source-code
ïŒã«ç§»åããããšã§ãããããã§ãJavaãããžã§ã¯ãã®ãœãŒã¹ã³ãŒããååŸããŸãã
ãŸããã¢ã»ã³ããªã«äœ¿çšããdockerã€ã¡ãŒãžãæå®ããå¿
èŠããããŸãã ããã§ã®ããžãã¯ã¯éåžžã«åçŽã§ããç¹å®ã®ãããžã§ã¯ãçšã®ãã¹ãŠã®ãã«ãããŒã«ãããã³ã³ãããå¿
èŠã§ãã ç§ã®å ŽåãJavaã®ãããžã§ã¯ãã¯greadã«ãã£ãŠã¢ã»ã³ãã«ããããããã³ã³ãããŒå
ã«ã¯å¿
èŠãªããŒãžã§ã³ã®Javaãšgreadèªäœãå¿
èŠã ãšèšããŸãã ããšãã°ã ãã®ç»åã¯æ©èœããç§ã®ã¿ã¹ã¯ã«æé©ã§ãã ãã®ã€ã¡ãŒãžã次ã®ããã«æ§æã§æå®ããŸãã
config: platform: linux image_resource: type: docker-image source: {repository: "chickenzord/alpine-gradle", tag: "latest" }
ãã®ã³ã³ããå
ã§ãGredlã®ã¿ã¹ã¯ãèµ·åã§ããŸããããã¯ãã¢ãšããŠè¡ããŸãã
cd source-code gradle test gradle build
ã¯ãããã«ãç°å¢ã«éåžžã«ç¹å®ã®èŠä»¶ãããå Žåãç¬èªã®ããã«ãŒã€ã¡ãŒãžãåéããŠãã©ã€ããŒãã¬ãžã¹ã¿ã«ä¿åããããšã¯é£ãããããŸãããConcourseCIã¯ã©ãããã§ãç°¡åã«ã€ã¡ãŒãžãã¢ããããŒãã§ããŸãã
ãã®äŸã§ã¯ã1ã€ã®YAMLãã¡ã€ã«ã§å¯èœãªéãæç¢ºã«ãªãããã«ãã¹ãŠãååã«è©³çްã«èª¬æããããšã«ã泚æããŠãã ããã ãã ããã¿ã¹ã¯ã¯å¥ã®YAMLãã¡ã€ã«ã«ç§»åã§ããŸã ã ç°ãªããããžã§ã¯ãã§ã¿ã¹ã¯ãåå©çšããã®ã¯ãšãŠã䟿å©ã§ãã ãã®å Žåãã¿ã¹ã¯ã¯2è¡ã®ã¿ã§å®£èšãããŸããããã®ãæ¬æãã¯åå¥ã«ä¿åãããŸãã
- task: hello-world file: path/to/my_task.yml
runã³ãã³ãã«ãåãããšãåœãŠã¯ãŸããŸãããã®å
容ã¯ã·ã§ã«ã¹ã¯ãªããã«å
¥ããŠ1ã€ã®ã³ãã³ãã§åç
§ã§ãããããã³ãŒããçããªããŸãã ããšãã°ãã¹ã¯ãªãããããŒã«ã«ã§ãã¹ããããã åäœãã¹ãã§ã«ããŒãããå Žåã«äŸ¿å©ã§ãã ãã®å Žåãã¿ã¹ã¯ã¯æ¬¡ã®ããã«ãªããŸãã
- task: "Run altogether" config: platform: linux image_resource: type: docker-image source: repository: somedocker/image tag: latest run: path: path/to/script.sh
ã¹ã¯ãªãããæšæºã®UNIX åºåçµæãè¿ãããšãå¿ããªãã§ãã ããïŒ0-ãã¹ãŠãæ£åžžã§ãããä»ã®æ°å€ã¯ãšã©ãŒã§ãïŒã ãã®æ¹æ³ã§ã®ã¿ãConcourseCIã¯ããªãã®ããŒã ãæåãããã©ãããç¥ãããšãã§ããŸãã
æåŸã«ã2çªç®ã®ãªãœãŒã¹ã«ã€ããŠç°¡åã«èª¬æããŸããããã-putïŒãšå®£èšããŸããããã¯ããœãŒã¹ã³ãŒãã®å Žåã®ããã«ãããããããŒã¿ãååŸããªãããšãæå³ããŸãã
èšå®ãã¡ã€ã«ã®æºåãã§ããããä»»æã®ååïŒããšãã°ã pipeline.yml
ã§ãã¡ã€ã«ã«ä¿åããæ¬¡ã®ã³ãã³ãã§ãªã¢ãŒãConcourseCIãµãŒããŒäžã§ãã€ãã©ã€ã³ãäœæ/æŽæ°ããå¿
èŠããããŸãã
$ fly -t office sp -c pipeline.yml -p my-pipeline-name
ãã®åŸããã©ãŠã¶ãéããŠãäœæïŒãŸãã¯æŽæ°ïŒããããã€ãã©ã€ã³ã確èªããŸãã gitãªããžããªã«ã³ããããããšãèªåçã«éå§ãããŸãïŒ

ãã®å€§ããªæ£æ¹åœ¢ïŒããããžã§ã¯ãã®ãã«ãããžã§ãïŒãã¯ãªãã¯ãããšã詳现ã衚瀺ãããŸãã ç»é¢äžã®ãããã®ã¹ãããã¯ãã¹ãŠãå±éãããŠãã³ã³ãœãŒã«ã®åºåã衚瀺ã§ããŸãã

ç§å¯
ç§ã®äŸã§ã¯ãã³ãŒãå
ã§çŽæ¥ç§å¯ïŒãã¹ã¯ãŒããããŒïŒãä¿è·ããŠããããšãããããŸããã ãã¡ãããå®éã®ãããžã§ã¯ãã§ã¯ãã»ãã¥ãªãã£äžã®èæ
®äºé
ãèæ
®ãã䟡å€ã¯ãããŸãããYAMLãã¡ã€ã«ã¯äžè¬çãªãªããžããªã«ããããã§ãã ãã¹ãŠã®ç§å¯ã¯å¥ã
ã«ä¿ç®¡ããå¿
èŠããããŸãã ã³ã³ã³ãŒã¹ã§ã¯ããã€ãã©ã€ã³ã®æŽæ°æã«ã®ã¿å®éã®å€ã«çœ®ãæããããç¹å¥ãªãšã€ãªã¢ã¹ã䜿çšã§ããŸãã ãã¹ã¯ãŒããšç§å¯éµãäºéè§æ¬åŒ§ã§å²ãŸãããã¬ãŒã¹ãã«ããŒã«çœ®ãæãããšããŸãããïŒ
- name: source-code type: git source: uri: git@your-project.git branch: master private_key: ((git-pivate-key)) - name: aws-s3-release type: s3 source: bucket: releases regexp: directory_on_s3/release-(.*).tgz access_key_id: ((aws-access-key)) secret_access_key: ((aws-secret-key))
ãããŠããã¹ãŠã®å€ãå«ãYAML圢åŒã®ãã¹ã¯ãŒããšããŒïŒããšãã°ã credentials-ci.yml
ïŒã䜿çšããŠãããŒã«ã«ãã¡ã€ã«ïŒã³ã³ãã¥ãŒã¿ãŒãŸãã¯ä»ã®å®å
šãªã¹ãã¬ãŒãžã«ã®ã¿å®å
šã«ä¿åãããŸãïŒãäœæããŸãã
aws-access-key: "myawsaccesskey" aws-secret-key: "myawssecretkey" ftp-password: "my-secure-password" git-pivate-key: |
ãããŠãä»åºŠã¯--load-vars-from
ãªãã·ã§ã³ã䜿çšããŠã --load-vars-from
å®éã®å€ã«çœ®ãæããå¿
èŠããããŸãã ãããã£ãŠãå®å
šãªãã€ãã©ã€ã³ã®äœæ/æŽæ°ã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸãã
fly -t office sp -c pipeline.yml -p my-pipeline-name --load-vars-from ~/credentials-ci.yml
ããã§ããã€ãã©ã€ã³ã¯å
±éã®ãªããžããªã«ä¿åããããã¹ã¯ãŒãã¯å®å
šãªå Žæã«ãã管çè
ã®ã³ã³ãã¥ãŒã¿ãŒã«ã®ã¿ä¿åãããŸãã ããã§ãå°ãªããšããããªãã¯githubã«ãã«ãã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒãå®å
šã«æ®ãããšãã§ããŸãã
ãŸãã¯ã æšæºã®VaultããŒã«ã®ãªãœãŒã¹ã䜿çšã§ããŸã ã
ãªãã¿ã¹ã¯ãå¿
èŠãªã®ã§ããïŒ
ãããããç§ã®äŸãèŠããšããªããžã§ããšã¿ã¹ã¯ãå¿
èŠã§ããªãããããåäžã®å
šäœã«çµåã§ããªãã®ãçåã«æã£ãŠããŸãïŒããšãã°ãããã¯GitLabCIã§è¡ãããŸã ïŒã 1ã€ã®ã¿ã¹ã¯ãå°ããªã¹ãããã«åå²ããå¿
èŠãããã®ã¯ãªãã§ããïŒ è¯ã質åã§ããäŸãæããŠèª¬æããŸãã
èšèšäžã ãžã§ãã¯åé¢ãããã¿ã¹ã¯ã§ãããã³ã³ãã¢ã®ä»ã®éšåã«äŸåããŸããã ããã¯ããã€ã§ãèµ·åã§ããããšãæå³ããäºåã®ã¢ã¯ã·ã§ã³ã¯å¿
èŠãããŸããã ãã¹ãŠã®äžéããã³æçµæäœã¯å
éšã§è¡ãããå€éšã§ã¯ãã¹ãŠãåäžã®ã¹ãããã®ããã«èŠããŸãã ãããã£ãŠãã¢ã»ã³ããªå
ã«åå¥ã«ååšã§ããªãæäœãããå Žåããã¹ãŠã®äŸåã¹ãããã1ã€ã®ã¿ã¹ã¯ã«çµåããå¿
èŠããããŸãã ããã¯ãäžæ¹ã§ã¯å°é£ã«ãªããŸãã1ã€ã®ã¿ã¹ã¯ã«éäžãããããžã§ã¹ãã£ãå€ããããããããäžæ¹ã«ã¯ãããã»ã¹ãè«ççãªã¹ãããã«åå²ããåªããããŒã«ããããŸããã¿ã¹ã¯ã§ãã ããã«ãåã¿ã¹ã¯ã¯ç°ãªãããŒã«ã䜿çšã§ããŸãã
ããæç¢ºã«ããããã«ãããè€éãªäŸãèããŠã¿ãŸãããã åã®æ®µèœã§ããã£ã1ã€ã®ããŒã ïŒ gradle build
çµã¿ç«ãŠãããåçŽãªãããžã§ã¯ãã®äŸãæããŸããã ããããããã¯åžžã«èµ·ãããšã¯éããŸããã å€å
žçãªã¢ããªã¹ã®äŸãèŠãŠã¿ãŸããããããã³ããšã³ããããã¯ãšã³ãããã¹ãŠãã¹ãŠãåããªããžããªã«ããåäžã®ãããžã§ã¯ãã§ãã ãã®ãããªãããžã§ã¯ãã®çµã¿ç«ãŠã¯ã©ãã§ããïŒ ãã¹ãŠã®ä»®æ³ã¹ãããããªã¹ãããŸãã
ããã³ããšã³ããåéããå¿
èŠããããŸãã ã¹ã¿ã€ã«sass / lessãªã©ã®ããªããã»ããµãçšæããŸãã JSãã¡ã€ã«ãæé©åããã³çž®å°ããããšãã§ããŸãã ãããžã§ã¯ãã®é¡ãåéããããã«ã npm install
ã³ãã³ãã䜿çšããŠäŸåé¢ä¿ãããŠã³ããŒããããã®åŸã gulp
/ grunt
ãªã©ã®ãã«ãããŒã«ã䜿çšããŠãæ¢è£œã®ã³ãŒãgrunt
çæããŸãã ããã¯ããªãæšæºã§ãã ãã«ãåŸãCSSããã³JSã³ãŒããæé©åããã³æå°åãããŠå®å
šã«ã³ã³ãã€ã«ãããç¹å®ã®dist
ãã©ã«ããŒãååŸããŸãã
ïŒ ãã®ã¹ãããã¯ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ç®çã§è¿œå ãããããé¢çœããªããŸãã ïŒçŸåšã®ãªãªãŒã¹ã«é¢ããæ
å ±ãã¢ã»ã³ããªæ®µéã§ã³ãŒãã«çŽæ¥ãåã蟌ã¿ãããå ŽåããããŸããããã«ãã ãçŸåšã©ã®ããŒãžã§ã³ãå®çšŒåã§å®è¡ãããŠããããç°¡åã«å€æã§ããŸãã ãµã€ãã®å°äžã«ããããŒãžã®äžéšã«ããå°ããªã¬ã³ãŒãbuild version 0.11.34.1122
ã§ããããGitã§ã®çŸåšã®ã³ãããã«é¢ããã¡ã¿æ
å ±ïŒããã·ã¥ãäœæè
åãæ¥ä»ãªã©ïŒã§ãããURLã§JSONãšããŠå©çšã§ããŸã/version
sayãšèšãã ãã®ãããªãªãã·ã§ã³ã¯å€æ°ãããŸãã ããã¯ãããŒã ãç¶ç¶çããªããªãŒã®ãã©ã¯ãã£ã¹ã䜿çšããéåžžã«é »ç¹ã«ãªãªãŒã¹ãè¡ãå Žåã«éåžžã«éèŠã§ãã ãããè¡ãã«ã¯ãGitããã¡ã¿æ
å ±ãååŸããŠãããçš®ã®æ§æãã¡ã€ã«ã«ç·å¯ã«ãçž«ãä»ãããããHTMLãã³ãã¬ãŒãã«çŽæ¥ãç°¡åã«ãçž«ãä»ããå°ããªã¹ã¯ãªãããäœæããŸãã ïŒ ã¡ãªã¿ã«ãGoã§ã¯ãã³ã³ãã€ã«äžã« -ldflags
ãã©ã°ã䜿çšããŠåãç®æšãéæã§ããŸããããã®ã¹ãããã¯äŸãã°å¥ã®ã¿ã¹ã¯ã«æå³çã«æ®ããŸãã ïŒ
- ãããŠãã¡ããããµãŒããŒåŽã®ã¢ã»ã³ããªã ãããè¡ãã«ã¯ãäŸåé¢ä¿ãããŠã³ããŒãããåã®æé ã§çæããããã¡ã€ã«ã転éããŠããã¹ãŠããŸãšããŠåéããå¿
èŠããããŸãã ä»åã¯ãGoã§ãããžã§ã¯ãããŸãšããŸãããã ãã®èšèªã§ã¯ãããŸããŸãªããã±ãŒãžãããŒãžã£ãŒã®åç©åå
šäœã§ãäŸãšããŠãã³ããŒãåãäžããŸãããããã®æ¬è³ªã¯å€ãããŸããã ã¢ã»ã³ãã«ããåã«ã
govendor fetch -v +out
ã³ãã³ããäœæããŸããããã¯ããœãŒã¹ã®åœ¢ã§ãã¹ãŠã®æ°ããäŸåé¢ä¿ãããŠã³ããŒããã vendor
ãã©ã«ããŒã«é
眮ããŸãïŒããã€ãã®ããã°ã©ããŒã¯ãäŸåé¢ä¿ãäœåºŠãã¢ã³ããŒãããªãããã«ãã©ã«ããŒå
šäœãgitã«ã³ãããããããšã«æ³šæããŠãã ãã;äž¡æ¹ã®ã¢ãããŒãã«ã¯é·æãšçæãããããã®è°è«ã¯ãã®èšäºã®ç¯å²ãè¶
ããŠããŸãïŒã ããŠãäŸåé¢ä¿ã®ãœãŒã¹ãããŒã«ã«ã§ããããšã倿ããåŸããã¹ãŠãã³ã³ãã€ã«ã§ããŸãã
ããã§ãç§ãã¡ã¯äœãæ°ããŸããïŒãã«ãã«ããè¡ãã«ã¯ãã·ã¹ãã ã«npmãgulpãgitïŒsshã«äŸåããïŒãgoãgovendorãå¿
èŠã§ããèŠããŠããããã«ãConcourseCIã®ã¢ã»ã³ããªã¯dockerã³ã³ããã§å®è¡ããããããããžãã¯ã¯ãã«ã¹ã¿ã dockerã€ã¡ãŒãžãæ§ç¯ããäžèšã®ãã¹ãŠãããã«å
¥ããŠããã©ã€ããŒãã¬ãžã¹ã¿ã«é
眮ããã®ãè¯ãããšã瀺ããŠããŸãããã®ã€ã¡ãŒãžã«ã¯å¿
èŠãªãã®ããã¹ãŠå«ãŸããŠããããã®äžã«å¿
èŠãªã³ãã³ããå®è¡ã§ããŸã-gitãnpmãããã³go ã¯ãããã®æ¹æ³ã¯æ©èœããŸããããã¡ãããããã䟡å€ã¯ãããŸããããããŠãããã§ã¯ã1ã€ã®ã¿ã¹ã¯ïŒãžã§ãïŒãããŸããŸãªå°ããªããã«ãŒã³ã³ãããŒã§èµ·åãããå€ãã®ãµãã¿ã¹ã¯ã«åå²ãããšäŸ¿å©ã§ãããã®ãããæ¬¡ã®ãããªã¿ã¹ã¯ããããŸãã
- NPMäŸåé¢ä¿ãããŒãããã¯ã©ã€ã¢ã³ãåŽãæ§ç¯ããŸãã
- Git
- Go
, , . (job), -, .
, , . â NPM, Gulp , â git ssh , â go-vendor . , , , !
, , ? ! ConcourseCI aggregate , , , . , , , , , :
â NPM , Gulp build 1. âš Git version â° Go 2. go build
, ( source-code docker-example-image ):
... jobs: - name: "Build monolith example" plan: - get: source-code trigger: true # aggregate, # - aggregate: # Build the frontend (SASS and Javascript) - task: "Build frontend, compile SASS, download dependencies" config: platform: linux image_resource: type: docker-image source: repository: 'monostream/nodejs-gulp-bower' inputs: - name: source-code outputs: - name: compiled-assets run: path: sh args: - -ec - | cd source-code/ # npm install # gulp build # outputs, # cp -r dist/* ../compiled-assets/ - task: "Download GO dependencies" config: platform: linux image_resource: type: docker-image source: repository: "electrotumbao/go-govendor" inputs: - name: source-code # Go: # # # # path path: src/authorName/repoName outputs: - name: vendor-output run: path: sh args: - -ec - | export GOPATH GOPATH="$(pwd)" cd src/authorName/repoName/ || exit # output, # govendor fetch -v +out cp -r vendor/* "$GOPATH"/vendor-output - task: "Update GIT commit details" config: platform: linux image_resource: type: docker-image source: { repository: 'alpine/git', tag: "latest"} inputs: - name: source-code outputs: - name: versioned-file run: path: sh args: - -ec - | # cd source-code GITSHA=$(git rev-parse HEAD) GITAUTHOR=$(git log
, .

, , (job). , . , : NPM , â Go ( ). .

, , :

åºæ¥äžããïŒ , ! . , -.
, . . , ! !
:
UPD 15.3.2018: , , .