mirror of
https://github.com/helm/charts.git
synced 2026-08-23 22:37:45 +00:00
Spinnaker Chart (#377)
* Initial spinnaker * Jenkins patch * Fix jenkins job upload * Add run script * Fix mail * Simplify run-script * Spinnaker cleanup * Remove kube config from clouddriver * Make labels release specific * Delete upload-run-script job * Add requirements.lock * Update notes * Rename registry account * Pin image versions * Reference Spinnaker docs where possible * Fix build image job * Add more chart metadata * Pin hook job images * Add an app label to config maps * Rename .yml->.yaml * Add namespace to port-forward commands * Add note this can take a while to install
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
@@ -0,0 +1,11 @@
|
||||
apiVersion: v1
|
||||
description: A Helm chart for Kubernetes
|
||||
name: spinnaker
|
||||
version: 0.1.0
|
||||
home: http://spinnaker.io/
|
||||
sources:
|
||||
- https://github.com/spinnaker
|
||||
- https://github.com/viglesiasce/images
|
||||
maintainers:
|
||||
- name: Vic Iglesias
|
||||
email: viglesias@google.com
|
||||
@@ -0,0 +1,35 @@
|
||||
# Spinnaker Chart
|
||||
|
||||
[Spinnaker](http://spinnaker.io/) is a resilient service mesh for cloud native apps
|
||||
|
||||
## Chart Details
|
||||
This chart will provision a fully functional and fully featured Spinnaker installation
|
||||
that can deploy and manage applications in the cluster that it is deployed to.
|
||||
|
||||
Redis and Minio are used as the stores for Spinnaker state.
|
||||
|
||||
For more information on Spinnaker and its capabilities, see it's [documentation](http://www.spinnaker.io/docs).
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `my-release`:
|
||||
|
||||
```bash
|
||||
$ helm install --name my-release stable/spinnaker
|
||||
```
|
||||
|
||||
Note that this chart pulls in many different Docker images so can take a while to fully install.
|
||||
|
||||
## Configuration
|
||||
|
||||
Configurable values are documented in the `values.yaml`.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,
|
||||
|
||||
```bash
|
||||
$ helm install --name my-release -f values.yaml stable/spinnaker
|
||||
```
|
||||
|
||||
> **Tip**: You can use the default [values.yaml](values.yaml)
|
||||
@@ -0,0 +1,83 @@
|
||||
server:
|
||||
port: ${services.clouddriver.port:7002}
|
||||
address: ${services.clouddriver.host:localhost}
|
||||
|
||||
redis:
|
||||
connection: ${services.redis.connection:redis://localhost:6379}
|
||||
|
||||
udf:
|
||||
# Controls whether UserDataProviders are used to populate user data of new
|
||||
# server groups. If false, user data is copied over from ancestor server
|
||||
# groups on both CopyLastAsgAtomicOperation and
|
||||
# ModifyAsgLaunchConfigurationOperation (only if no user data is provided
|
||||
# on the given request).
|
||||
enabled: ${services.clouddriver.aws.udf.enabled:true}
|
||||
|
||||
default:
|
||||
account:
|
||||
env: ${providers.aws.primaryCredentials.name}
|
||||
|
||||
aws:
|
||||
# AWS Credentials are passed either as environment variables or through
|
||||
# a standard AWS file $HOME/.aws/credentials
|
||||
# See providers.aws.primaryCredentials in spinnaker.yml for more
|
||||
# info on setting environment variables.
|
||||
enabled: ${providers.aws.enabled:false}
|
||||
defaults:
|
||||
iamRole: ${provider.aws.defaultIAMRole:BaseIAMRole}
|
||||
defaultRegions:
|
||||
- name: ${providers.aws.defaultRegion:us-east-1}
|
||||
defaultFront50Template: ${services.front50.baseUrl}
|
||||
defaultKeyPairTemplate: ${providers.aws.defaultKeyPairTemplate}
|
||||
|
||||
azure:
|
||||
enabled: ${providers.azure.enabled:false}
|
||||
|
||||
accounts:
|
||||
- name: ${providers.azure.primaryCredentials.name}
|
||||
clientId: ${providers.azure.primaryCredentials.clientId}
|
||||
appKey: ${providers.azure.primaryCredentials.appKey}
|
||||
tenantId: ${providers.azure.primaryCredentials.tenantId}
|
||||
subscriptionId: ${providers.azure.primaryCredentials.subscriptionId}
|
||||
|
||||
google:
|
||||
enabled: ${providers.google.enabled:false}
|
||||
|
||||
accounts:
|
||||
- name: ${providers.google.primaryCredentials.name}
|
||||
project: ${providers.google.primaryCredentials.project}
|
||||
jsonPath: ${providers.google.primaryCredentials.jsonPath}
|
||||
|
||||
cf:
|
||||
enabled: ${providers.cf.enabled:false}
|
||||
|
||||
accounts:
|
||||
- name: ${providers.cf.primaryCredentials.name}
|
||||
api: ${providers.cf.primaryCredentials.api}
|
||||
console: ${providers.cf.primaryCredentials.console}
|
||||
org: ${providers.cf.defaultOrg}
|
||||
space: ${providers.cf.defaultSpace}
|
||||
username: ${providers.cf.account.name:}
|
||||
password: ${providers.cf.account.password:}
|
||||
|
||||
kubernetes:
|
||||
enabled: ${providers.kubernetes.enabled:false}
|
||||
accounts:
|
||||
- name: ${providers.kubernetes.primaryCredentials.name}
|
||||
serviceAccount: true
|
||||
dockerRegistries:
|
||||
- accountName: ${providers.kubernetes.primaryCredentials.dockerRegistryAccount}
|
||||
|
||||
dockerRegistry:
|
||||
enabled: ${providers.dockerRegistry.enabled:false}
|
||||
accounts:
|
||||
- name: ${providers.dockerRegistry.primaryCredentials.name}
|
||||
address: ${providers.dockerRegistry.primaryCredentials.address}
|
||||
username: ${providers.dockerRegistry.primaryCredentials.username:}
|
||||
passwordFile: ${providers.dockerRegistry.primaryCredentials.passwordFile:}
|
||||
repositories:
|
||||
- ${providers.dockerRegistry.primaryCredentials.repository}
|
||||
|
||||
credentials:
|
||||
primaryAccountTypes: ${providers.aws.primaryCredentials.name}, ${providers.google.primaryCredentials.name}, ${providers.cf.primaryCredentials.name}, ${providers.azure.primaryCredentials.name}
|
||||
challengeDestructiveActionsEnvironments: ${providers.aws.primaryCredentials.name}, ${providers.google.primaryCredentials.name}, ${providers.cf.primaryCredentials.name}, ${providers.azure.primaryCredentials.name}
|
||||
@@ -0,0 +1,62 @@
|
||||
server:
|
||||
port: ${services.echo.port:8089}
|
||||
address: 0.0.0.0
|
||||
|
||||
cassandra:
|
||||
enabled: false
|
||||
|
||||
spinnaker:
|
||||
inMemory:
|
||||
enabled: true
|
||||
cassandra:
|
||||
enabled: false
|
||||
|
||||
front50:
|
||||
baseUrl: ${services.front50.baseUrl:http://localhost:8080}
|
||||
|
||||
orca:
|
||||
baseUrl: ${services.orca.baseUrl:http://localhost:8083}
|
||||
|
||||
endpoints.health.sensitive: false
|
||||
|
||||
slack:
|
||||
enabled: ${services.echo.notifications.slack.enabled:false}
|
||||
token: ${services.echo.notifications.slack.token}
|
||||
|
||||
spring:
|
||||
mail:
|
||||
host: ${services.echo.notifications.mail.host}
|
||||
port: ${services.echo.notifications.mail.port}
|
||||
username: ${services.echo.notifications.mail.username}
|
||||
password: ${services.echo.notifications.mail.password}
|
||||
properties:
|
||||
mail:
|
||||
smtp:
|
||||
auth: ${services.echo.notifications.mail.auth:true}
|
||||
ssl:
|
||||
enable: ${services.echo.notifications.mail.ssl:true}
|
||||
|
||||
mail:
|
||||
enabled: ${services.echo.notifications.mail.enabled:false}
|
||||
host: ${services.echo.notifications.mail.host}
|
||||
from: ${services.echo.notifications.mail.fromAddress}
|
||||
|
||||
hipchat:
|
||||
enabled: ${services.echo.notifications.hipchat.enabled:false}
|
||||
baseUrl: ${services.echo.notifications.hipchat.url}
|
||||
token: ${services.echo.notifications.hipchat.token}
|
||||
|
||||
twilio:
|
||||
enabled: ${services.echo.notifications.sms.enabled:false}
|
||||
baseUrl: ${services.echo.notifications.sms.url:https://api.twilio.com/}
|
||||
account: ${services.echo.notifications.sms.account}
|
||||
token: ${services.echo.notifications.sms.token}
|
||||
from: ${services.echo.notifications.sms.from}
|
||||
|
||||
scheduler:
|
||||
enabled: ${services.echo.cron.enabled:true}
|
||||
threadPoolSize: 20
|
||||
triggeringEnabled: true
|
||||
pipelineConfigsPoller:
|
||||
enabled: true
|
||||
pollingIntervalMs: 30000
|
||||
@@ -0,0 +1,66 @@
|
||||
server:
|
||||
port: ${services.echo.port:8089}
|
||||
address: 0.0.0.0
|
||||
|
||||
cassandra:
|
||||
enabled: false
|
||||
embedded: true
|
||||
host: ${services.cassandra.host:localhost}
|
||||
|
||||
spinnaker:
|
||||
baseUrl: ${services.deck.baseUrl}
|
||||
cassandra:
|
||||
enabled: ${services.echo.cassandra.enabled:true}
|
||||
inMemory:
|
||||
enabled: ${services.echo.inMemory.enabled:false}
|
||||
|
||||
front50:
|
||||
baseUrl: ${services.front50.baseUrl:http://localhost:8080}
|
||||
|
||||
orca:
|
||||
baseUrl: ${services.orca.baseUrl:http://localhost:8083}
|
||||
|
||||
endpoints.health.sensitive: false
|
||||
|
||||
slack:
|
||||
enabled: ${services.echo.notifications.slack.enabled:false}
|
||||
token: ${services.echo.notifications.slack.token}
|
||||
|
||||
spring:
|
||||
mail:
|
||||
host: ${services.echo.notifications.mail.host}
|
||||
port: ${services.echo.notifications.mail.port}
|
||||
username: ${services.echo.notifications.mail.username}
|
||||
password: ${services.echo.notifications.mail.password}
|
||||
properties:
|
||||
mail:
|
||||
smtp:
|
||||
auth: ${services.echo.notifications.mail.auth:true}
|
||||
ssl:
|
||||
enable: ${services.echo.notifications.mail.ssl:true}
|
||||
mail:
|
||||
enabled: ${services.echo.notifications.mail.enabled:false}
|
||||
host: ${services.echo.notifications.mail.host}
|
||||
from: ${services.echo.notifications.mail.fromAddress}
|
||||
|
||||
hipchat:
|
||||
enabled: ${services.echo.notifications.hipchat.enabled:false}
|
||||
baseUrl: ${services.echo.notifications.hipchat.url}
|
||||
token: ${services.echo.notifications.hipchat.token}
|
||||
|
||||
twilio:
|
||||
enabled: ${services.echo.notifications.sms.enabled:false}
|
||||
baseUrl: ${services.echo.notifications.sms.url:https://api.twilio.com/}
|
||||
account: ${services.echo.notifications.sms.account}
|
||||
token: ${services.echo.notifications.sms.token}
|
||||
from: ${services.echo.notifications.sms.from}
|
||||
|
||||
scheduler:
|
||||
enabled: ${services.echo.cron.enabled:true}
|
||||
threadPoolSize: 20
|
||||
triggeringEnabled: true
|
||||
pipelineConfigsPoller:
|
||||
enabled: true
|
||||
pollingIntervalMs: 30000
|
||||
cron:
|
||||
timezone: ${services.echo.cron.timezone}
|
||||
@@ -0,0 +1,10 @@
|
||||
server:
|
||||
port: ${services.fiat.port:7003}
|
||||
address: 0.0.0.0
|
||||
|
||||
redis:
|
||||
connection: ${services.redis.connection:redis://localhost:6379}
|
||||
|
||||
auth:
|
||||
getAll:
|
||||
enabled: false
|
||||
@@ -0,0 +1,27 @@
|
||||
server:
|
||||
port: ${services.front50.port:8080}
|
||||
address: 0.0.0.0
|
||||
|
||||
aws:
|
||||
simpleDBEnabled: ${providers.aws.simpleDBEnabled:false}
|
||||
defaultSimpleDBDomain: ${providers.aws.defaultSimpleDBDomain}
|
||||
|
||||
cassandra:
|
||||
enabled: false
|
||||
|
||||
spinnaker:
|
||||
cassandra:
|
||||
enabled: false
|
||||
redis:
|
||||
enabled: false
|
||||
gcs:
|
||||
enabled: ${services.front50.gcs.enabled}
|
||||
project: ${services.front50.gcs.project}
|
||||
jsonPath: /root/.kube/account.json # Don't change this
|
||||
rootFolder: ${services.front50.bucket_root}
|
||||
bucket: ${services.front50.storage_bucket}
|
||||
s3:
|
||||
enabled: ${services.front50.s3.enabled}
|
||||
rootFolder: ${services.front50.bucket_root}
|
||||
bucket: ${services.front50.storage_bucket}
|
||||
endpoint: ${services.front50.s3.endpoint}
|
||||
@@ -0,0 +1,39 @@
|
||||
server:
|
||||
port: ${services.front50.port:8080}
|
||||
address: ${services.front50.host:localhost}
|
||||
|
||||
cassandra:
|
||||
enabled: ${services.front50.cassandra.enabled:true}
|
||||
embedded: ${services.cassandra.embedded:false}
|
||||
host: ${services.cassandra.host:localhost}
|
||||
|
||||
aws:
|
||||
simpleDBEnabled: ${providers.aws.simpleDBEnabled:false}
|
||||
defaultSimpleDBDomain: ${providers.aws.defaultSimpleDBDomain}
|
||||
|
||||
spinnaker:
|
||||
cassandra:
|
||||
enabled: ${services.front50.cassandra.enabled:true}
|
||||
host: ${services.cassandra.host:localhost}
|
||||
port: ${services.cassandra.port:9042}
|
||||
cluster: ${services.cassandra.cluster:CASS_SPINNAKER}
|
||||
keyspace: front50
|
||||
name: global
|
||||
|
||||
redis:
|
||||
enabled: ${services.front50.redis.enabled:false}
|
||||
|
||||
gcs:
|
||||
enabled: ${services.front50.gcs.enabled:false}
|
||||
bucket: ${services.front50.storage_bucket:}
|
||||
# See https://cloud.google.com/storage/docs/managing-buckets#manage-class-location
|
||||
bucketLocation: ${services.front50.bucket_location:}
|
||||
rootFolder: ${services.front50.bucket_root:front50}
|
||||
project: ${providers.google.primaryCredentials.project}
|
||||
jsonPath: ${providers.google.primaryCredentials.jsonPath}
|
||||
|
||||
aws:
|
||||
enabled: ${services.front50.s3.enabled:false}
|
||||
bucket: ${services.front50.storage_bucket:}
|
||||
rootFolder: ${services.front50.bucket_root:front50}
|
||||
endpoint: ${services.front50.s3.endpoint:}
|
||||
@@ -0,0 +1,25 @@
|
||||
server:
|
||||
port: ${services.gate.port:8084}
|
||||
address: 0.0.0.0
|
||||
|
||||
# Circular references since we're already using 'services'
|
||||
# services:
|
||||
# clouddriver:
|
||||
# baseUrl: ${services.clouddriver.baseUrl:localhost:7002}
|
||||
# orca:
|
||||
# baseUrl: ${services.orca.baseUrl:localhost:8083}
|
||||
# front50:
|
||||
# baseUrl: ${services.front50.baseUrl:localhost:8080}
|
||||
# #optional services:
|
||||
# echo:
|
||||
# enabled: ${services.echo.enabled:true}
|
||||
# baseUrl: ${services.echo.baseUrl:8089}
|
||||
# flapjack:
|
||||
# enabled: ${services.flapjack.enabled:false}
|
||||
# igor:
|
||||
# enabled: ${services.igor.enabled:false}
|
||||
# baseUrl: ${services.igor.baseUrl:8088}
|
||||
|
||||
redis:
|
||||
connection: ${services.redis.connection}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
server:
|
||||
port: ${services.gate.port:8084}
|
||||
address: 0.0.0.0
|
||||
|
||||
# Circular references since we're already using 'services'
|
||||
# services:
|
||||
# clouddriver:
|
||||
# baseUrl: ${services.clouddriver.baseUrl:localhost:7002}
|
||||
# orca:
|
||||
# baseUrl: ${services.orca.baseUrl:localhost:8083}
|
||||
# front50:
|
||||
# baseUrl: ${services.front50.baseUrl:localhost:8080}
|
||||
# #optional services:
|
||||
# echo:
|
||||
# enabled: ${services.echo.enabled:true}
|
||||
# baseUrl: ${services.echo.baseUrl:8089}
|
||||
# flapjack:
|
||||
# enabled: ${services.flapjack.enabled:false}
|
||||
# igor:
|
||||
# enabled: ${services.igor.enabled:false}
|
||||
# baseUrl: ${services.igor.baseUrl:8088}
|
||||
|
||||
redis:
|
||||
connection: ${services.redis.connection}
|
||||
@@ -0,0 +1,25 @@
|
||||
server:
|
||||
port: ${services.igor.port:8088}
|
||||
address: 0.0.0.0
|
||||
|
||||
jenkins:
|
||||
enabled: ${services.jenkins.enabled:false}
|
||||
masters:
|
||||
- name: default
|
||||
address: ${services.jenkins.defaultMaster.baseUrl}
|
||||
username: ${services.jenkins.defaultMaster.username}
|
||||
password: ${services.jenkins.defaultMaster.password}
|
||||
|
||||
dockerRegistry:
|
||||
enabled: true
|
||||
|
||||
redis:
|
||||
connection: ${services.redis.connection:redis://localhost:6379}
|
||||
|
||||
# Igor depends on Clouddriver and Echo. These are normally configured
|
||||
# in spinnaker[-local].yml (if present), otherwise, uncomment this.
|
||||
# services:
|
||||
# clouddriver:
|
||||
# baseUrl: ${services.clouddriver.baseUrl}
|
||||
# echo:
|
||||
# baseUrl: ${services.echo.baseUrl}
|
||||
@@ -0,0 +1,33 @@
|
||||
server:
|
||||
port: ${services.igor.port:8088}
|
||||
address: 0.0.0.0
|
||||
|
||||
jenkins:
|
||||
enabled: ${services.jenkins.enabled:false}
|
||||
masters:
|
||||
- name: default
|
||||
address: ${services.jenkins.defaultMaster.baseUrl}
|
||||
username: ${services.jenkins.defaultMaster.username}
|
||||
password: ${services.jenkins.defaultMaster.password}
|
||||
|
||||
travis:
|
||||
enabled: ${services.travis.enabled:false}
|
||||
masters:
|
||||
- name: ${services.travis.defaultMaster.name}
|
||||
baseUrl: ${services.travis.defaultMaster.baseUrl}
|
||||
address: ${services.travis.defaultMaster.address}
|
||||
githubToken: ${services.travis.defaultMaster.githubToken}
|
||||
|
||||
dockerRegistry:
|
||||
enabled: true
|
||||
|
||||
redis:
|
||||
connection: ${services.redis.connection:redis://localhost:6379}
|
||||
|
||||
# Igor depends on Clouddriver and Echo. These are normally configured
|
||||
# in spinnaker[-local].yml (if present), otherwise, uncomment this.
|
||||
# services:
|
||||
# clouddriver:
|
||||
# baseUrl: ${services.clouddriver.baseUrl}
|
||||
# echo:
|
||||
# baseUrl: ${services.echo.baseUrl}
|
||||
@@ -0,0 +1,39 @@
|
||||
server:
|
||||
port: ${services.orca.port:8083}
|
||||
address: 0.0.0.0
|
||||
|
||||
oort:
|
||||
baseUrl: ${services.oort.baseUrl:localhost:7002}
|
||||
front50:
|
||||
baseUrl: ${services.front50.baseUrl:localhost:8080}
|
||||
mort:
|
||||
baseUrl: ${services.mort.baseUrl:localhost:7002}
|
||||
kato:
|
||||
baseUrl: ${services.kato.baseUrl:localhost:7002}
|
||||
bakery:
|
||||
baseUrl: ${services.bakery.baseUrl:localhost:8087}
|
||||
extractBuildDetails: ${services.bakery.extractBuildDetails:true}
|
||||
echo:
|
||||
enabled: ${services.echo.enabled:false}
|
||||
baseUrl: ${services.echo.baseUrl:8089}
|
||||
|
||||
igor:
|
||||
baseUrl: ${services.igor.baseUrl:8088}
|
||||
|
||||
# TODO(duftler): Remove this once flex is conditionally-enabled in orca.
|
||||
flex:
|
||||
baseUrl: http://not-a-host
|
||||
|
||||
default:
|
||||
bake:
|
||||
account: ${providers.aws.primaryCredentials.name}
|
||||
securityGroups:
|
||||
vpc:
|
||||
securityGroups:
|
||||
|
||||
redis:
|
||||
connection: ${services.redis.connection}
|
||||
|
||||
script:
|
||||
master: default # name of Jenkins master in Spinnaker
|
||||
job: run-script # from Jenkins job configuration
|
||||
@@ -0,0 +1,45 @@
|
||||
server:
|
||||
port: ${services.orca.port:8083}
|
||||
address: 0.0.0.0
|
||||
|
||||
oort:
|
||||
baseUrl: ${services.oort.baseUrl:localhost:7002}
|
||||
front50:
|
||||
baseUrl: ${services.front50.baseUrl:localhost:8080}
|
||||
mort:
|
||||
baseUrl: ${services.mort.baseUrl:localhost:7002}
|
||||
kato:
|
||||
baseUrl: ${services.kato.baseUrl:localhost:7002}
|
||||
bakery:
|
||||
baseUrl: ${services.bakery.baseUrl:localhost:8087}
|
||||
extractBuildDetails: ${services.bakery.extractBuildDetails:true}
|
||||
propagateCloudProviderType: ${services.bakery.propagateCloudProviderType:true}
|
||||
allowMissingPackageInstallation: ${services.bakery.allowMissingPackageInstallation:false}
|
||||
echo:
|
||||
enabled: ${services.echo.enabled:false}
|
||||
baseUrl: ${services.echo.baseUrl:8089}
|
||||
|
||||
igor:
|
||||
baseUrl: ${services.igor.baseUrl:8088}
|
||||
|
||||
# TODO(duftler): Remove this once flex is conditionally-enabled in orca.
|
||||
flex:
|
||||
baseUrl: http://not-a-host
|
||||
|
||||
default:
|
||||
bake:
|
||||
account: local
|
||||
securityGroups:
|
||||
vpc:
|
||||
securityGroups:
|
||||
|
||||
redis:
|
||||
connection: ${services.redis.connection}
|
||||
|
||||
tasks:
|
||||
executionWindow:
|
||||
timezone: ${services.orca.timezone}
|
||||
|
||||
script:
|
||||
master: default # name of Jenkins master in Spinnaker
|
||||
job: run-script # from Jenkins job configuration
|
||||
@@ -0,0 +1,27 @@
|
||||
server:
|
||||
port: ${services.rosco.port:8087}
|
||||
address: 0.0.0.0
|
||||
|
||||
redis:
|
||||
connection: ${services.redis.connection:redis://localhost:6379}
|
||||
|
||||
aws:
|
||||
enabled: ${providers.aws.enabled:false}
|
||||
|
||||
docker:
|
||||
enabled: ${services.docker.enabled:false}
|
||||
bakeryDefaults:
|
||||
targetRepository: ${services.docker.targetRepository}
|
||||
|
||||
google:
|
||||
enabled: ${providers.google.enabled:false}
|
||||
accounts:
|
||||
- name: ${providers.google.primaryCredentials.name}
|
||||
project: ${providers.google.primaryCredentials.project}
|
||||
jsonPath: ${providers.google.primaryCredentials.jsonPath}
|
||||
gce:
|
||||
bakeryDefaults:
|
||||
zone: ${providers.google.defaultZone}
|
||||
|
||||
rosco:
|
||||
configDir: ${services.rosco.configDir}
|
||||
@@ -0,0 +1,27 @@
|
||||
server:
|
||||
port: ${services.rosco.port:8087}
|
||||
address: 0.0.0.0
|
||||
|
||||
redis:
|
||||
connection: ${services.redis.connection:redis://localhost:6379}
|
||||
|
||||
aws:
|
||||
enabled: ${providers.aws.enabled:false}
|
||||
|
||||
docker:
|
||||
enabled: ${services.docker.enabled:false}
|
||||
bakeryDefaults:
|
||||
targetRepository: ${services.docker.targetRepository}
|
||||
|
||||
google:
|
||||
enabled: ${providers.google.enabled:false}
|
||||
accounts:
|
||||
- name: ${providers.google.primaryCredentials.name}
|
||||
project: ${providers.google.primaryCredentials.project}
|
||||
jsonPath: ${providers.google.primaryCredentials.jsonPath}
|
||||
gce:
|
||||
bakeryDefaults:
|
||||
zone: ${providers.google.defaultZone}
|
||||
|
||||
rosco:
|
||||
configDir: ${services.rosco.configDir}
|
||||
@@ -0,0 +1,53 @@
|
||||
'use strict';
|
||||
|
||||
var feedbackUrl = 'http://localhost';
|
||||
var gateHost = 'http://localhost:8084';
|
||||
var bakeryDetailUrl = 'http://localhost:8087';
|
||||
|
||||
window.spinnakerSettings = {
|
||||
defaultProviders: ['kubernetes'],
|
||||
feedbackUrl: feedbackUrl,
|
||||
gateUrl: gateHost,
|
||||
bakeryDetailUrl: bakeryDetailUrl,
|
||||
pollSchedule: 30000,
|
||||
defaultTimeZone: 'America/Los_Angeles', // see http://momentjs.com/timezone/docs/#/data-utilities/
|
||||
providers: {
|
||||
kubernetes: {
|
||||
defaults: {
|
||||
account: 'local',
|
||||
namespace: 'default'
|
||||
},
|
||||
}
|
||||
},
|
||||
notifications: {
|
||||
email: {
|
||||
enabled: true,
|
||||
},
|
||||
hipchat: {
|
||||
enabled: false,
|
||||
botName: 'Skynet T-800'
|
||||
},
|
||||
sms: {
|
||||
enabled: false,
|
||||
},
|
||||
slack: {
|
||||
enabled: false,
|
||||
botName: 'spinnakerbot'
|
||||
}
|
||||
},
|
||||
whatsNew: {
|
||||
gistId: '32526cd608db3d811b38',
|
||||
fileName: 'news.md',
|
||||
},
|
||||
feature: {
|
||||
pipelines: true,
|
||||
jobs: true,
|
||||
notifications: true,
|
||||
fastProperty: false,
|
||||
vpcMigrator: false,
|
||||
clusterDiff: false,
|
||||
roscoMode: false,
|
||||
netflixMode: false,
|
||||
infrastructureStages: true, // Should 'createLoadBalancer' be a pipeline stage? (no).
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,294 @@
|
||||
|
||||
# This file is intended to serve as a master configuration for a Spinnaker
|
||||
# deployment. Customizations to the deployment should be made in another file
|
||||
# named "spinnaker-local.yml". The distribution has a prototype called
|
||||
# "default-spinnaker-local.yml" which calls out the subset of attributes of
|
||||
# general interest. It can be copied into a "spinnaker-local.yml" to start
|
||||
# with. The prototype does not change any of the default values here, it just
|
||||
# surfaces the more critical attributes.
|
||||
|
||||
global:
|
||||
spinnaker:
|
||||
environment: test
|
||||
timezone: 'America/Los_Angeles'
|
||||
|
||||
services:
|
||||
default:
|
||||
# These defaults can be modified to change all the spinnaker subsystems
|
||||
# (clouddriver, gate, etc) at once, but not external systems (jenkins, etc).
|
||||
# Individual systems can still be overridden using their own section entry
|
||||
# directly under 'services'.
|
||||
host: localhost
|
||||
protocol: http
|
||||
|
||||
clouddriver:
|
||||
host: ${services.default.host}
|
||||
port: 7002
|
||||
baseUrl: ${services.default.protocol}://${services.clouddriver.host}:${services.clouddriver.port}
|
||||
aws:
|
||||
udf:
|
||||
# Controls whether UserDataProviders are used to populate user data of
|
||||
# new server groups. If false, user data is copied over from ancestor
|
||||
# server groups on both CopyLastAsgAtomicOperation and
|
||||
# ModifyAsgLaunchConfigurationOperation (only if no user data is
|
||||
# provided on the given request).
|
||||
enabled: true
|
||||
|
||||
echo:
|
||||
enabled: true
|
||||
host: ${services.default.host}
|
||||
port: 8089
|
||||
baseUrl: ${services.default.protocol}://${services.echo.host}:${services.echo.port}
|
||||
|
||||
cron:
|
||||
# Allow pipeline triggers to run periodically via cron expressions.
|
||||
enabled: true
|
||||
timezone: ${global.spinnaker.timezone}
|
||||
|
||||
notifications:
|
||||
# The following blocks can enable Spinnaker to send notifications
|
||||
# using the corresponding mechanism.
|
||||
# See http://www.spinnaker.io/docs/notifications-and-events-guide
|
||||
# for more information.
|
||||
mail:
|
||||
enabled: ${services.echo.notifications.mail.enabled:false}
|
||||
host: ${services.echo.notifications.mail.host}
|
||||
from: ${services.echo.notifications.mail.fromAddress}
|
||||
username: ${services.echo.notifications.mail.username}
|
||||
password: ${services.echo.notifications.mail.password}
|
||||
port: ${services.echo.notifications.mail.port}
|
||||
hipchat:
|
||||
enabled: false
|
||||
url: # the hipchat server to connect to
|
||||
token: # the hipchat auth token
|
||||
botName: # the username of the bot
|
||||
sms:
|
||||
enabled: false
|
||||
account: # twilio account id
|
||||
token: # twilio auth token
|
||||
from: # phone number by which sms messages are sent
|
||||
slack:
|
||||
enabled: false
|
||||
token: # the API token for the bot
|
||||
botName: # the username of the bot
|
||||
|
||||
deck:
|
||||
host: ${services.default.host}
|
||||
port: 9000
|
||||
baseUrl: ${services.default.protocol}://${services.deck.host}:${services.deck.port}
|
||||
gateUrl: ${services.gate.baseUrl}
|
||||
bakeryUrl: ${services.bakery.baseUrl}
|
||||
timezone: ${global.spinnaker.timezone}
|
||||
auth:
|
||||
enabled: false
|
||||
|
||||
fiat:
|
||||
enabled: false
|
||||
host: ${services.default.host}
|
||||
port: 7003
|
||||
baseUrl: ${services.default.protocol}://${services.fiat.host}:${services.fiat.port}
|
||||
|
||||
front50:
|
||||
host: ${services.default.host}
|
||||
port: 8080
|
||||
baseUrl: ${services.default.protocol}://${services.front50.host}:${services.front50.port}
|
||||
|
||||
# If using storage bucket persistence (gcs or s3), specify the bucket here
|
||||
# disable cassandra and enable the storage service below.
|
||||
storage_bucket: ${services.front50.storage_bucket}
|
||||
# (GCS Only) Location for bucket.
|
||||
bucket_location:
|
||||
bucket_root: front50
|
||||
|
||||
cassandra:
|
||||
enabled: false
|
||||
redis:
|
||||
enabled: false
|
||||
gcs:
|
||||
enabled: ${services.front50.gcs.enabled} # Enable me
|
||||
project: ${services.front50.gcs.project}
|
||||
s3:
|
||||
enabled: ${services.front50.s3.enabled} # Or me
|
||||
endpoint: ${services.front50.s3.endpoint}
|
||||
|
||||
gate:
|
||||
host: ${services.default.host}
|
||||
port: 8084
|
||||
baseUrl: ${services.default.protocol}://${services.gate.host}:${services.gate.port}
|
||||
|
||||
igor:
|
||||
# If you are integrating Jenkins then you must also enable Spinnaker's
|
||||
# "igor" subsystem.
|
||||
enabled: false
|
||||
host: ${services.default.host}
|
||||
port: 8088
|
||||
baseUrl: ${services.default.protocol}://${services.igor.host}:${services.igor.port}
|
||||
|
||||
kato:
|
||||
host: ${services.clouddriver.host}
|
||||
port: ${services.clouddriver.port}
|
||||
baseUrl: ${services.clouddriver.baseUrl}
|
||||
|
||||
mort:
|
||||
host: ${services.clouddriver.host}
|
||||
port: ${services.clouddriver.port}
|
||||
baseUrl: ${services.clouddriver.baseUrl}
|
||||
|
||||
orca:
|
||||
host: ${services.default.host}
|
||||
port: 8083
|
||||
baseUrl: ${services.default.protocol}://${services.orca.host}:${services.orca.port}
|
||||
timezone: ${global.spinnaker.timezone}
|
||||
enabled: true
|
||||
|
||||
oort:
|
||||
host: ${services.clouddriver.host}
|
||||
port: ${services.clouddriver.port}
|
||||
baseUrl: ${services.clouddriver.baseUrl}
|
||||
|
||||
rosco:
|
||||
host: ${services.default.host}
|
||||
port: 8087
|
||||
baseUrl: ${services.default.protocol}://${services.rosco.host}:${services.rosco.port}
|
||||
# You need to provide the fully-qualified path to the directory containing the packer templates.
|
||||
# They typically live in rosco's config/packer directory.
|
||||
configDir: /opt/rosco/config/packer
|
||||
|
||||
bakery:
|
||||
host: ${services.rosco.host}
|
||||
port: ${services.rosco.port}
|
||||
baseUrl: ${services.rosco.baseUrl}
|
||||
extractBuildDetails: true
|
||||
propagateCloudProviderType: true
|
||||
allowMissingPackageInstallation: false
|
||||
|
||||
docker:
|
||||
# This target repository is used by the bakery to publish baked docker images.
|
||||
# Do not include http://.
|
||||
enabled: ${services.docker.enabled:false}
|
||||
targetRepository: ${services.docker.targetRepository}
|
||||
|
||||
jenkins:
|
||||
# The "name" entry is used for the display name when selecting
|
||||
# this server. You must set `enabled` to true when enabling igor.
|
||||
#
|
||||
# If you have multiple jenkins servers, you will need to list
|
||||
# them in an igor-local.yml. See jenkins.masters in config/igor.yml.
|
||||
#
|
||||
# Note that jenkins is not installed with Spinnaker so you must obtain this
|
||||
# on your own if you are interested.
|
||||
enabled: ${services.igor.enabled:false}
|
||||
defaultMaster:
|
||||
name: Jenkins
|
||||
baseUrl: # Expected in spinnaker-local.yml
|
||||
username: # Expected in spinnaker-local.yml
|
||||
password: # Expected in spinnaker-local.yml
|
||||
|
||||
redis:
|
||||
host: ${services.default.host}
|
||||
port: 6379
|
||||
connection: redis://${services.redis.host}:${services.redis.port}
|
||||
|
||||
cassandra:
|
||||
# cassandra.enabled is no longer used
|
||||
# cassandra is enabled or disabled on a per-service basis
|
||||
# where the alternative persistence mechanism for that service
|
||||
# can be enabled.
|
||||
host: ${services.cassandra.host}
|
||||
port: ${services.cassandra.port}
|
||||
embedded: ${services.cassandra.embedded}
|
||||
cluster: ${services.cassandra.cluster}
|
||||
|
||||
providers:
|
||||
aws:
|
||||
# For more information on configuring Amazon Web Services (aws), see
|
||||
# http://www.spinnaker.io/v1.0/docs/target-deployment-setup#section-amazon-web-services-setup
|
||||
|
||||
enabled: false
|
||||
simpleDBEnabled: false
|
||||
defaultRegion: us-east-1
|
||||
defaultSimpleDBDomain: CLOUD_APPLICATIONS
|
||||
primaryCredentials:
|
||||
name: default
|
||||
# The actual credentials are set using a standard AWS client library mechanism
|
||||
# http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/credentials.html
|
||||
# Typically this is a $HOME/.aws/credentials file (remember, a standard
|
||||
# spinnaker installation runs as user "spinnaker" whose $HOME is
|
||||
# /home/spinnaker). The primaryCredentials.name will identify which profile
|
||||
# to use (for .aws/credentials).
|
||||
|
||||
# {{name}} will be interpolated with the aws account name (e.g. "my-aws-account-keypair").
|
||||
defaultKeyPairTemplate: "{{name}}-keypair"
|
||||
|
||||
google:
|
||||
# For more information on configuring Google Cloud Platform (google), see
|
||||
# http://www.spinnaker.io/v1.0/docs/target-deployment-setup#section-google-cloud-platform-setup
|
||||
|
||||
enabled: false
|
||||
defaultRegion: us-central1
|
||||
defaultZone: us-central1-f
|
||||
primaryCredentials:
|
||||
name: my-account-name
|
||||
# The project is the Google Project ID for the project to manage with
|
||||
# Spinnaker. The jsonPath is a path to the JSON service credentials
|
||||
# downloaded from the Google Developer's Console.
|
||||
project:
|
||||
jsonPath:
|
||||
|
||||
cf:
|
||||
# For more information on configuring Cloud Foundry (cf) support, see
|
||||
# http://www.spinnaker.io/v1.0/docs/target-deployment-setup#section-cloud-foundry-platform-setup
|
||||
|
||||
enabled: false
|
||||
defaultOrg: spinnaker-cf-org
|
||||
defaultSpace: spinnaker-cf-space
|
||||
primaryCredentials:
|
||||
name: my-cf-account
|
||||
api: my-cf-api-uri
|
||||
console: my-cf-console-base-url
|
||||
# You must also supply cf.account.username and cf.account.password through env properties
|
||||
|
||||
azure:
|
||||
# For more information on configuring Microsoft Azure (azure), see
|
||||
# http://www.spinnaker.io/v1.0/docs/target-deployment-setup#section-azure-cloud-platform-setup
|
||||
|
||||
enabled: false
|
||||
defaultRegion: westus
|
||||
primaryCredentials:
|
||||
name: my-azure-account
|
||||
|
||||
# To set Azure credentials, enter your Azure supscription values for:
|
||||
# clientId, appKey, tenantId, and subscriptionId.
|
||||
clientId:
|
||||
appKey:
|
||||
tenantId:
|
||||
subscriptionId:
|
||||
|
||||
titan:
|
||||
# If you want to deploy some services to titan,
|
||||
# set enabled and provide primary credentials for deploying.
|
||||
# Enabling titan is independent of other providers.
|
||||
enabled: false
|
||||
defaultRegion: us-east-1
|
||||
primaryCredentials:
|
||||
name: my-titan-account
|
||||
|
||||
kubernetes:
|
||||
# For more information on configuring Kubernetes clusters (kubernetes), see
|
||||
# http://www.spinnaker.io/v1.0/docs/target-deployment-setup#section-kubernetes-cluster-setup
|
||||
|
||||
# NOTE: enabling kubernetes also requires enabling dockerRegistry.
|
||||
enabled: ${providers.kubernetes.enabled}
|
||||
primaryCredentials:
|
||||
name: ${providers.kubernetes.primaryCredentials.name}
|
||||
namespace: ${providers.kubernetes.primaryCredentials.namespace}
|
||||
dockerRegistryAccount: ${providers.dockerRegistry.primaryCredentials.name}
|
||||
|
||||
dockerRegistry:
|
||||
# If you want to use a container based provider, you need to configure and
|
||||
# enable this provider to cache images.
|
||||
enabled: ${providers.dockerRegistry.enabled}
|
||||
primaryCredentials:
|
||||
name: ${providers.dockerRegistry.primaryCredentials.name}
|
||||
address: ${providers.dockerRegistry.primaryCredentials.address}
|
||||
repository: ${providers.dockerRegistry.primaryCredentials.repository}
|
||||
@@ -0,0 +1,9 @@
|
||||
dependencies:
|
||||
- name: redis
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
version: 0.4.2
|
||||
- name: minio
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
version: 0.0.1
|
||||
digest: sha256:c80d5e19cfba940133477743a3f5416a526b5942c7689f0589257be042ef0924
|
||||
generated: 2017-01-06T11:22:49.384880181-08:00
|
||||
@@ -0,0 +1,7 @@
|
||||
dependencies:
|
||||
- name: redis
|
||||
version: 0.4.2
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
- name: minio
|
||||
version: 0.0.1
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
@@ -0,0 +1,10 @@
|
||||
1. You will need to create 2 port forwarding tunnels in order to access the Spinnaker UI:
|
||||
export GATE_POD=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "component=gate,app={{ template "fullname" . }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
export DECK_POD=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "component=deck,app={{ template "fullname" . }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
kubectl port-forward --namespace {{ .Release.Namespace }} $GATE_POD 8084 &
|
||||
kubectl port-forward --namespace {{ .Release.Namespace }} $DECK_POD 9000 &
|
||||
|
||||
2. Visit the Spinnaker UI by opening your browser to: http://127.0.0.1:9000
|
||||
|
||||
For more info on the Kubernetes integration for Spinnaker, visit:
|
||||
http://www.spinnaker.io/docs/kubernetes-source-to-prod
|
||||
@@ -0,0 +1,16 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 24 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
We truncate at 24 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
*/}}
|
||||
{{- define "fullname" -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 24 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,87 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-jenkins-config
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
data:
|
||||
config.xml: |-
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<hudson>
|
||||
<disabledAdministrativeMonitors/>
|
||||
<version>2.7.3</version>
|
||||
<numExecutors>0</numExecutors>
|
||||
<mode>NORMAL</mode>
|
||||
<useSecurity>false</useSecurity>
|
||||
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
|
||||
<denyAnonymousReadAccess>false</denyAnonymousReadAccess>
|
||||
</authorizationStrategy>
|
||||
<disableRememberMe>false</disableRememberMe>
|
||||
<projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/>
|
||||
<workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULLNAME}</workspaceDir>
|
||||
<buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
|
||||
<markupFormatter class="hudson.markup.EscapedMarkupFormatter"/>
|
||||
<jdks/>
|
||||
<viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
|
||||
<myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/>
|
||||
<clouds>
|
||||
<org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud plugin="kubernetes@0.8">
|
||||
<name>default</name>
|
||||
<templates>
|
||||
<org.csanchez.jenkins.plugins.kubernetes.PodTemplate>
|
||||
<name>jnlp</name>
|
||||
<image>{{ .Values.jenkins.Agent.Image }}:{{ .Values.jenkins.Agent.ImageTag }}</image>
|
||||
<privileged>false</privileged>
|
||||
<alwaysPullImage>false</alwaysPullImage>
|
||||
<command></command>
|
||||
<args></args>
|
||||
<remoteFs>/home/jenkins</remoteFs>
|
||||
<instanceCap>2147483647</instanceCap>
|
||||
<label></label>
|
||||
<nodeSelector></nodeSelector>
|
||||
<resourceRequestCpu>{{.Values.jenkins.Agent.Cpu}}</resourceRequestCpu>
|
||||
<resourceRequestMemory>{{.Values.jenkins.Agent.Memory}}</resourceRequestMemory>
|
||||
<resourceLimitCpu>{{.Values.jenkins.Agent.Cpu}}</resourceLimitCpu>
|
||||
<resourceLimitMemory>{{.Values.jenkins.Agent.Memory}}</resourceLimitMemory>
|
||||
<volumes>
|
||||
<org.csanchez.jenkins.plugins.kubernetes.PodVolumes_-HostPathVolume>
|
||||
<mountPath>/usr/bin/docker</mountPath>
|
||||
<hostPath>/usr/bin/docker</hostPath>
|
||||
</org.csanchez.jenkins.plugins.kubernetes.PodVolumes_-HostPathVolume>
|
||||
<org.csanchez.jenkins.plugins.kubernetes.PodVolumes_-HostPathVolume>
|
||||
<mountPath>/var/run/docker.sock</mountPath>
|
||||
<hostPath>/var/run/docker.sock</hostPath>
|
||||
</org.csanchez.jenkins.plugins.kubernetes.PodVolumes_-HostPathVolume>
|
||||
</volumes>
|
||||
<envVars/>
|
||||
<annotations/>
|
||||
<imagePullSecrets/>
|
||||
</org.csanchez.jenkins.plugins.kubernetes.PodTemplate>
|
||||
</templates>
|
||||
<serverUrl>https://kubernetes.default</serverUrl>
|
||||
<skipTlsVerify>false</skipTlsVerify>
|
||||
<namespace>{{ .Release.Namespace }}</namespace>
|
||||
<jenkinsUrl>http://{{ template "fullname" . }}-igor:8080</jenkinsUrl>
|
||||
<jenkinsTunnel>{{ template "fullname" . }}-igor:50000</jenkinsTunnel>
|
||||
<containerCap>100</containerCap>
|
||||
<retentionTimeout>5</retentionTimeout>
|
||||
</org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud>
|
||||
</clouds>
|
||||
<quietPeriod>0</quietPeriod>
|
||||
<scmCheckoutRetryCount>0</scmCheckoutRetryCount>
|
||||
<views>
|
||||
<hudson.model.AllView>
|
||||
<owner class="hudson" reference="../../.."/>
|
||||
<name>All</name>
|
||||
<filterExecutors>false</filterExecutors>
|
||||
<filterQueue>false</filterQueue>
|
||||
<properties class="hudson.model.View$PropertyList"/>
|
||||
</hudson.model.AllView>
|
||||
</views>
|
||||
<primaryView>All</primaryView>
|
||||
<slaveAgentPort>50000</slaveAgentPort>
|
||||
<label></label>
|
||||
<nodeProperties/>
|
||||
<globalNodeProperties/>
|
||||
<noUsageStatistics>true</noUsageStatistics>
|
||||
</hudson>
|
||||
@@ -0,0 +1,139 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-jenkins-jobs
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
data:
|
||||
run-script.xml: |-
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<project>
|
||||
<actions/>
|
||||
<description></description>
|
||||
<logRotator class="hudson.tasks.LogRotator">
|
||||
<daysToKeep>10</daysToKeep>
|
||||
<numToKeep>500</numToKeep>
|
||||
<artifactDaysToKeep>-1</artifactDaysToKeep>
|
||||
<artifactNumToKeep>-1</artifactNumToKeep>
|
||||
</logRotator>
|
||||
<keepDependencies>false</keepDependencies>
|
||||
<properties>
|
||||
<hudson.model.ParametersDefinitionProperty>
|
||||
<parameterDefinitions>
|
||||
<hudson.model.StringParameterDefinition>
|
||||
<name>COMMAND</name>
|
||||
<description>Executable script and parameters</description>
|
||||
<defaultValue></defaultValue>
|
||||
</hudson.model.StringParameterDefinition>
|
||||
<hudson.model.StringParameterDefinition>
|
||||
<name>REPO_URL</name>
|
||||
<description>git repository url.</description>
|
||||
<defaultValue></defaultValue>
|
||||
</hudson.model.StringParameterDefinition>
|
||||
<hudson.model.StringParameterDefinition>
|
||||
<name>BRANCH</name>
|
||||
<description>Branch or sha to build</description>
|
||||
<defaultValue></defaultValue>
|
||||
</hudson.model.StringParameterDefinition>
|
||||
</parameterDefinitions>
|
||||
</hudson.model.ParametersDefinitionProperty>
|
||||
</properties>
|
||||
<scm class="hudson.plugins.git.GitSCM" plugin="git@2.4.0">
|
||||
<configVersion>2</configVersion>
|
||||
<userRemoteConfigs>
|
||||
<hudson.plugins.git.UserRemoteConfig>
|
||||
<name>apidaemon</name>
|
||||
<url>$REPO_URL</url>
|
||||
</hudson.plugins.git.UserRemoteConfig>
|
||||
</userRemoteConfigs>
|
||||
<branches>
|
||||
<hudson.plugins.git.BranchSpec>
|
||||
<name>master</name>
|
||||
</hudson.plugins.git.BranchSpec>
|
||||
</branches>
|
||||
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
|
||||
<submoduleCfg class="list"/>
|
||||
</scm>
|
||||
<concurrentBuild>true</concurrentBuild>
|
||||
<builders>
|
||||
<hudson.plugins.descriptionsetter.DescriptionSetterBuilder plugin="description-setter@1.10">
|
||||
<description>${COMMAND}</description>
|
||||
</hudson.plugins.descriptionsetter.DescriptionSetterBuilder>
|
||||
<hudson.tasks.Shell>
|
||||
<command>${COMMAND}</command>
|
||||
</hudson.tasks.Shell>
|
||||
</builders>
|
||||
<publishers>
|
||||
<hudson.tasks.ArtifactArchiver>
|
||||
<artifacts>*.properties, *.json, *.yml</artifacts>
|
||||
<allowEmptyArchive>true</allowEmptyArchive>
|
||||
<onlyIfSuccessful>false</onlyIfSuccessful>
|
||||
<fingerprint>false</fingerprint>
|
||||
<defaultExcludes>true</defaultExcludes>
|
||||
</hudson.tasks.ArtifactArchiver>
|
||||
</publishers>
|
||||
<buildWrappers/>
|
||||
</project>
|
||||
build-image.xml: |-
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<flow-definition plugin="workflow-job@2.9">
|
||||
<actions/>
|
||||
<description></description>
|
||||
<keepDependencies>false</keepDependencies>
|
||||
<properties>
|
||||
<hudson.model.ParametersDefinitionProperty>
|
||||
<parameterDefinitions>
|
||||
<hudson.model.StringParameterDefinition>
|
||||
<name>REPOSITORY_URL</name>
|
||||
<description></description>
|
||||
<defaultValue></defaultValue>
|
||||
</hudson.model.StringParameterDefinition>
|
||||
<hudson.model.StringParameterDefinition>
|
||||
<name>IMAGE_REPO</name>
|
||||
<description></description>
|
||||
<defaultValue></defaultValue>
|
||||
</hudson.model.StringParameterDefinition>
|
||||
<hudson.model.StringParameterDefinition>
|
||||
<name>IMAGE_TAG</name>
|
||||
<description></description>
|
||||
<defaultValue></defaultValue>
|
||||
</hudson.model.StringParameterDefinition>
|
||||
<hudson.model.StringParameterDefinition>
|
||||
<name>BRANCH</name>
|
||||
<description></description>
|
||||
<defaultValue></defaultValue>
|
||||
</hudson.model.StringParameterDefinition>
|
||||
</parameterDefinitions>
|
||||
</hudson.model.ParametersDefinitionProperty>
|
||||
<org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
|
||||
<triggers/>
|
||||
</org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
|
||||
</properties>
|
||||
<definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@2.23">
|
||||
<script>node {
|
||||
checkout([$class: 'GitSCM',
|
||||
branches: [[name: '$BRANCH']],
|
||||
doGenerateSubmoduleConfigurations: false,
|
||||
extensions: [],
|
||||
submoduleCfg: [],
|
||||
userRemoteConfigs: [[url: '$REPOSITORY_URL']]]
|
||||
)
|
||||
|
||||
stage('save-env') {
|
||||
sh 'env > properties'
|
||||
}
|
||||
|
||||
stage('build-image') {
|
||||
sh 'docker build -t $IMAGE_REPO:$IMAGE_TAG .'
|
||||
}
|
||||
|
||||
stage('push-image') {
|
||||
sh 'gcloud docker -- push $IMAGE_REPO:$IMAGE_TAG'
|
||||
}
|
||||
archiveArtifacts 'properties'
|
||||
}
|
||||
</script>
|
||||
<sandbox>true</sandbox>
|
||||
</definition>
|
||||
<triggers/>
|
||||
</flow-definition>
|
||||
@@ -0,0 +1,11 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-s3-config
|
||||
labels:
|
||||
app: {{template "fullname" .}}
|
||||
data:
|
||||
credentials: |
|
||||
[default]
|
||||
aws_access_key_id={{ .Values.minio.AccessKey }}
|
||||
aws_secret_access_key={{ .Values.minio.SecretKey }}
|
||||
@@ -0,0 +1,247 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
data:
|
||||
clouddriver.yml: |
|
||||
{{.Files.Get "config/clouddriver.yml" | indent 4}}
|
||||
echo.yml: |
|
||||
{{.Files.Get "config/echo.yml" | indent 4}}
|
||||
echo-local.yml: |
|
||||
{{.Files.Get "config/echo-local.yml" | indent 4}}
|
||||
fiat.yml: |
|
||||
{{.Files.Get "config/fiat.yml" | indent 4}}
|
||||
fiat.yml-local: |
|
||||
{{.Files.Get "config/fiat-local.yml" | indent 4}}
|
||||
front50.yml: |
|
||||
{{.Files.Get "config/front50.yml" | indent 4}}
|
||||
front50-local.yml: |
|
||||
{{.Files.Get "config/front50-local.yml" | indent 4}}
|
||||
gate.yml: |
|
||||
{{.Files.Get "config/gate.yml" | indent 4}}
|
||||
gate-local.yml: |
|
||||
{{.Files.Get "config/gate-local.yml" | indent 4}}
|
||||
igor.yml: |
|
||||
{{.Files.Get "config/igor.yml" | indent 4}}
|
||||
igor-local.yml: |
|
||||
{{.Files.Get "config/igor-local.yml" | indent 4}}
|
||||
orca.yml: |
|
||||
{{.Files.Get "config/orca.yml" | indent 4}}
|
||||
orca-local.yml: |
|
||||
{{.Files.Get "config/orca-local.yml" | indent 4}}
|
||||
rosco.yml: |
|
||||
{{.Files.Get "config/rosco.yml" | indent 4}}
|
||||
rosco-local.yml: |
|
||||
{{.Files.Get "config/rosco-local.yml" | indent 4}}
|
||||
settings.js: |
|
||||
{{.Files.Get "config/settings.js" | indent 4}}
|
||||
spinnaker.yml: |
|
||||
{{.Files.Get "config/spinnaker.yml" | indent 4}}
|
||||
clouddriver-local.yml: |
|
||||
server:
|
||||
port: ${services.clouddriver.port:7002}
|
||||
address: 0.0.0.0
|
||||
|
||||
default:
|
||||
account:
|
||||
env: ${providers.kubernetes.primaryCredentials.name}
|
||||
|
||||
kubernetes:
|
||||
enabled: true
|
||||
accounts:
|
||||
- name: local
|
||||
dockerRegistries:
|
||||
{{- range $index, $account := .Values.accounts }}
|
||||
- accountName: {{ $account.name }}
|
||||
{{- end }}
|
||||
|
||||
dockerRegistry:
|
||||
enabled: true
|
||||
accounts:
|
||||
{{- range $index, $account := .Values.accounts }}
|
||||
- name: {{ $account.name }}
|
||||
address: {{ $account.address }}
|
||||
repositories:
|
||||
{{- range $index, $repo := $account.repositories }}
|
||||
- {{ $repo }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
credentials:
|
||||
primaryAccountTypes: ${providers.kubernetes.primaryCredentials.name}
|
||||
challengeDestructiveActionsEnvironments: ${providers.kubernetes.primaryCredentials.name}
|
||||
spinnaker-local.yml: |
|
||||
global:
|
||||
spinnaker:
|
||||
environment: test
|
||||
|
||||
services:
|
||||
default:
|
||||
# These defaults can be modified to change all the spinnaker subsystems
|
||||
# (clouddriver, gate, etc) at once, but not external systems (jenkins, etc).
|
||||
# Individual systems can still be overridden using their own section entry
|
||||
# directly under 'services'.
|
||||
host: localhost
|
||||
protocol: http
|
||||
|
||||
clouddriver:
|
||||
host: {{ template "fullname" . }}-clouddriver
|
||||
port: 7002
|
||||
baseUrl: ${services.default.protocol}://${services.clouddriver.host}:${services.clouddriver.port}
|
||||
# Controls whether UserDataProviders are used to populate user data of new server groups.
|
||||
# If false, user data is copied over from ancestor server groups on both CopyLastAsgAtomicOperation and
|
||||
# ModifyAsgLaunchConfigurationOperation (only if no user data is provided on the given request).
|
||||
aws:
|
||||
udf:
|
||||
enabled: false
|
||||
|
||||
echo:
|
||||
enabled: true
|
||||
host: {{ template "fullname" . }}-echo
|
||||
port: 8089
|
||||
baseUrl: ${services.default.protocol}://${services.echo.host}:${services.echo.port}
|
||||
cron:
|
||||
enabled: true
|
||||
notifications:
|
||||
# allow pipeline triggers to run periodically via cron expressions
|
||||
# If you wish for spinnaker to send notifications, configure the following blocks
|
||||
mail:
|
||||
enabled: {{ .Values.mail.enabled }}
|
||||
host: {{ .Values.mail.host }}
|
||||
username: {{ .Values.mail.username }}
|
||||
password: {{ .Values.mail.password }}
|
||||
fromAddress: {{ .Values.mail.fromAddress }}
|
||||
port: {{ .Values.mail.port }}
|
||||
hipchat:
|
||||
enabled: false
|
||||
url: # the hipchat server to connect to
|
||||
token: #the hipchat auth token
|
||||
sms:
|
||||
enabled: false
|
||||
account: # twilio account id
|
||||
token: # twilio auth token
|
||||
from: # phone number by which sms messages are sent
|
||||
slack:
|
||||
enabled: false
|
||||
token: # the part after http://hooks.slack.com/services/
|
||||
|
||||
deck:
|
||||
host: {{ template "fullname" . }}-deck
|
||||
port: 9000
|
||||
baseUrl: ${services.default.protocol}://${services.deck.host}:${services.deck.port}
|
||||
gateUrl: ${services.gate.baseUrl}
|
||||
bakeryUrl: ${services.bakery.baseUrl}
|
||||
timezone: 'America/New_York'
|
||||
auth:
|
||||
enabled: false
|
||||
|
||||
front50:
|
||||
host: {{ template "fullname" . }}-front50
|
||||
port: 8080
|
||||
baseUrl: ${services.default.protocol}://${services.front50.host}:${services.front50.port}
|
||||
|
||||
# If using storage bucket persistence (gcs or s3), specify the bucket here
|
||||
# disable cassandra and enable the storage service below.
|
||||
storage_bucket: {{ .Values.storageBucket }}
|
||||
bucket_root: front50
|
||||
|
||||
cassandra:
|
||||
enabled: false
|
||||
redis:
|
||||
enabled: false
|
||||
gcs:
|
||||
enabled: false
|
||||
project: my-project
|
||||
s3:
|
||||
enabled: true
|
||||
endpoint: http://{{ .Release.Name }}-minio:9000
|
||||
gate:
|
||||
host: {{ template "fullname" . }}-gate
|
||||
port: 8084
|
||||
baseUrl: ${services.default.protocol}://${services.gate.host}:${services.gate.port}
|
||||
|
||||
igor:
|
||||
# If you are integrating Jenkins then you must also enable Spinnaker's
|
||||
# "igor" subsystem.
|
||||
enabled: true
|
||||
host: {{ template "fullname" . }}-igor
|
||||
port: 8088
|
||||
baseUrl: ${services.default.protocol}://${services.igor.host}:${services.igor.port}
|
||||
|
||||
kato:
|
||||
host: ${services.clouddriver.host}
|
||||
port: ${services.clouddriver.port}
|
||||
baseUrl: ${services.clouddriver.baseUrl}
|
||||
|
||||
mort:
|
||||
host: ${services.clouddriver.host}
|
||||
port: ${services.clouddriver.port}
|
||||
baseUrl: ${services.clouddriver.baseUrl}
|
||||
|
||||
orca:
|
||||
host: {{ template "fullname" . }}-orca
|
||||
port: 8083
|
||||
baseUrl: ${services.default.protocol}://${services.orca.host}:${services.orca.port}
|
||||
enabled: true
|
||||
|
||||
oort:
|
||||
host: ${services.clouddriver.host}
|
||||
port: ${services.clouddriver.port}
|
||||
baseUrl: ${services.clouddriver.baseUrl}
|
||||
|
||||
rosco:
|
||||
host: {{ template "fullname" . }}-rosco
|
||||
port: 8087
|
||||
baseUrl: ${services.default.protocol}://${services.rosco.host}:${services.rosco.port}
|
||||
# You need to provide the fully-qualified path to the directory containing the packer templates.
|
||||
# They typically live in rosco's config/packer directory.
|
||||
configDir: /opt/rosco/config/packer
|
||||
|
||||
bakery:
|
||||
host: ${services.rosco.host}
|
||||
port: ${services.rosco.port}
|
||||
baseUrl: ${services.rosco.baseUrl}
|
||||
extractBuildDetails: true
|
||||
|
||||
docker:
|
||||
# This target repository is used by the bakery to publish baked docker images.
|
||||
# Do not include http://.
|
||||
enabled: true
|
||||
targetRepository: viglesiasce/sample-app
|
||||
|
||||
jenkins:
|
||||
# The "name" entry is used for the display name when selecting
|
||||
# this server. You must set `enabled` to true when enabling igor.
|
||||
#
|
||||
# If you have multiple jenkins servers, you will need to list
|
||||
# them in an igor-local.yml. See jenkins.masters in config/igor.yml.
|
||||
#
|
||||
# Note that jenkins is not installed with Spinnaker so you must obtain this
|
||||
# on your own if you are interested.
|
||||
enabled: true
|
||||
defaultMaster:
|
||||
name: default
|
||||
baseUrl: http://localhost:8080/
|
||||
username: admin
|
||||
password: admin
|
||||
|
||||
redis:
|
||||
host: {{ .Release.Name }}-redis
|
||||
port: 6379
|
||||
connection: redis://:{{ .Values.redis.redisPassword }}@${services.redis.host}:${services.redis.port}
|
||||
|
||||
providers:
|
||||
kubernetes:
|
||||
enabled: true
|
||||
primaryCredentials:
|
||||
name: local
|
||||
namespace: default
|
||||
dockerRegistryAccount: ${providers.dockerRegistry.primaryCredentials.name}
|
||||
|
||||
dockerRegistry:
|
||||
enabled: true
|
||||
primaryCredentials:
|
||||
name: my-docker-account
|
||||
address: https://index.docker.io/
|
||||
repository: {{ .Values.repository }}
|
||||
@@ -0,0 +1,34 @@
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-clouddriver
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: clouddriver
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: clouddriver
|
||||
spec:
|
||||
containers:
|
||||
- image: {{ .Values.images.clouddriver }}
|
||||
name: clouddriver
|
||||
ports:
|
||||
- containerPort: 7002
|
||||
name: clouddriver
|
||||
volumeMounts:
|
||||
- mountPath: /opt/spinnaker/config
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /credentials
|
||||
port: 7002
|
||||
initialDelaySeconds: 20
|
||||
timeoutSeconds: 1
|
||||
volumes:
|
||||
- name: {{ template "fullname" . }}-spinnaker-config
|
||||
configMap:
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
@@ -0,0 +1,38 @@
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-deck
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: deck
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: deck
|
||||
spec:
|
||||
containers:
|
||||
- image: {{ .Values.images.deck }}
|
||||
name: deck
|
||||
command:
|
||||
- /bin/bash
|
||||
- -c
|
||||
args:
|
||||
- "cp /opt/spinnaker/config/settings.js .; npm start"
|
||||
env:
|
||||
- name: DECK_HOST
|
||||
value: "0.0.0.0"
|
||||
- name: DECK_PORT
|
||||
value: "9000"
|
||||
ports:
|
||||
- containerPort: 9000
|
||||
name: deck
|
||||
volumeMounts:
|
||||
- mountPath: /opt/spinnaker/config
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
volumes:
|
||||
- name: {{ template "fullname" . }}-spinnaker-config
|
||||
configMap:
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
@@ -0,0 +1,34 @@
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-echo
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: echo
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: echo
|
||||
spec:
|
||||
containers:
|
||||
- image: {{ .Values.images.echo }}
|
||||
name: echo
|
||||
ports:
|
||||
- containerPort: 8089
|
||||
name: echo
|
||||
volumeMounts:
|
||||
- mountPath: /opt/spinnaker/config
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /env
|
||||
port: 8089
|
||||
initialDelaySeconds: 20
|
||||
timeoutSeconds: 1
|
||||
volumes:
|
||||
- name: {{ template "fullname" . }}-spinnaker-config
|
||||
configMap:
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
@@ -0,0 +1,39 @@
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-front50
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: front50
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: front50
|
||||
spec:
|
||||
containers:
|
||||
- image: {{ .Values.images.front50 }}
|
||||
name: front50
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
name: front50
|
||||
volumeMounts:
|
||||
- mountPath: /opt/spinnaker/config
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
- mountPath: /root/.aws
|
||||
name: {{ template "fullname" . }}-s3-config
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /env
|
||||
port: 8080
|
||||
initialDelaySeconds: 20
|
||||
timeoutSeconds: 1
|
||||
volumes:
|
||||
- name: {{ template "fullname" . }}-spinnaker-config
|
||||
configMap:
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
- name: {{ template "fullname" . }}-s3-config
|
||||
configMap:
|
||||
name: {{ template "fullname" . }}-s3-config
|
||||
@@ -0,0 +1,34 @@
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-gate
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: gate
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: gate
|
||||
spec:
|
||||
containers:
|
||||
- image: {{ .Values.images.gate }}
|
||||
name: gate
|
||||
ports:
|
||||
- containerPort: 8084
|
||||
name: gate
|
||||
volumeMounts:
|
||||
- mountPath: /opt/spinnaker/config
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /env
|
||||
port: 8084
|
||||
initialDelaySeconds: 30
|
||||
timeoutSeconds: 1
|
||||
volumes:
|
||||
- name: {{ template "fullname" . }}-spinnaker-config
|
||||
configMap:
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
@@ -0,0 +1,76 @@
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-igor
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: igor
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: igor
|
||||
annotations:
|
||||
pod.alpha.kubernetes.io/init-containers: '[
|
||||
{
|
||||
"name": "copy-default-config",
|
||||
"image": "{{.Values.jenkins.Master.Image}}:{{.Values.jenkins.Master.ImageTag}}",
|
||||
"command": ["cp", "-n", "/var/jenkins_config/config.xml", "/var/jenkins_home"],
|
||||
"imagePullPolicy": "IfNotPresent",
|
||||
"volumeMounts": [
|
||||
{
|
||||
"name": "jenkins-config",
|
||||
"mountPath": "/var/jenkins_config"
|
||||
},
|
||||
{
|
||||
"name": "jenkins-home",
|
||||
"mountPath": "/var/jenkins_home"
|
||||
}
|
||||
]
|
||||
}
|
||||
]'
|
||||
spec:
|
||||
containers:
|
||||
- image: {{ .Values.images.igor }}
|
||||
name: igor
|
||||
ports:
|
||||
- containerPort: 8088
|
||||
name: igor
|
||||
volumeMounts:
|
||||
- mountPath: /opt/spinnaker/config
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /env
|
||||
port: 8088
|
||||
initialDelaySeconds: 20
|
||||
timeoutSeconds: 1
|
||||
- name: jenkins-master
|
||||
image: "{{.Values.jenkins.Master.Image}}:{{.Values.jenkins.Master.ImageTag}}"
|
||||
imagePullPolicy: "{{.Values.jenkins.Master.ImagePullPolicy}}"
|
||||
env:
|
||||
- name: JAVA_OPTS
|
||||
value: "{{ default "" .Values.jenkins.Master.JavaOpts}}"
|
||||
ports:
|
||||
- containerPort: {{.Values.jenkins.Master.ContainerPort}}
|
||||
name: http
|
||||
- containerPort: {{.Values.jenkins.Master.SlaveListenerPort}}
|
||||
name: slavelistener
|
||||
resources:
|
||||
requests:
|
||||
cpu: "{{.Values.jenkins.Master.Cpu}}"
|
||||
memory: "{{.Values.jenkins.Master.Memory}}"
|
||||
volumeMounts:
|
||||
- mountPath: /var/jenkins_home
|
||||
name: jenkins-home
|
||||
volumes:
|
||||
- name: jenkins-config
|
||||
configMap:
|
||||
name: {{ .Release.Name }}-jenkins-config
|
||||
- name: jenkins-home
|
||||
emptyDir: {}
|
||||
- name: {{ template "fullname" . }}-spinnaker-config
|
||||
configMap:
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
@@ -0,0 +1,34 @@
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-orca
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: orca
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: orca
|
||||
spec:
|
||||
containers:
|
||||
- image: {{ .Values.images.orca }}
|
||||
name: orca
|
||||
ports:
|
||||
- containerPort: 8083
|
||||
name: orca
|
||||
volumeMounts:
|
||||
- mountPath: /opt/spinnaker/config
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /env
|
||||
port: 8083
|
||||
initialDelaySeconds: 20
|
||||
timeoutSeconds: 1
|
||||
volumes:
|
||||
- name: {{ template "fullname" . }}-spinnaker-config
|
||||
configMap:
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
@@ -0,0 +1,44 @@
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-rosco
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: rosco
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: rosco
|
||||
spec:
|
||||
containers:
|
||||
- image: {{ .Values.images.rosco }}
|
||||
name: rosco
|
||||
ports:
|
||||
- containerPort: 8087
|
||||
name: rosco
|
||||
volumeMounts:
|
||||
- mountPath: /opt/spinnaker/config
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
- mountPath: /usr/bin/docker
|
||||
name: docker-bin
|
||||
- mountPath: /var/run/docker.sock
|
||||
name: docker-sock
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /env
|
||||
port: 8087
|
||||
initialDelaySeconds: 20
|
||||
timeoutSeconds: 1
|
||||
volumes:
|
||||
- name: {{ template "fullname" . }}-spinnaker-config
|
||||
configMap:
|
||||
name: {{ template "fullname" . }}-spinnaker-config
|
||||
- name: docker-bin
|
||||
hostPath:
|
||||
path: /usr/bin/docker
|
||||
- name: docker-sock
|
||||
hostPath:
|
||||
path: /var/run/docker.sock
|
||||
@@ -0,0 +1,27 @@
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: "{{.Release.Name}}-create-bucket"
|
||||
labels:
|
||||
heritage: {{.Release.Service | quote }}
|
||||
release: {{.Release.Name | quote }}
|
||||
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
|
||||
annotations:
|
||||
"helm.sh/hook": post-install
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
name: "{{.Release.Name}}"
|
||||
labels:
|
||||
heritage: {{.Release.Service | quote }}
|
||||
release: {{.Release.Name | quote }}
|
||||
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: post-install-job
|
||||
image: "viglesiasce/minio-client:v0.4.0"
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- "mc config host add {{.Release.Name}}-minio http://{{.Release.Name}}-minio:9000 {{ .Values.minio.AccessKey }} {{ .Values.minio.SecretKey }} S3v4 && mc mb {{.Release.Name}}-minio/spinnaker"
|
||||
@@ -0,0 +1,35 @@
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: "{{.Release.Name}}-delete-jobs"
|
||||
labels:
|
||||
heritage: {{.Release.Service | quote }}
|
||||
release: {{.Release.Name | quote }}
|
||||
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
|
||||
annotations:
|
||||
"helm.sh/hook": post-delete
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
name: "{{.Release.Name}}"
|
||||
labels:
|
||||
heritage: {{.Release.Service | quote }}
|
||||
release: {{.Release.Name | quote }}
|
||||
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
volumes:
|
||||
- name: kubectl
|
||||
hostPath:
|
||||
path: /usr/bin/kubectl
|
||||
|
||||
containers:
|
||||
- name: post-install-job
|
||||
image: "lachlanevenson/k8s-kubectl:v1.4.7"
|
||||
volumeMounts:
|
||||
- name: kubectl
|
||||
mountPath: /kubectl
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- "kubectl delete job {{.Release.Name}}-create-bucket {{.Release.Name}}-upload-build-image {{.Release.Name}}-delete-jobs {{.Release.Name}}-upload-run-script"
|
||||
@@ -0,0 +1,45 @@
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: "{{.Release.Name}}-upload-build-image"
|
||||
labels:
|
||||
heritage: {{.Release.Service | quote }}
|
||||
release: {{.Release.Name | quote }}
|
||||
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
|
||||
annotations:
|
||||
"helm.sh/hook": post-install
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
name: "{{.Release.Name}}"
|
||||
labels:
|
||||
heritage: {{.Release.Service | quote }}
|
||||
release: {{.Release.Name | quote }}
|
||||
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
volumes:
|
||||
- name: jenkins-jobs
|
||||
configMap:
|
||||
name: {{ .Release.Name }}-jenkins-jobs
|
||||
containers:
|
||||
- name: post-install-job
|
||||
image: "viglesiasce/minio-client:v0.4.0"
|
||||
command:
|
||||
- curl
|
||||
- -X
|
||||
- POST
|
||||
- -H
|
||||
- "Content-Type: application/xml"
|
||||
- --retry
|
||||
- "20"
|
||||
- --retry-delay
|
||||
- "10"
|
||||
- --max-time
|
||||
- "3"
|
||||
- --data-binary
|
||||
- "@/jobs/build-image.xml"
|
||||
- "http://{{ template "fullname" . }}-igor:8080/createItem?name=build-image"
|
||||
volumeMounts:
|
||||
- name: jenkins-jobs
|
||||
mountPath: /jobs
|
||||
@@ -0,0 +1,45 @@
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: "{{.Release.Name}}-upload-run-script"
|
||||
labels:
|
||||
heritage: {{.Release.Service | quote }}
|
||||
release: {{.Release.Name | quote }}
|
||||
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
|
||||
annotations:
|
||||
"helm.sh/hook": post-install
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
name: "{{.Release.Name}}"
|
||||
labels:
|
||||
heritage: {{.Release.Service | quote }}
|
||||
release: {{.Release.Name | quote }}
|
||||
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
volumes:
|
||||
- name: jenkins-jobs
|
||||
configMap:
|
||||
name: {{ .Release.Name }}-jenkins-jobs
|
||||
containers:
|
||||
- name: post-install-job
|
||||
image: "viglesiasce/minio-client:v0.4.0"
|
||||
command:
|
||||
- curl
|
||||
- -X
|
||||
- POST
|
||||
- -H
|
||||
- "Content-Type: application/xml"
|
||||
- --retry
|
||||
- "20"
|
||||
- --retry-delay
|
||||
- "10"
|
||||
- --max-time
|
||||
- "3"
|
||||
- --data-binary
|
||||
- "@/jobs/run-script.xml"
|
||||
- "http://{{ template "fullname" . }}-igor:8080/createItem?name=run-script"
|
||||
volumeMounts:
|
||||
- name: jenkins-jobs
|
||||
mountPath: /jobs
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-clouddriver
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: clouddriver
|
||||
spec:
|
||||
ports:
|
||||
- port: 7002
|
||||
selector:
|
||||
app: {{ template "fullname" . }}
|
||||
component: clouddriver
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-deck
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: deck
|
||||
spec:
|
||||
ports:
|
||||
- port: 9000
|
||||
selector:
|
||||
app: {{ template "fullname" . }}
|
||||
component: deck
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-echo
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: echo
|
||||
spec:
|
||||
ports:
|
||||
- port: 8089
|
||||
selector:
|
||||
app: {{ template "fullname" . }}
|
||||
component: echo
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-front50
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: front50
|
||||
spec:
|
||||
ports:
|
||||
- port: 8080
|
||||
selector:
|
||||
app: {{ template "fullname" . }}
|
||||
component: front50
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-gate
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: gate
|
||||
spec:
|
||||
ports:
|
||||
- port: 8084
|
||||
selector:
|
||||
app: {{ template "fullname" . }}
|
||||
component: gate
|
||||
@@ -0,0 +1,18 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-igor
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: igor
|
||||
spec:
|
||||
ports:
|
||||
- port: 8088
|
||||
name: igor
|
||||
- port: 8080
|
||||
name: jenkins-master
|
||||
- port: 50000
|
||||
name: jenkins-agent
|
||||
selector:
|
||||
app: {{ template "fullname" . }}
|
||||
component: igor
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-orca
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: orca
|
||||
spec:
|
||||
ports:
|
||||
- port: 8083
|
||||
selector:
|
||||
app: {{ template "fullname" . }}
|
||||
component: orca
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "fullname" . }}-rosco
|
||||
labels:
|
||||
app: {{ template "fullname" . }}
|
||||
component: rosco
|
||||
spec:
|
||||
ports:
|
||||
- port: 8087
|
||||
selector:
|
||||
app: {{ template "fullname" . }}
|
||||
component: rosco
|
||||
@@ -0,0 +1,82 @@
|
||||
# Define which registries and repositories you want available in your
|
||||
# Spinnaker pipeline definitions
|
||||
# For more info visit:
|
||||
# http://www.spinnaker.io/v1.0/docs/target-deployment-configuration#section-docker-registry
|
||||
accounts:
|
||||
- name: dockerhub
|
||||
address: https://index.docker.io
|
||||
repositories:
|
||||
- library/alpine
|
||||
- library/ubuntu
|
||||
- library/centos
|
||||
- library/nginx
|
||||
|
||||
# Settings for notifications via email
|
||||
# For more info visit:
|
||||
# http://www.spinnaker.io/docs/notifications-and-events-guide#section-email
|
||||
mail:
|
||||
enabled: false
|
||||
host: smtp.example.org
|
||||
username: admin
|
||||
password: admin
|
||||
fromAddress: spinnaker@example.org
|
||||
port: 25
|
||||
|
||||
# Images for each component
|
||||
images:
|
||||
clouddriver: quay.io/spinnaker/clouddriver:v1.489.0
|
||||
echo: quay.io/spinnaker/echo:v1.127.0
|
||||
deck: quay.io/spinnaker/deck:v2.956.0
|
||||
igor: quay.io/spinnaker/igor:v1.61.0
|
||||
orca: quay.io/spinnaker/orca:v1.302.0
|
||||
gate: quay.io/spinnaker/gate:v2.109.0
|
||||
front50: quay.io/spinnaker/front50:v1.69.0
|
||||
rosco: quay.io/spinnaker/rosco:v0.78.0
|
||||
|
||||
# Bucket to use when storing config data in S3 compatible storage
|
||||
storageBucket: spinnaker
|
||||
|
||||
# Resources to provide to each of
|
||||
# the Spinnaker components
|
||||
resources:
|
||||
limits:
|
||||
cpu: 1000m
|
||||
memory: 1280Mi
|
||||
requests:
|
||||
cpu: 1000m
|
||||
memory: 1280Mi
|
||||
|
||||
# Redis password to use for the in-cluster redis service
|
||||
# Redis is not exposed publically
|
||||
redis:
|
||||
redisPassword: password
|
||||
|
||||
# Minio access/secret keys for the in-cluster S3 usage
|
||||
# Minio is not exposed publically
|
||||
minio:
|
||||
AccessKey: spinnakeradmin
|
||||
SecretKey: spinnakeradmin
|
||||
|
||||
# Configuration for the Jenkins instance that is attached to the
|
||||
# igor component of Spinnaker. For more info about the Jenkins integration
|
||||
# with Spinnaker, visit:
|
||||
# http://www.spinnaker.io/docs/jenkins-script-execution-stage
|
||||
jenkins:
|
||||
Master:
|
||||
Name: jenkins-master
|
||||
Image: "gcr.io/kubernetes-charts-ci/jenkins-master-k8s"
|
||||
ImageTag: "v0.6.0"
|
||||
ImagePullPolicy: "Always"
|
||||
Component: "jenkins-master"
|
||||
Cpu: "500m"
|
||||
Memory: "512Mi"
|
||||
ServicePort: 8080
|
||||
ServiceType: ClusterIP
|
||||
ContainerPort: 8080
|
||||
SlaveListenerPort: 50000
|
||||
|
||||
Agent:
|
||||
Image: viglesiasce/spinnaker-jenkins-agent
|
||||
ImageTag: v0.2.0
|
||||
Cpu: "500m"
|
||||
Memory: "512Mi"
|
||||
Reference in New Issue
Block a user