Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Péhápkaři v Pecce: Jak na Jenkins CI pro aplikaci v Dockeru - Matouš Czerner - 18. 4. 2018

982 views

Published on

Jak na Jenkins CI pro aplikaci v Dockeru - Matouš Czerner
Přednáška z 18. Srazu přátel PHP v PeckaDesign.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Péhápkaři v Pecce: Jak na Jenkins CI pro aplikaci v Dockeru - Matouš Czerner - 18. 4. 2018

  1. 1. Jak na Jenkins CI pro aplikaci v Dockeru
  2. 2. Matouš Czerner Matouš Czerner matous.czerner@shopsys.com Developer Shopsys Frameworku. Specializuji se na Docker a Linux. Mám rád složité úkoly a výzvy.
  3. 3. Přednáška dostupná zde http://bit.ly/phpkari-docker-ci
  4. 4. Jenkins CI pro buildění 40 větví PHP aplikace v Dockeru
  5. 5. Spustit build v dockeru pro každou větev která existuje v našem repozitáři. Každá větev musí být otestována. Každá větev musí být dostupná na url adrese ke kontrole pro product ownera. Co vlastně potřebujeme
  6. 6. ● Funkční jenkins ● Docker ● Nginx ● Netstat ● Jenkins autojobs Co už by mělo být funkční..
  7. 7. Unikátní porty a názvy kontejnerů
  8. 8. webserver: image: nginx:1-alpine container_name: shopsys-framework-webserver ports: - "8000:8080" adminer: image: adminer container_name: shopsys-framework-adminer ports: - "1100:8080" docker-compose.yml
  9. 9. Container names sed -i “s/container_name:s*b/container_name: $JOB_NAME-/” $WORKSPACE/docker-compose.yml
  10. 10. Netstatem zjistit volné porty NETSTAT_LIST= $(netstat -at --numeric-ports); PORT_BASE_WEB=8000; PORT_BASE_ADMINER=1100; MAX_PORT_INCREMENT=99; for PORT_INCREMENT in $(seq 0 $MAX_PORT_INCREMENT); do PORT_WEB=$((PORT_BASE_WEB+PORT_INCREMENT)); PORT_ADMINER=$((PORT_BASE_ADMINER+PORT_INCREMENT)); if [ -z “$(grep “:($PORT_WEB|$PORT_ADMINER) “ <<< “$NETSTAT_LIST”)” ] then break; fi done;
  11. 11. sed -i “s/ - ”$PORT_BASE_WEB:*/- ”$PORT_WEB:/” $WORKSPACE/docker-compose.yml sed -i “s/ - ”$PORT_BASE_ADMINER:*/- ”$PORT_ADMINER:/” $WORKSPACE/docker-compose.yml Použijme porty
  12. 12. webserver: image: nginx:1-alpine container_name: master-shopsys-framework-webserver ports: - "8005:8080" adminer: image: adminer container_name: master-shopsys-framework-adminer ports: - "1105:8080"
  13. 13. Spustit build v dockeru pro každou větev která existuje v našem repozitáři. Každá větev musí být otestována. Každá větev musí být dostupná na url adrese ke kontrole pro product ownera. Co máme hotovo
  14. 14. Nginx jako proxy
  15. 15. Šablona Nginx proxy /var/nginx-template.conf upstream {{JOB_NAME}}-upstream { server 127.0.0.1:{{PORT_WEB}} } server { listen 80; server_name {{JOB_NAME}}.server$; location / { proxy_pass http://{{JOB_NAME}}-upstream; // .. } }
  16. 16. Náplň Nginx šablony cp -f /var/nginx-template.conf /etc/nginx/conf.d/$JOB_NAME.conf sed -i “s/{{JOB_NAME}}*/$JOB_NAME/” etc/nginx/conf.d/$JOB_NAME.yml sed -i “s/{{PORT_WEB}}*/$PORT_WEB/” etc/nginx/conf.d/$JOB_NAME.yml sudo nginx -s reload
  17. 17. Sudoers root ALL=(ALL) ALL + jenkins ALL=(ALL) NOPASSWD: /usr/sbin/nginx
  18. 18. Permissions
  19. 19. setfacl $root@server: setfacl -Rm user:jenkins:rwx /var/lib/jenkins/workspace $root@server: setfacl -dRm user:jenkins:rwx /var/lib/jenkins/workspace
  20. 20. Otázky? slack.shopsys-framework.com Matouš Czerner matous.czerner@shopsys.com github.com/shopsys bit.ly/pehapkari-docker-ci linkedin.com/in/matousczerner/

×