<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Armory Docs – Armory Continuous Deployment Overview</title><link>/continuous-deployment/overview/</link><description>Recent content in Armory Continuous Deployment Overview on Armory Docs</description><generator>Hugo -- gohugo.io</generator><atom:link href="/continuous-deployment/overview/index.xml" rel="self" type="application/rss+xml"/><item><title>Continuous-Deployment: Spinnaker Nomenclature and Naming Conventions</title><link>/continuous-deployment/overview/naming-conventions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/naming-conventions/</guid><description>
&lt;h2 id="nomenclature">Nomenclature&lt;/h2>
&lt;h3 id="application">Application&lt;/h3>
&lt;p>An application inside Spinnaker represents what you would typically find in a single code repository - and in many cases, an application maps directly to a microservice.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/application.png"/>
&lt;/figure>
&lt;h3 id="cluster">Cluster&lt;/h3>
&lt;p>A server group is a regional view of servers, whereas a cluster is a world-wide view of server groups.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/cluster.png"/>
&lt;/figure>
&lt;h3 id="execution">Execution&lt;/h3>
&lt;p>When a pipeline runs, the end result is called an execution.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/execution.png"/>
&lt;/figure>
&lt;h3 id="pipeline">Pipeline&lt;/h3>
&lt;p>A pipeline in Spinnaker is a series of stages linked together that can be executed serially or in parallel. All pipelines are defined in the context of an application. A typical pipeline will contain stages for “creating images”, “testing”, and “deploying”. The process of “creating images” is also commonly referred to as a “bake”.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/pipeline.png"/>
&lt;/figure>
&lt;h3 id="project">Project&lt;/h3>
&lt;p>A project inside Spinnaker is a logical grouping of applications. For example, we might create a project called “Spinnaker” and its applications would be “Deck”, “Orca”, “Clouddriver”, etc. Spinnaker provides a helpful dashboard view for each project to visualize its applications and status of each application contained within it.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/project-dashboard.png"/>
&lt;/figure>
&lt;h3 id="server-group">Server Group&lt;/h3>
&lt;p>From an Amazon Web Service (AWS) point of view, a server group is represented by an auto-scaling group (ASGs). All applications that are deployed by Spinnaker are deployed to server groups.&lt;/p>
&lt;figure>
&lt;img src="images/overview/cluster.png"/>
&lt;/figure>
&lt;h3 id="stage">Stage&lt;/h3>
&lt;p>Within a pipeline, the tasks that pipeline performs are called stages.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/pipeline.png"/>
&lt;/figure>
&lt;h3 id="trigger">Trigger&lt;/h3>
&lt;p>A trigger is the entry point to a pipeline.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/trigger.png"/>
&lt;/figure>
&lt;h2 id="spinnaker-naming-conventions">Spinnaker Naming Conventions&lt;/h2>
&lt;p>Spinnaker has very specific naming conventions that help it identify resources in your cloud account.&lt;/p>
&lt;p>Clusters and server groups follow the convention &lt;code>application_name-stack-detail-infrastructure_version&lt;/code>&lt;/p>
&lt;h3 id="application-1">Application&lt;/h3>
&lt;p>The &amp;lsquo;Name&amp;rsquo; is the name of your application in Spinnaker.&lt;/p>
&lt;h3 id="stack">Stack&lt;/h3>
&lt;p>You can think of a &amp;lsquo;Stack&amp;rsquo; as a tag you give to anything that you want to be integrated together. Environments are usually a good example of something you would tag with a Stack. If you have an app that has an ELB, a Cache, and an ASG, usually you would want to run integration tests on your staging environment separately from your production environment. In that case, you would give the staging ELB, Cache, and ASG all the “staging” stack, while prod ELB, Cache, and ASG would be the “prod” stack.&lt;/p>
&lt;p>Note that Stack names are defined by the user in the Spinnaker configuration User Interface (UI).&lt;/p>
&lt;h3 id="detail">Detail&lt;/h3>
&lt;p>Detail is also user-defined and can be any additional piece of information you want to label your cluster and server group with.&lt;/p>
&lt;h3 id="infrastructure-version">Infrastructure Version&lt;/h3>
&lt;p>The infrastructure&amp;rsquo;s version number; such as v011, v012, etc. This is automatically appended and is not user defined.&lt;/p>
&lt;p>In AWS, Spinnaker will name your ASGs and Launch Configurations according to the naming convention mentioned above (ie. “armoryspinnaker-prod-polling-v015”).&lt;/p>
&lt;figure>
&lt;img src="/images/Image-2017-03-24-at-3.10.53-PM.png"/>
&lt;/figure>
&lt;p>Please note that if your user definition includes a hyphen, it will disrupt the naming convention.&lt;/p></description></item><item><title>Continuous-Deployment: Spinnaker™ Architecture</title><link>/continuous-deployment/overview/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/architecture/</guid><description>
&lt;h2 id="armory-continuous-deployment-architecture">Armory Continuous Deployment architecture&lt;/h2>
&lt;p>Armory Continuous Deployment is an enterprise version of open source &lt;a href="https://spinnaker.io/">Spinnaker&lt;/a>. It is composed of several microservices for resiliency and follows the single-responsibility principle. It allows for faster iteration on each individual component and a more pluggable architecture for custom components. See the open source Spinnaker &lt;a href="https://spinnaker.io/docs/reference/architecture/microservices-overview/#system-dependencies">microservices overview&lt;/a> for port mappings and a table of service interdependencies.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/SpinnakerArchitecture.png"/>
&lt;/figure>
&lt;h2 id="armory-continuous-deployment-microservices">Armory Continuous Deployment microservices&lt;/h2>
&lt;h3 id="clouddriver">Clouddriver&lt;/h3>
&lt;p>Clouddriver is a core component of Armory Continuous Deployment and facilitates the interaction between a given cloud provider such as AWS, GCP or Kubernetes. There is a common interface that is used so that additional cloud providers can be added.&lt;/p>
&lt;h3 id="deck">Deck&lt;/h3>
&lt;p>Deck is the UI for interactive and visualizing the state of cloud resources. It depends on Gate to interact with the cloud providers.&lt;/p>
&lt;h3 id="echo">Echo&lt;/h3>
&lt;p>Echo is the service for Spinnaker which manages notifications, alerts and scheduled pipelines (Cron). It can also propagate these events out to other REST endpoints such as an Elastic Search, Splunk&amp;rsquo;s HTTP Event Collector or a custom event collector/processor.&lt;/p>
&lt;h3 id="fiat">Fiat&lt;/h3>
&lt;p>Fiat is the microservice responsible for authorization (authz) for the other microservices. By default, it is not enabled, so users are able to perform any action in Armory Continuous Deployment.&lt;/p>
&lt;h3 id="front50">Front50&lt;/h3>
&lt;p>Front50 is the persistent datastore for Spinnaker. Most notabily pipelines, configurations, and jobs.&lt;/p>
&lt;h3 id="gate">Gate&lt;/h3>
&lt;p>Gate is the front-end API that is exposed to the users of your Spinnaker instance. It also manages authentication and authorization for sub-service APIs and resources with Spinnaker. All communication between the UI and the back-end services happen through Gate. You can find a list of the endpoints available through Swagger: &lt;code>http://${GATE_HOST}:8084/swagger-ui.html&lt;/code>&lt;/p>
&lt;h3 id="igor">Igor&lt;/h3>
&lt;p>Igor is a wrapper API which communicates with Jenkins. It is responsible for kicking-off jobs and reporting the state of running or completing jobs.&lt;/p>
&lt;h3 id="kayenta">Kayenta&lt;/h3>
&lt;p>Kayenta is Spinnaker&amp;rsquo;s canary analysis service, integrating with 3rd party monitoring services such as Datadog or Prometheus.&lt;/p>
&lt;h3 id="orca">Orca&lt;/h3>
&lt;p>Orca is responsible for the orchestration of pipelines, stages, and tasks within Armory Continuous Deployment. Orca acts as the &amp;ldquo;traffic cop&amp;rdquo; within Armory Continuous Deployment making sure that sub-services, their executions and states are passed along correctly.&lt;/p>
&lt;p>The smallest atomic unit within Orca is a task - stages are composed of tasks and pipelines are composed of stages.&lt;/p>
&lt;h3 id="rosco">Rosco&lt;/h3>
&lt;p>Rosco is the &amp;ldquo;bakery&amp;rdquo; service. It is a wrapper around Hashicorp&amp;rsquo;s Packer command line tool which bakes images for AWS, GCP, Docker, Azure, and &lt;a href="https://www.packer.io/docs/builders">other builders&lt;/a>.&lt;/p>
&lt;h2 id="armory-continuous-deployment-proprietary-microservices">Armory Continuous Deployment proprietary microservices&lt;/h2>
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/p>
&lt;h3 id="armory-scale-agent-for-spinnaker-and-kubernetes">Armory Scale Agent for Spinnaker and Kubernetes&lt;/h3>
&lt;p>The &lt;a href="/plugins/scale-agent/"}>Scale Agent for Spinnaker and Kubernetes&lt;/a> is a lightweight, scalable service that monitors your Kubernetes infrastructure and streams changes back to the Clouddriver service.&lt;/p>
&lt;h3 id="dinghy">Dinghy&lt;/h3>
&lt;p>&lt;a href="/plugins/pipelines-as-code/">Dinghy&lt;/a> is the microservice used to manage Pipelines-as-Code. It supports two main capabilities:&lt;/p>
&lt;ul>
&lt;li>Automatically synchronizing pipeline definitions from an external Github or BitBucket repository to Armory.&lt;/li>
&lt;li>Creating a library of pipeline modules (components) that can be templatized and used in Dinghy-managed pipeline definitions.&lt;/li>
&lt;/ul>
&lt;h3 id="policy-engine">Policy Engine&lt;/h3>
&lt;p>The &lt;a href="/plugins/policy-engine/">Armory Policy Engine&lt;/a> is designed to allow enterprises more complete control of their software delivery process by providing them with the hooks necessary to perform more extensive verification of their pipelines and processes in Spinnaker. This policy engine is backed by Open Policy Agent(OPA) and uses input style documents to perform validation of pipelines during save time and runtime&lt;/p>
&lt;h3 id="terraformer">Terraformer&lt;/h3>
&lt;p>&lt;a href="/continuous-deployment/armory-admin/terraform-enable-integration/">Terraformer&lt;/a> is the microservice behind Armory&amp;rsquo;s Terraform Integration. It allows Armory to natively use your infrastructure-as-code Terraform scripts as part of a deployment pipeline.&lt;/p>
&lt;h2 id="installation-and-management">Installation and management&lt;/h2>
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/p>
&lt;h3 id="armory-operator">Armory Operator&lt;/h3>
&lt;p>The &lt;a href="/continuous-deployment/installation/armory-operator/">Armory Operator&lt;/a> is a Kubernetes Operator that makes it easy to install, deploy, and upgrade Armory Continuous Deployment.&lt;/p></description></item><item><title>Continuous-Deployment: Permissions in Spinnaker</title><link>/continuous-deployment/overview/fiat-permissions-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/fiat-permissions-overview/</guid><description>
&lt;h2 id="overview-of-fiat">Overview of Fiat&lt;/h2>
&lt;p>Fiat is the microservice in Spinnaker responsible for authorization (authz) for the other Spinnaker services. By default, it is not enabled, so users are able to perform any action in Spinnaker. This page describes how Fiat interacts with the following Spinnaker services:&lt;/p>
&lt;ul>
&lt;li>Clouddriver for account permission&lt;/li>
&lt;li>Front50 for application permissions&lt;/li>
&lt;li>Igor for build services permissions&lt;/li>
&lt;/ul>
&lt;p>When Fiat is enabled, users start with no permissions and must be explicitly granted permissions.&lt;/p>
&lt;p>For a deeper dive into how authz works for Spinnaker, see &lt;a href="https://www.spinnaker.io/setup/security/authorization">Authorization&lt;/a>. Much of Spinnaker&amp;rsquo;s configuration is done through your Halconfig, which can be found in &lt;code>~/.hal/config&lt;/code>.&lt;/p>
&lt;h2 id="requirements">Requirements&lt;/h2>
&lt;p>To use Fiat, you need an external identity provider. Create the user roles and maintain them in the identity provider. Fiat controls what permissions are mapped to roles.&lt;/p>
&lt;p>Fiat supports the following identity providers:&lt;/p>
&lt;ul>
&lt;li>SAML groups (includes OAuth ONLY with OIDC)&lt;/li>
&lt;li>LDAP&lt;/li>
&lt;li>GitHub teams&lt;/li>
&lt;li>Google Groups&lt;/li>
&lt;/ul>
&lt;p>In all these methods, users are referenced by a userId, which is determined by the authentication method of your choice.&lt;/p>
&lt;h2 id="clouddriver-accounts">Clouddriver accounts&lt;/h2>
&lt;p>Clouddriver is the Spinnaker service that interacts with the various providers. When Fiat is enabled, account permissions for Clouddriver determine whether a role or group can perform the following actions:&lt;/p>
&lt;ul>
&lt;li>&lt;code>READ&lt;/code> - See objects in a given cloud account.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code> - Deploy objects to a given account.&lt;/li>
&lt;/ul>
&lt;p>Note that for AWS, a role/group needs both read and write access to deploy an AMI from the AWS account that Rosco uses to build AMIs.&lt;/p>
&lt;h2 id="front50-accounts">Front50 accounts&lt;/h2>
&lt;p>Front50 is the Spinnaker service that acts as the system of record for all the other Spinnaker services. In other words, all metadata for things such as applications and pipelines are stored in and served by Front50. Control access to Front50 by creating service accounts. This can be done through a series of &lt;a href="https://www.spinnaker.io/setup/security/authorization/service-accounts/">cURL commands&lt;/a>.&lt;/p>
&lt;p>Service accounts are used to delegate authority to a pipeline to perform actions in Spinnaker. Users with ALL the roles defined in a service account can grant a pipeline &amp;ldquo;Run as&amp;rdquo; permission. The service accounts you create should map to roles/groups in your identity provider. Additionally, all pipelines configured to run off of a trigger must also be configured with &amp;ldquo;Run as&amp;rdquo; permission, or they will fail.&lt;/p>
&lt;p>Armory recommends that you map one service account for each role/group in the identity provider that will be accessing Spinnaker. This prevents privilege escalation and makes it easier to figure out which roles/group ran which pipeline.&lt;/p>
&lt;h2 id="example-roles">Example roles&lt;/h2>
&lt;p>The rest of this explanation uses the following example roles to illustrate how Fiat works:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;code>fiat-admin&lt;/code>&lt;/p>
&lt;ul>
&lt;li>Administrator for all of Spinnaker. Can do anything implicitly.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;code>admin&lt;/code>&lt;/p>
&lt;ul>
&lt;li>Administrator. Can do anything for all apps. Can read and execute build/ci jobs.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;code>dev&lt;/code>&lt;/p>
&lt;ul>
&lt;li>Full control of pipeline definition for app1 &amp;amp; app2&lt;/li>
&lt;li>Can deploy to &lt;code>dev-infra&lt;/code>&lt;/li>
&lt;li>Can see &lt;code>qa-infra&lt;/code>&lt;/li>
&lt;li>Can attach a build/ci trigger to a pipeline definition&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;code>qa&lt;/code>&lt;/p>
&lt;ul>
&lt;li>Full control of pipeline definition for app1 &amp;amp; app3&lt;/li>
&lt;li>Can deploy to &lt;code>qa-infra&lt;/code>&lt;/li>
&lt;li>Can see &lt;code>dev-infra&lt;/code>&lt;/li>
&lt;li>Can attach a build/ci trigger to pipeline definitions&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;code>ops&lt;/code>&lt;/p>
&lt;ul>
&lt;li>Can deploy to all accounts but cannot change the pipeline definitions. Can read and execute build/ci jobs.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Note that roles, as far as Fiat is concerned, are case insensitive. This means that &lt;code>admin&lt;/code> is equivalent to &lt;code>Admin&lt;/code>, &lt;code>ADMIN&lt;/code>, or any other permutation.&lt;/p>
&lt;h2 id="mapping-exercise">Mapping exercise&lt;/h2>
&lt;p>Answer the following questions to figure out how to map roles and permissions in your deployment:&lt;/p>
&lt;ul>
&lt;li>Which roles/groups have READ and/or WRITE access to which Clouddriver accounts&lt;/li>
&lt;li>Which roles/groups have READ, WRITE, EXECUTE access to each Spinnaker Application&lt;/li>
&lt;li>Which roles/groups have READ and/or WRITE/EXECUTE access to which CI/Build accounts&lt;/li>
&lt;/ul>
&lt;p>The following image shows an example result of this exercise based on the user roles described in &lt;a href="#example-roles">Example Roles&lt;/a>:&lt;/p>
&lt;figure>
&lt;img src="/images/fiat_overview_role_matrix.png"/>
&lt;/figure>
&lt;h2 id="example-configurations">Example Configurations&lt;/h2>
&lt;p>The following sections describe some of the roles from the role matrix example in the &lt;a href="#mapping-exercise">Mapping exercise&lt;/a>.&lt;/p>
&lt;h2 id="superuser">Superuser&lt;/h2>
&lt;p>&lt;code>fiat-admin&lt;/code> is the superuser and has permissions across your whole Spinnaker deployment.&lt;/p>
&lt;p>The configuration for &lt;code>fiat-admin&lt;/code> in the &lt;code>fiat-local.yml&lt;/code> file looks like the following snippet:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">admin&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">roles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - fiat-admin
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="infrastructure">Infrastructure&lt;/h2>
&lt;p>&lt;code>dev-infra&lt;/code> is one of the potential deployment targets (pictured in (&lt;a href="#mapping-exercise">Mapping exercise&lt;/a>).&lt;/p>
&lt;p>The Halconfig snippet for configuring access to &lt;code>dev-infra&lt;/code> based on our mapping exercise looks similar to the following:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">name&lt;/span>: dev-infra
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - admin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - qa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ops
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - admin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ops
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Based on which roles have what access to other infrastructure accounts, the configuration looks different.&lt;/p>
&lt;p>Note that &lt;code>fiat-admin&lt;/code> does not need to be explicitly granted permissions. Every other user role must be granted permissions explicitly.&lt;/p>
&lt;p>For information about how to configure permissions for Clouddriver accounts, see &lt;a href="https://www.spinnaker.io/setup/security/authorization/##accounts">Accounts&lt;/a>.&lt;/p>
&lt;h2 id="continuous-integration-system">Continuous integration system&lt;/h2>
&lt;p>&lt;code>build1&lt;/code> is a Jenkins deployment used for CI in this example. The Halconfig for controlling access to &lt;code>build1&lt;/code> looks similar to the following snippet:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">ci&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jenkins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">masters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: build1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - admin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - qa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ops
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - admin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ops
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="applications">Applications&lt;/h2>
&lt;p>&lt;code>app1&lt;/code> is one of the applications that needs to be deployed. Configuring permissions for an application is done in Deck, Spinnaker&amp;rsquo;s UI, when you create or edit an application:&lt;/p>
&lt;figure>
&lt;img src="/images/fiat_overview_app1_perms.png"/>
&lt;/figure>
&lt;p>&lt;code>app2&lt;/code>, &lt;code>app3&lt;/code>, and &lt;code>app4&lt;/code> will look slightly different since they have different permissions based on the mapping exercise.&lt;/p>
&lt;p>For information about how to configure permissions for applications, see &lt;a href="https://www.spinnaker.io/setup/security/authorization/##applications">Applications&lt;/a>.&lt;/p>
&lt;h2 id="applying-changes">Applying changes&lt;/h2>
&lt;p>Whenever you make a change to permissions that involves modifying your Halconfig, run &lt;code>hal deploy apply&lt;/code> to apply your changes to the Spinnaker deployment. Some permission changes do not require this, such as adding a service account.&lt;/p>
&lt;h2 id="verifying-permissions">Verifying permissions&lt;/h2>
&lt;p>You can verify what permissions are assigned to a role at any time.&lt;/p>
&lt;h2 id="admin-permissions">Admin permissions&lt;/h2>
&lt;p>Check &lt;code>fiat-local.yml&lt;/code> to see who is assigned an &lt;code>admin&lt;/code> role.&lt;/p>
&lt;h2 id="permissions-in-halconfig">Permissions in Halconfig&lt;/h2>
&lt;p>In your Halconfig, you can verify several sets of permissions.&lt;/p>
&lt;p>For example, search for &lt;code>ci&lt;/code> to find the continuous integration section. Look for the &lt;code>permissions&lt;/code> key and examine the &lt;code>READ&lt;/code> and &lt;code>WRITE&lt;/code> subkeys. All the user roles that have read or write permission for the CI system are listed here. The same thing can be done for Clouddriver accounts.&lt;/p>
&lt;h2 id="permissions-for-apps">Permissions for apps&lt;/h2>
&lt;p>Check the permissions for all applications in Spinnaker with a REST API call to Gate.&lt;/p>
&lt;p>&lt;strong>Headers&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Header&lt;/th>
&lt;th>Information&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Request URL&lt;/td>
&lt;td>&lt;code>$GATE_URL/applications&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Request Method&lt;/td>
&lt;td>&lt;code>GET&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>content-type&lt;/td>
&lt;td>&lt;code>application/json;charset=UTF-8&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The API call returns information about the apps. Refer to the &lt;code>name&lt;/code> and &lt;code>permissions&lt;/code> sections to find your applications and the corresponding permissions:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;app2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;permissions&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;EXECUTE&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;admin&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;dev&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;ops&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;READ&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;admin&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;dev&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;ops&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;WRITE&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;admin&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;dev&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="permissions-for-spinnaker-service-accounts">Permissions for Spinnaker service accounts&lt;/h2>
&lt;p>Verifying the permissions for service accounts requires access to the Front50 and Fiat pods.&lt;/p>
&lt;p>List all the service accounts with the following command (from the Front50 pod):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">export&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">FRONT50&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>http://spin-front50:8080
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>curl -s &lt;span style="color:#8be9fd;font-style:italic">$FRONT50&lt;/span>/serviceAccounts
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Check user or service account permissions for all of Spinnaker (from the Fiat pod):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">export&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">FIAT&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>http://spin-fiat:7003
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>curl -s &lt;span style="color:#8be9fd;font-style:italic">$FIAT&lt;/span>/authorize/&lt;span style="color:#8be9fd;font-style:italic">$user&lt;/span>-or-service-account
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns JSON that lists the following information:&lt;/p>
&lt;ul>
&lt;li>Roles the user/service account is part of&lt;/li>
&lt;li>Spinnaker applications the user/service account has access to&lt;/li>
&lt;li>Clouddriver accounts the user/service account has access to&lt;/li>
&lt;li>Build services the user/service account has access to&lt;/li>
&lt;/ul>
&lt;h2 id="pub-sub-and-webhooks">Pub Sub and Webhooks&lt;/h2>
&lt;p>Fiat does not support Pub Sub triggers or authenticating webhooks with group permissions.&lt;/p>
&lt;h2 id="permissions-for-clouddriver-accounts">Permissions for Clouddriver accounts&lt;/h2>
&lt;p>Check Clouddriver&amp;rsquo;s current runtime context with a REST API call to Gate.&lt;/p>
&lt;p>&lt;strong>Headers&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Header&lt;/th>
&lt;th>Information&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Request URL&lt;/td>
&lt;td>&lt;code>$GATE_URL/credentials&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Request Method&lt;/td>
&lt;td>&lt;code>GET&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>content-type&lt;/td>
&lt;td>&lt;code>application/json;charset=UTF-8&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The API call returns JSON that lists the Clouddriver accounts.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &amp;lt;account-name&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &amp;lt;account-type&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;providerVersion&amp;#34;&lt;/span>: &amp;lt;version&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;requiredGroupMembership&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;skin&amp;#34;&lt;/span>: &amp;lt;version&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;permissions&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;authorized&amp;#34;&lt;/span>: &amp;lt;&lt;span style="color:#ff79c6">true&lt;/span>-or-&lt;span style="color:#ff79c6">false&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;my-docker-registry&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;dockerRegistry&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;providerVersion&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;v1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;requiredGroupMembership&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;skin&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;v1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;permissions&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;authorized&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;true&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Continuous-Deployment: Load Balancers in Spinnaker</title><link>/continuous-deployment/overview/load-balancers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/load-balancers/</guid><description>
&lt;h2 id="what-is-a-load-balancer">What is a load balancer?&lt;/h2>
&lt;p>A load balancer is associated with an ingress protocol and port range. It balances traffic among instances in its server groups. Optionally, you can enable health checks for a load balancer, with flexibility to define health criteria and specify the health check endpoint.&lt;/p>
&lt;h2 id="requirements">Requirements&lt;/h2>
&lt;ul>
&lt;li>Before you create a load balancer, your Security Group will already need to exist.&lt;/li>
&lt;/ul>
&lt;h2 id="create-a-load-balancer">Create a load balancer&lt;/h2>
&lt;p>Step 1: After you select your Application, click on the Load Balancers tab.&lt;/p>
&lt;p>Step 2: Click the &amp;ldquo;Create Load Balancer&amp;rdquo; button.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/create-load-balancer.png"/>
&lt;/figure>
&lt;p>Step 3: The Stack and Detail should be kept in mind when creating the pipeline because the pipeline&amp;rsquo;s deployment of server group should be using the same Stack and Detail.&lt;/p>
&lt;h2 id="delete-a-load-balancer">Delete a load balancer&lt;/h2>
&lt;p>Note: You can only delete Load Balancers if they do not have any instances attached to them.&lt;/p>
&lt;p>Step 1: Go to your Load Balancers in your Applications.&lt;/p>
&lt;p>Step 2: Select a Load Balancer, then to the right a column with the Load Balancer&amp;rsquo;s details should appear. Select the drop down menu and press &amp;ldquo;Delete&amp;rdquo;.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/delete-load-balancer.png"/>
&lt;/figure></description></item><item><title>Continuous-Deployment: Your First Application in Spinnaker</title><link>/continuous-deployment/overview/your-first-application/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/your-first-application/</guid><description>
&lt;h2 id="what-is-an-application-in-spinnaker">What is an application in Spinnaker?&lt;/h2>
&lt;p>Spinnaker™ is organized around the concept of applications. An application in Spinnaker is a collection of clusters, which in turn are collections of server groups. The application also includes firewalls and load balancers.&lt;/p>
&lt;p>An application represents the service which you are going to deploy using Spinnaker, all configuration for that service, and all the infrastructure on which it will run.&lt;/p>
&lt;h2 id="the-spinnaker-landing-page">The Spinnaker landing page&lt;/h2>
&lt;p>When you first log in to Spinnaker, the landing page should look like this:&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-application/default-view-top.png"/>
&lt;/figure>
&lt;p>The navigation bar at the top allows you to access Projects, Applications, and
Infrastructure. The search bar allows you to search through your Infrastructure.
(this search bar will find everything in all of your AWS Infrastructure)&lt;/p>
&lt;p>Spinnaker should scan all of your infrastructure and create applications for
anything that it finds. If you enter an application this way that was not
configured by Spinnaker, it should state that the application has not been
configured.&lt;/p>
&lt;p>Note: The naming convention that you have been using is not necessarily the same one that Spinnaker uses, but accessing your applications through Spinnaker should allow you to configure it to your preferences.
Remember that Spinnaker considers an application to be anything you would put into a single code repository.&lt;/p>
&lt;h2 id="making-an-application">Making an application&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>Enter Applications from your Navigation bar.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click the “Create Application” button:&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-application/create-application.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>Fill out the pop-up form with desired user definitions.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-application/new-application-modal.png"/>
&lt;/figure>
&lt;ul>
&lt;li>The name of the application cannot have hyphens. Using a hyphen in the application name interferes with the naming convention. This applies to all types of applications except for those that use the Kubernetes V2 provider to deploy.&lt;/li>
&lt;li>When you create an application in Spinnaker, consider it to be anything you would put into a single code repository.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>After you fill out the form you should see this:&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-application/new-application.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>If you wish to modify the settings for the application, click “Config” for configurations.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>Note that by now you should have created an application, but as you have not created a pipeline and executed it, nothing should show up yet.&lt;/p>
&lt;h2 id="deleting-an-application">Deleting an application&lt;/h2>
&lt;p>Go to your application, click on “Config” and scroll all the way down. There will be a prompt to confirm if you would like to delete your application.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-application/delete-application.png"/>
&lt;/figure></description></item><item><title>Continuous-Deployment: Your First Pipeline in Spinnaker</title><link>/continuous-deployment/overview/your-first-pipeline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/your-first-pipeline/</guid><description>
&lt;h2 id="what-is-a-pipeline-in-spinnaker">What is a pipeline in Spinnaker?&lt;/h2>
&lt;p>The pipeline is the key deployment management construct in Spinnaker™. It consists of a sequence of actions, known as stages. You can pass parameters from stage to stage along the pipeline.&lt;/p>
&lt;p>You can start a pipeline manually, or you can configure it to be automatically triggered by an event, such as a Jenkins job completing, a new Docker image appearing in your registry, a CRON schedule, or a stage in another pipeline.&lt;/p>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;p>This page assumes your application stack includes:&lt;/p>
&lt;ul>
&lt;li>A Jenkins Master configured by your administrator&lt;/li>
&lt;li>A Jenkins job that archives a Debian package&lt;/li>
&lt;li>A security group within AWS with appropriate permissions&lt;/li>
&lt;li>A &lt;a href="/continuous-deployment/overview/load-balancers/">Load Balancer&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="how-to-create-a-pipeline">How to create a pipeline&lt;/h2>
&lt;p>This example creates a pipeline that takes the Debian package produced by a Jenkins job and uses it to create an &lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html">Amazon Machine Image (AMI)&lt;/a> before deploying that image to a server group.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>After selecting your Application, click the Pipelines category.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/empty-pipelines.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>On this page, click &lt;strong>Configure a new pipeline&lt;/strong>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Provide a name for your new pipeline and click &lt;strong>&lt;i class="fas fa-check-circle">&lt;/i>
Create&lt;/strong>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>On the Pipeline page you should see:&lt;/p>
&lt;ul>
&lt;li>A visual representation of your pipeline and its stages (you should only have configurations at the beginning)&lt;/li>
&lt;li>Execution Options&lt;/li>
&lt;li>Automated Triggers&lt;/li>
&lt;li>Parameters&lt;/li>
&lt;li>Notifications&lt;/li>
&lt;li>Description&lt;/li>
&lt;/ul>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/first-pipeline-view.png"/>
&lt;/figure>
&lt;/li>
&lt;/ol>
&lt;h3 id="add-a-trigger">Add a trigger&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>Define how your pipeline is triggered. Scroll down to the &lt;strong>Automated Triggers&lt;/strong> section and click &lt;strong>&lt;i class="fas fa-plus-circle">&lt;/i>
Add Trigger&lt;/strong>. This section enables you to select a &lt;strong>Type&lt;/strong>:&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/automated-trigger-types.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>For this example, select Jenkins. By adding a trigger, you are defining how your pipeline is initialized.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/jenkins-trigger.png"/>
&lt;/figure>
&lt;p>&lt;strong>Note:&lt;/strong> &lt;strong>Property File&lt;/strong> is an important topic that will be covered in a &lt;a href="/continuous-deployment/spinnaker-user-guides/working-with-jenkins/#property-file">separate guide&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Before you test your pipeline, you may want to consider enabling or disabling the trigger via the checkbox at the bottom.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h3 id="add-a-bake-stage">Add a Bake stage&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>Now add your first stage: Baking an AMI. Click the &lt;strong>&lt;i class="fas fa-plus-circle">&lt;/i>
Add stage&lt;/strong> button in the visual representations section:&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/pipeline-config-only.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>Select &lt;strong>Bake&lt;/strong> from the &lt;strong>Types&lt;/strong> drop down list.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/add-bake-stage.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>If you have multiple providers configured, select &lt;strong>Amazon&lt;/strong> from the &lt;strong>Provider&lt;/strong> drop down list. Next select the region or regions you want to bake in. In the &lt;strong>Package&lt;/strong> field, enter the name of the package that your Jenkins job archived.&lt;/p>
&lt;ul>
&lt;li>The package name should not include any version numbers. For example, if your build produces a deb file named “myapp_1.27-h343”, you would enter “myapp” here.&lt;/li>
&lt;li>If you configure your own Base AMI under the Advanced Options, the Base OS configuration is ignored.&lt;/li>
&lt;/ul>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/bake-ami-config.png"/>
&lt;/figure>
&lt;/li>
&lt;/ol>
&lt;h3 id="add-a-deploy-stage">Add a Deploy stage&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>Now add a Deploy stage by clicking &lt;strong>&lt;i class="fas fa-plus-circle">&lt;/i>
Add stage&lt;/strong> again. Select &lt;strong>Deploy&lt;/strong> In the &lt;strong>Type&lt;/strong> drop down list. Deploy’s configuration settings should pop up on the screen.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/add-deploy-stage.png"/>
&lt;/figure>
&lt;p>&lt;strong>Note:&lt;/strong> If you want to reorganize the order that the stages execute in the pipeline, you can add or remove precursor stages in the &lt;strong>Depends On&lt;/strong> field.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>In the &lt;strong>Deploy Configuration&lt;/strong> section, click on the “Add server group” button. Pick your provider, if more than one is configured. This example uses AWS.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Because this is a new application, do not choose to copy a configuration from a template. Press the &lt;strong>Continue without a template&lt;/strong> button.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/continue-without-template.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>It&amp;rsquo;s important to set up the correct Deploy Strategy for your use case. Use the Highlander strategy for this example, which will ensure that only one server group for your application exists at a time.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/deploy-strategy.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>In the &lt;strong>Load Balancers&lt;/strong> section, select the load balancer you created before you began this tutorial.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Select a security group that you are comfortable with, which will define the access rights to your resource.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Select Instance Type as Micro Utility, then set the size as “small”.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>For Capacity, select how many instances you want in your server group. For our example, we will set it at 1.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/deploy-capacity.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>Click “add”. You will be brought back to your Application and see a new Deploy Configuration. Press “Save Changes” at the bottom right of your window.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/new-deployment-overview.png"/>
&lt;/figure>
&lt;/li>
&lt;/ol>
&lt;h2 id="execute-the-pipeline">Execute the Pipeline&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>Click on the Pipelines option. You should see your new pipeline. Click on &lt;strong>&lt;i class="fas fa-play">&lt;/i>
Start Manual Execution&lt;/strong>.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/start-manual-execution.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>You will be able to select a Build for your Jenkins job from a drop down menu. By default, Spinnaker will not recreate an AMI unless the underlying package has changed. If you would like to force it, you may use the checkbox for “Rebake”.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/select-build.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>Press “Run”, and you should see a progress bar where blue represents running and green represents complete. Gray represents not ran or canceled, which is not in our example picture.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/job-in-progress.png"/>
&lt;/figure>
&lt;p>If your pipeline does not succeed, refer to one of the troubleshooting sections in the &lt;a href="/continuous-deployment/spinnaker-user-guides/spin-pipelines/#troubleshooting">pipelines&lt;/a>, &lt;a href="/continuous-deployment/spinnaker-user-guides/aws-guides/aws-baking-images/#troubleshooting">baking&lt;/a>, or &lt;a href="/continuous-deployment/spinnaker-user-guides/aws-guides/aws-deploy/#common-errors-and-troubleshooting">deploying&lt;/a> guides.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>Note: Always remember to save your changes by clicking the button in the bottom right of the window.&lt;/p>
&lt;/blockquote></description></item><item><title>Continuous-Deployment: Spinnaker Glossary</title><link>/continuous-deployment/overview/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/glossary/</guid><description>
&lt;h2 id="amazon-web-services">Amazon Web Services&lt;/h2>
&lt;p>Amazon Web Services (AWS) is a cloud services provider from Amazon that offers computing power, database storage, content delivery and additional functionalities to businesses that operate in the cloud. For Spinnaker purposes, think of AWS as a data center but instead of being physical servers it is in the cloud.&lt;/p>
&lt;h2 id="amazon-machine-images">Amazon Machine Images&lt;/h2>
&lt;p>Amazon Machine Images (AMIs) are predetermined &amp;rsquo;templates&amp;rsquo; for instances that can be used to launch an instance of a virtual server. They generally include the configurations for the instance (Operating System, application server, applications), the permissions and Secrets that control which AWS accounts can access the instances, and a block device mapping that specifies the volumes to attach to the instance when it is launched.&lt;/p>
&lt;h2 id="application">Application&lt;/h2>
&lt;p>An &lt;a href="/continuous-deployment/spinnaker-user-guides/application-screen/">application&lt;/a> inside Spinnaker™ represents what you would typically find in a single &lt;a href="#Code-Repository">code repository&lt;/a> - and in many cases, an application maps directly to a microservice.&lt;/p>
&lt;h2 id="auto-scaling-group">Auto-Scaling Group&lt;/h2>
&lt;p>An auto-scaling group (ASG) contains a collection of &lt;a href="#elastic_compute_cloud">EC2&lt;/a> instances that share similar characteristics and are treated as a logical grouping for the purposes of instance scaling and management.&lt;/p>
&lt;h2 id="authorization">Authorization&lt;/h2>
&lt;p>Authorization (Auth) is the level of access to APIs that a user, application or role has within your &lt;a href="#Amazon_Web_Services">AWS&lt;/a> account. This is usually configured by your administrator.&lt;/p>
&lt;h2 id="baking">Baking&lt;/h2>
&lt;p>The term &amp;lsquo;&lt;a href="/continuous-deployment/spinnaker-user-guides/aws-guides/aws-baking-images/">Baking&lt;/a>&amp;rsquo; is used within Spinnaker to refer to the process of creating machine images, usually with &lt;a href="#Amazon_Machine_Images">AMIs&lt;/a>.&lt;/p>
&lt;h2 id="cloud">Cloud&lt;/h2>
&lt;p>Short for cloud computing, the cloud as we refer to it is internet-based computing that provides processing resources (e.g.; database storage, networks, servers, applications) on demand to devices connected to the internet.&lt;/p>
&lt;h2 id="clouddriver">Clouddriver&lt;/h2>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h2 id="cluster">Cluster&lt;/h2>
&lt;p>A server group is a regional view of servers, whereas a cluster is a world-wide view of server groups.&lt;/p>
&lt;h2 id="code-repository">Code repository&lt;/h2>
&lt;p>A source code repository is a private or public storage location for file archive and web hosting, used for source codes of software or web pages.&lt;/p>
&lt;h2 id="continuous-delivery">Continuous Delivery&lt;/h2>
&lt;p>Continuous Delivery (CD) is an engineering approach for DevOps teams to produce software in short cycles: building, testing, and releasing software at a fast and frequent pace in order to iterate as quickly as possible.&lt;/p>
&lt;h2 id="continuous-integration">Continuous Integration&lt;/h2>
&lt;p>Continuous Integration (CI) is a development practice where software developers merge their separate changes and updates to a main source code repository - usually multiple times a day.&lt;/p>
&lt;h2 id="deck">Deck&lt;/h2>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h2 id="debian-package">Debian package&lt;/h2>
&lt;p>Debian packages (deb) are two tar archives contained in standard Unix ar archives - one holds the control information and the other contains the data used for installation.&lt;/p>
&lt;h2 id="detail">Detail&lt;/h2>
&lt;p>For cluster and server group configurations, &amp;lsquo;Detail&amp;rsquo; is usually any additional piece of user-defined information you want to label your cluster and server group(s) with.&lt;/p>
&lt;h2 id="echo">Echo&lt;/h2>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h2 id="elastic-compute-cloud">Elastic Compute Cloud&lt;/h2>
&lt;p>Elastic Compute Cloud (EC2) is part of the AWS cloud platform, a &amp;ldquo;pay as you go&amp;rdquo; virtual computer renting system that contains preconfigured software and applications requested by the user.&lt;/p>
&lt;h2 id="execution">Execution&lt;/h2>
&lt;p>When a pipeline runs, the end result is called an execution.&lt;/p>
&lt;h2 id="gate">Gate&lt;/h2>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h2 id="igor">Igor&lt;/h2>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h2 id="infrastructure-version">Infrastructure version&lt;/h2>
&lt;p>The infrastructure&amp;rsquo;s version number; such as v011, v012, etc. This is automatically appended and is not user defined.&lt;/p>
&lt;p>In AWS, Spinnaker will name your ASGs and Launch Configurations according to the naming convention mentioned above (ie. &amp;ldquo;armoryspinnaker-prod-polling-v015&amp;rdquo;).&lt;/p>
&lt;p>Please note that if your user definition includes a hyphen, it will disrupt the naming convention.&lt;/p>
&lt;h4 id="jenkins">Jenkins&lt;/h4>
&lt;p>&lt;a href="/continuous-deployment/spinnaker-user-guides/working-with-jenkins/">Jenkins&lt;/a> is an open source automation server that can package applications for distribution. Spinnaker pipelines can be [triggered]trigger) from a build on Jenkins.&lt;/p>
&lt;h4 id="load-balancer">Load balancer&lt;/h4>
&lt;p>For Spinnaker&amp;rsquo;s purposes, a &lt;a href="/continuous-deployment/overview/load-balancers/">load balancer&lt;/a> is a service that automatically distributes incoming traffic across all instances. The one most commonly used within AWS is the Elastic Load Balancer (ELB).&lt;/p>
&lt;h4 id="orca">Orca&lt;/h4>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h4 id="pipeline">Pipeline&lt;/h4>
&lt;p>A pipeline in Spinnaker is a series of stages linked together that can be executed serially or in parallel. All pipelines are defined in the context of an application. A typical pipeline will contain stages for &amp;ldquo;creating images&amp;rdquo;, &amp;ldquo;testing&amp;rdquo;, and &amp;ldquo;deploying&amp;rdquo;. The process of &amp;ldquo;creating images&amp;rdquo; is also commonly referred to as a &amp;ldquo;bake&amp;rdquo;.&lt;/p>
&lt;p>Learn to create &lt;a href="/continuous-deployment/overview/your-first-pipeline/">your first pipeline here&lt;/a>.&lt;/p>
&lt;h4 id="project">Project&lt;/h4>
&lt;p>A project inside Spinnaker is a logical grouping of applications. For example, we might create a project called &amp;ldquo;Spinnaker&amp;rdquo; and its applications would be &amp;ldquo;Deck&amp;rdquo;, &amp;ldquo;Orca&amp;rdquo;, &amp;ldquo;Clouddriver&amp;rdquo;, etc. Spinnaker provides a helpful dashboard view using Deck for each project to visualize its applications and status of each application contained within it.&lt;/p>
&lt;h4 id="rosco">Rosco&lt;/h4>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h4 id="scale-server-group">Scale server group&lt;/h4>
&lt;p>Reduce the total number of server groups remaining in the cluster.&lt;/p>
&lt;h4 id="server-group">Server group&lt;/h4>
&lt;p>From an Amazon Web Service (AWS) point of view, a server group is represented by an auto-scaling group (ASGs). All applications that are deployed by Spinnaker are deployed to server groups.&lt;/p>
&lt;h4 id="shrink-server-group">Shrink server group&lt;/h4>
&lt;p>Reduce the number of instances in a particular server group.&lt;/p>
&lt;h4 id="stack">Stack&lt;/h4>
&lt;p>You can think of a &amp;lsquo;Stack&amp;rsquo; as a tag you give to anything that you want to be integrated together. Environments are usually a good example of something you would tag with a Stack. If you have an app that has an ELB, a Cache, and an &lt;a href="#auto-scaling-group">ASG&lt;/a>, usually you would want to run integration tests on your staging environment separately from your production environment. In that case, you would give the staging ELB, Cache, and ASG all the &amp;ldquo;staging&amp;rdquo; stack, while prod ELB, Cache, and ASG would be the &amp;ldquo;prod&amp;rdquo; stack.&lt;/p>
&lt;p>Note that Stack names are defined by the user in the Spinnaker configuration User Interface (UI).&lt;/p>
&lt;h4 id="stage">Stage&lt;/h4>
&lt;p>Within a pipeline, the tasks that pipeline performs are called stages.&lt;/p>
&lt;h4 id="trigger">Trigger&lt;/h4>
&lt;p>A trigger is the entry point to a &lt;a href="#pipeline">pipeline&lt;/a> - when a pipeline is triggered, it attempts to &lt;a href="#execution">execute&lt;/a>.&lt;/p></description></item></channel></rss>