Kai Tödter
Who am I? Principal Key Expert
at Siemens Building Technologies
Web Technology Fan
Open Source Lover
E-mail: [email protected]
Twitter: twitter.com/kaitoedter
Blog: toedter.com/blog
4/10/2018 2 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License.
Show Hands!
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 3
Outline
Build Pipeline with Docker
Setting up
Jenkins
SonarQube
Artifactory
Terraform
AWS Deployment
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 4
Demo (Local Docker)
https://192.168.99.100
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 5
How to run the Demo? Install Docker
git clone https://github.com/toedter/cd-pipeline
cd docker
Edit the docker host in cd-pipeline.sh or .bat
When using Windows: Make sure *.sh files and plugins.txt have Unix line endings
Run cd-pipeline.sh or .bat
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 6
DevOps CAMS
Culture
Automation
Measurement
Sharing
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 7
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 8
Automation
What can be automated Testing
Build Pipelines
Build Infrastructure
Deployments
Monitoring
Configuration
…
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 9
Infrastructure as Code
Automation of infrastructure creation
Servers, OS, software, storage, networking, …
Stored in code repositories
Lots of tools available
SaltStack, Puppet, Chef, Terraform, Ansible, …
Infrastructure as Code is the approach “treating infrastructure like software”
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 10
Creating a Build Pipeline
Jenkins
Continuous Integration
SonarQube
Internal Quality
Artifactory
Binary Artifact Repository
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 11
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 12
Docker
Docker images for
Jenkins, Sonarqube, Artifactory, nginx
Extra container for tools configuration
Docker Compose
for defining and running the multi-container pipeline tools
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 13
Dockerfile (nginx) FROM nginx COPY nginx-selfsigned.crt /etc/ssl/ COPY nginx-selfsigned.key /etc/ssl/ COPY index.html /usr/share/nginx/html/ COPY *.png /usr/share/nginx/html/ COPY nginx.conf /etc/nginx
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 14
Docker Compose version: '3.2' networks: cd-tools-network: driver: bridge services: sonarqubedb: image: postgres container_name: sonarqube-db environment: - POSTGRES_USER=sonar - POSTGRES_PASSWORD=sonar volumes: - /volumes/postgres/data:/var/lib/postgresql/data
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 15
Docker Code Deep Dive
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 16
Pipeline as Code
Jenkins => Jenkinsfile
TracisCI => .travis.yml
Gitlab CI => .gitlab-ci.yml
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 17
Jenkinsfile pipeline { agent { docker { image 'java:openjdk-8' args '--network=docker_cd-tools-network' } } stages { stage('build + tests') { steps { sh './gradlew test' } } …
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 18
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 19
Terraform
Terraform
Write
Infrastructure as code
Plan
Preview changes before applying
Create
Always reproducible infrastructure
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 20
Pipeline, Terraform and AWS
Create Security Groups
Configure SSH keys
Create EC2 instance
Provide scripts that are executed after creation
Output IP address
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 21
Terraform Code Deep Dive
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 22
Demo (AWS)
https://<ip address from terraform output>
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 23
What’ Next? DNS entries for all tools
Let’s Encrypt Certificates
Backup/Restore
Monitoring with Prometheus and Grafana
Support of Nexus and Teamscale
AWS Spot instances
Single & Multi host deployments
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 24
NextGen Pipeline Demo (AWS)
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 25
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 26
Discussion
Links
Github Repo: https://github.com/toedter/cd-pipeline
Terraform: https://www.terraform.io/
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 27
License This work is licensed under a Creative Commons
Attribution 4.0 International License. See http://creativecommons.org/licenses/by/4.0/
4/10/2018 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 28
Top Related