Building a Continuous Integration Pipeline with Travis CI

Brought by: A Cloud Guru

Overview

Travis CI lets us automate the process of code testing, integration, delivery, and deployment, allowing us to bring DevOps and Agile principles into our code practices from push to production deployment. Fully-hosted and ready to use at only a few clicks of a button, Travis CI ties into your existing version control system and gets you ready to automate build testing and more with minimal up-front effort – gone are the days of having to supply your own testing infra!This course gets you started with Travis CI by breaking down the primary tool used to setup the platform: the .travis.yaml file. We’ll break down this file and use its structure to learn the different build phases Travis CI takes when integrating our application. With knowledge of these phases, we can then optimize our “Travisfile” to perform a number of jobs, test against a number of parameters, work in both parallel and in stages, and deploy to as many endpoints as we need.

Syllabus

  • Introduction
  • Setup and First Build
  • Improving the Build Process
  • Build Deployment
  • Conclusion

Taught by

Elle

Building a Continuous Integration Pipeline with Travis CI
Go to course

Building a Continuous Integration Pipeline with Travis CI

Brought by: A Cloud Guru

  • A Cloud Guru
  • Paid
  • English
  • Certificate Available
  • Available at any time
  • All
  • N/A
8.1.2PHP Version959msRequest Duration2MBMemory UsageGET en/courses/{slug}Route
    • Booting (624ms)
    • Application (333ms)
    • 1 x Booting (65.06%)
      623.87ms
      1 x Application (34.69%)
      332.62ms
      14 templates were rendered
      • public.courses.show (resources/views/public/courses/show.blade.php)3bladefile
        Params
        0
        course
        1
        links
        2
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.courses.partials.details (resources/views/public/courses/partials/details.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.layouts.main (resources/views/public/layouts/main.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.meta (resources/views/public/layouts/partials/meta.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.navbar (resources/views/public/layouts/partials/navbar.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.links (resources/views/public/auth/profile/partials/links.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.layouts.partials.flash-session (resources/views/public/layouts/partials/flash-session.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      uri
      GET en/courses/{slug}
      middleware
      web, localize:en
      controller
      App\Http\Controllers\CourseController@show
      as
      en.courses.show
      namespace
      prefix
      /en
      where
      file
      app/Http/Controllers/CourseController.php:17-35
      6 statements were executed10.38ms
      • select * from `courses` where `slug_en` = 'building-a-continuous-integration-pipeline-with-travis-ci' limit 1
        8.95ms/app/Http/Controllers/CourseController.php:20corspedia
        Metadata
        Bindings
        • 0. building-a-continuous-integration-pipeline-with-travis-ci
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:20
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • update `courses` set `visitors` = `visitors` + 1, `courses`.`updated_at` = '2025-06-26 04:42:46' where `id` = 2248
        590μs/app/Http/Controllers/CourseController.php:21corspedia
        Metadata
        Bindings
        • 0. 2025-06-26 04:42:46
        • 1. 2248
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:21
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `topic_id`, `slug_en`, `slug_ar` from `subjects` where `subjects`.`id` in (63)
        200μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `slug_en`, `slug_ar` from `topics` where `topics`.`id` in (1)
        170μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 25. /app/Http/Controllers/CourseController.php:23
        • 26. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 27. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 28. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 29. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `providers` where `providers`.`id` in (45) and `providers`.`deleted_at` is null
        200μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `html_files` where `html_files`.`id` = 2239 limit 1
        270μs/app/Models/Course.php:84corspedia
        Metadata
        Bindings
        • 0. 2239
        Backtrace
        • 21. /app/Models/Course.php:84
        • 28. view::public.courses.show:29
        • 30. /vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:125
        • 31. /vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:58
        • 32. /vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:72
      App\Models\HtmlFile
      1
      App\Models\Provider
      1
      App\Models\Topic
      1
      App\Models\Subject
      1
      App\Models\Course
      1
        _token
        BE3SLQce0jfdt9NgsGxJ4Z7R4BiKsbXNG3rm5Yr6
        locale
        en
        _previous
        array:1 [ "url" => "https://www.corspedia.com/en/courses/building-a-continuous-integration-pipelin...
        _flash
        array:2 [ "old" => [] "new" => [] ]
        PHPDEBUGBAR_STACK_DATA
        []
        path_info
        /en/courses/building-a-continuous-integration-pipeline-with-travis-ci
        status_code
        200
        
        status_text
        OK
        format
        html
        content_type
        text/html; charset=UTF-8
        request_query
        []
        
        request_request
        []
        
        request_headers
        0 of 0
        array:24 [ "cf-ipcountry" => array:1 [ 0 => "US" ] "cf-connecting-ip" => array:1 [ 0 => "216.73.216.41" ] "cdn-loop" => array:1 [ 0 => "cloudflare; loops=1" ] "x-forwarded-proto" => array:1 [ 0 => "https" ] "x-forwarded-for" => array:1 [ 0 => "216.73.216.41" ] "sec-fetch-site" => array:1 [ 0 => "none" ] "accept" => array:1 [ 0 => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ] "user-agent" => array:1 [ 0 => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" ] "upgrade-insecure-requests" => array:1 [ 0 => "1" ] "sec-ch-ua-platform" => array:1 [ 0 => ""Windows"" ] "sec-ch-ua-mobile" => array:1 [ 0 => "?0" ] "sec-ch-ua" => array:1 [ 0 => ""Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"" ] "cache-control" => array:1 [ 0 => "no-cache" ] "pragma" => array:1 [ 0 => "no-cache" ] "sec-fetch-dest" => array:1 [ 0 => "document" ] "cf-ray" => array:1 [ 0 => "955a0a32fa53f60a-ORD" ] "accept-encoding" => array:1 [ 0 => "gzip, br" ] "priority" => array:1 [ 0 => "u=0, i" ] "sec-fetch-user" => array:1 [ 0 => "?1" ] "sec-fetch-mode" => array:1 [ 0 => "navigate" ] "cf-visitor" => array:1 [ 0 => "{"scheme":"https"}" ] "host" => array:1 [ 0 => "www.corspedia.com" ] "content-length" => array:1 [ 0 => "" ] "content-type" => array:1 [ 0 => "" ] ]
        request_server
        0 of 0
        array:50 [ "USER" => "www-data" "HOME" => "/var/www" "HTTP_CF_IPCOUNTRY" => "US" "HTTP_CF_CONNECTING_IP" => "216.73.216.41" "HTTP_CDN_LOOP" => "cloudflare; loops=1" "HTTP_X_FORWARDED_PROTO" => "https" "HTTP_X_FORWARDED_FOR" => "216.73.216.41" "HTTP_SEC_FETCH_SITE" => "none" "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" "HTTP_USER_AGENT" => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" "HTTP_UPGRADE_INSECURE_REQUESTS" => "1" "HTTP_SEC_CH_UA_PLATFORM" => ""Windows"" "HTTP_SEC_CH_UA_MOBILE" => "?0" "HTTP_SEC_CH_UA" => ""Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"" "HTTP_CACHE_CONTROL" => "no-cache" "HTTP_PRAGMA" => "no-cache" "HTTP_SEC_FETCH_DEST" => "document" "HTTP_CF_RAY" => "955a0a32fa53f60a-ORD" "HTTP_ACCEPT_ENCODING" => "gzip, br" "HTTP_PRIORITY" => "u=0, i" "HTTP_SEC_FETCH_USER" => "?1" "HTTP_SEC_FETCH_MODE" => "navigate" "HTTP_CF_VISITOR" => "{"scheme":"https"}" "HTTP_HOST" => "www.corspedia.com" "REDIRECT_STATUS" => "200" "SERVER_NAME" => "corspedia.com" "SERVER_PORT" => "443" "SERVER_ADDR" => "141.95.147.152" "REMOTE_USER" => "" "REMOTE_PORT" => "28396" "REMOTE_ADDR" => "172.70.131.191" "SERVER_SOFTWARE" => "nginx/1.18.0" "GATEWAY_INTERFACE" => "CGI/1.1" "HTTPS" => "on" "REQUEST_SCHEME" => "https" "SERVER_PROTOCOL" => "HTTP/2.0" "DOCUMENT_ROOT" => "/var/www/corspedia/public" "DOCUMENT_URI" => "/index.php" "REQUEST_URI" => "/en/courses/building-a-continuous-integration-pipeline-with-travis-ci" "SCRIPT_NAME" => "/index.php" "CONTENT_LENGTH" => "" "CONTENT_TYPE" => "" "REQUEST_METHOD" => "GET" "QUERY_STRING" => "" "SCRIPT_FILENAME" => "/var/www/corspedia/public/index.php" "PATH_INFO" => "" "FCGI_ROLE" => "RESPONDER" "PHP_SELF" => "/index.php" "REQUEST_TIME_FLOAT" => 1750912965.8768 "REQUEST_TIME" => 1750912965 ]
        request_cookies
        []
        
        response_headers
        0 of 0
        array:5 [ "content-type" => array:1 [ 0 => "text/html; charset=UTF-8" ] "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ 0 => "Thu, 26 Jun 2025 04:42:46 GMT" ] "set-cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6InpCTkJHTG9HMlVnWVlYZ0xPWGZyMlE9PSIsInZhbHVlIjoicU9qWjc3eTZUQzJiU3p6T3A0S21Xa0V1Y2c2WXdjQjY5ampjb3VNVzZ3RXFaalZMZ1lEM0QxTS9QK2JjS1pBZy9GeGtuUFo2bGd6ODRwbDQrczdHbVNDU3NiNGJQazc0bjBXTHBIbitYSUtiWmxVWnB4ZEh1QnQ5WEhvUWlvSloiLCJtYWMiOiJjY2JhMmRlNTllZGRkYzFiMzQ4NDJmNGE3ZjI0ODBjN2ZmOWQ3YWExOTkwMjAwOTljNzJhNTk0YmVmOTJiMzk1IiwidGFnIjoiIn0%3D; expires=Thu, 26 Jun 2025 06:42:46 GMT; Max-Age=7200; path=/; samesite=laxXSRF-TOKEN=eyJpdiI6InpCTkJHTG9HMlVnWVlYZ0xPWGZyMlE9PSIsInZhbHVlIjoicU9qWjc3eTZUQzJiU3p6T3A0S21Xa0V1Y2c2WXdjQjY5ampjb3VNVzZ3RXFaalZMZ1lEM0QxTS9QK2JjS1pBZy9GeGtuU" 1 => "laravel_session=eyJpdiI6InZLWUdXRDFiaVlLY0ZBb3pUQTEzaWc9PSIsInZhbHVlIjoiL2gvMUhOTWlMODN0NWlXUFk3SHZXeStWRmdBSkRaeU5FcWNNUlowUFl5SzhvRk90ZysxZ093dmxzY3ZmSUcyTW1yVzNMZE5Ramx3Sk1zVjVyU005SWJTOXkxNGYwTEp3NUFOZFFHU2pvZkplVWwyclppU1JYMHZnN3ZXWEZYUW4iLCJtYWMiOiI4NGI3NTc4ZTNlOTMyZmQ4MGZhNDhlMGJiYzhiNDlhYTYwZTA2OWRkNjg1YTg0N2Y0OWUyNjlhYzE0MTNmY2NhIiwidGFnIjoiIn0%3D; expires=Thu, 26 Jun 2025 06:42:46 GMT; Max-Age=7200; path=/; httponly; samesite=laxlaravel_session=eyJpdiI6InZLWUdXRDFiaVlLY0ZBb3pUQTEzaWc9PSIsInZhbHVlIjoiL2gvMUhOTWlMODN0NWlXUFk3SHZXeStWRmdBSkRaeU5FcWNNUlowUFl5SzhvRk90ZysxZ093dmxzY3ZmSUcyTW1y" ] "Set-Cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6InpCTkJHTG9HMlVnWVlYZ0xPWGZyMlE9PSIsInZhbHVlIjoicU9qWjc3eTZUQzJiU3p6T3A0S21Xa0V1Y2c2WXdjQjY5ampjb3VNVzZ3RXFaalZMZ1lEM0QxTS9QK2JjS1pBZy9GeGtuUFo2bGd6ODRwbDQrczdHbVNDU3NiNGJQazc0bjBXTHBIbitYSUtiWmxVWnB4ZEh1QnQ5WEhvUWlvSloiLCJtYWMiOiJjY2JhMmRlNTllZGRkYzFiMzQ4NDJmNGE3ZjI0ODBjN2ZmOWQ3YWExOTkwMjAwOTljNzJhNTk0YmVmOTJiMzk1IiwidGFnIjoiIn0%3D; expires=Thu, 26-Jun-2025 06:42:46 GMT; path=/XSRF-TOKEN=eyJpdiI6InpCTkJHTG9HMlVnWVlYZ0xPWGZyMlE9PSIsInZhbHVlIjoicU9qWjc3eTZUQzJiU3p6T3A0S21Xa0V1Y2c2WXdjQjY5ampjb3VNVzZ3RXFaalZMZ1lEM0QxTS9QK2JjS1pBZy9GeGtuU" 1 => "laravel_session=eyJpdiI6InZLWUdXRDFiaVlLY0ZBb3pUQTEzaWc9PSIsInZhbHVlIjoiL2gvMUhOTWlMODN0NWlXUFk3SHZXeStWRmdBSkRaeU5FcWNNUlowUFl5SzhvRk90ZysxZ093dmxzY3ZmSUcyTW1yVzNMZE5Ramx3Sk1zVjVyU005SWJTOXkxNGYwTEp3NUFOZFFHU2pvZkplVWwyclppU1JYMHZnN3ZXWEZYUW4iLCJtYWMiOiI4NGI3NTc4ZTNlOTMyZmQ4MGZhNDhlMGJiYzhiNDlhYTYwZTA2OWRkNjg1YTg0N2Y0OWUyNjlhYzE0MTNmY2NhIiwidGFnIjoiIn0%3D; expires=Thu, 26-Jun-2025 06:42:46 GMT; path=/; httponlylaravel_session=eyJpdiI6InZLWUdXRDFiaVlLY0ZBb3pUQTEzaWc9PSIsInZhbHVlIjoiL2gvMUhOTWlMODN0NWlXUFk3SHZXeStWRmdBSkRaeU5FcWNNUlowUFl5SzhvRk90ZysxZ093dmxzY3ZmSUcyTW1y" ] ]
        session_attributes
        0 of 0
        array:5 [ "_token" => "BE3SLQce0jfdt9NgsGxJ4Z7R4BiKsbXNG3rm5Yr6" "locale" => "en" "_previous" => array:1 [ "url" => "https://www.corspedia.com/en/courses/building-a-continuous-integration-pipeline-with-travis-ci" ] "_flash" => array:2 [ "old" => [] "new" => [] ] "PHPDEBUGBAR_STACK_DATA" => [] ]