diff --git a/templates/gocd/0/README.md b/templates/gocd/0/README.md new file mode 100644 index 0000000..f78d15f --- /dev/null +++ b/templates/gocd/0/README.md @@ -0,0 +1,35 @@ +# GoCD.io + +### Info: + +This template creates one GoCD server and scale out the number of GoCD agent you need. + +The GoCD agent is link with docker engine container as sidekick, so the idea is to not create GoCD agent per language but use docker container to build and test your stuff. +You can use on GoCD agent: +- docker cli +- docker-compose cli +- rancher-compose cli +- make + + +### Usage: + +Select GoCD from catalog. + +Choose if you should deploy GoCD Server, or GoCD Agent or the two. +Enter the number of GoCD agent you need. +Choose the key to autoregister GoCD agent. + +Click deploy. + +GoCD server can now be accessed over the Rancher network on port `8153` (http://IP_CONTAINER:8153). To access from external Rancher network, you need to set load balancer or expose the port 8153. + + + +### Source, bugs and enhances + + If you found bugs or need enhance, you can open ticket on github: + - [GoCD official core project](https://github.com/gocd/gocd) + - [GoCD Server docker image](https://github.com/disaster37/alpine-gocd-server) + - [GoCD Agent docker image](https://github.com/disaster37/alpine-gocd-agent) + - [Rancher Cattle metadata docker image](https://github.com/disaster37/rancher-cattle-metadata) \ No newline at end of file diff --git a/templates/gocd/0/docker-compose.yml.tpl b/templates/gocd/0/docker-compose.yml.tpl new file mode 100644 index 0000000..bdd6ca9 --- /dev/null +++ b/templates/gocd/0/docker-compose.yml.tpl @@ -0,0 +1,125 @@ +version: '2' +services: + {{- if eq .Values.DEPLOY_SERVER "true"}} + gocd-server: + tty: true + image: webcenter/alpine-gocd-server:17.3.0-1 + volumes: + {{- if (contains .Values.VOLUME_DRIVER_SERVER "/")}} + - ${VOLUME_DRIVER_SERVER}:/data + {{- else}} + - gocd-server-data:/data + {{- end}} + environment: + - GOCD_CONFIG_memory=${GOCD_SERVER_MEMORY} + - GOCD_CONFIG_agent-key=${GOCD_AGENT_KEY} + - GOCD_CONFIG_server-url=${GOCD_SERVER_URL} + - GOCD_USER_${GOCD_USER}=${GOCD_PASSWORD} + - CONFD_BACKEND=${CONFD_BACKEND} + - CONFD_NODES=${CONFD_NODES} + - CONFD_PREFIX_KEY=${CONFD_PREFIX} + {{- if eq .Values.GOCD_AGENT_PACKAGE "true"}} + - GOCD_PLUGIN_script-executor=https://github.com/gocd-contrib/script-executor-task/releases/download/0.3/script-executor-0.3.0.jar + - GOCD_PLUGIN_docker-task=https://github.com/manojlds/gocd-docker/releases/download/0.1.27/docker-task-assembly-0.1.27.jar + - GOCD_PLUGIN_slack=https://github.com/Vincit/gocd-slack-task/releases/download/v1.3.1/gocd-slack-task-1.3.1.jar + - GOCD_PLUGIN_docker-pipline=https://github.com/Haufe-Lexware/gocd-plugins/releases/download/v1.0.0-beta/gocd-docker-pipeline-plugin-1.0.0.jar + - GOCD_PLUGIN_email-notifier=https://github.com/gocd-contrib/email-notifier/releases/download/v0.1/email-notifier-0.1.jar + - GOCD_PLUGIN_github-notifier=https://github.com/gocd-contrib/gocd-build-status-notifier/releases/download/1.3/github-pr-status-1.3.jar + - GOCD_PLUGIN_github-scm=https://github.com/ashwanthkumar/gocd-build-github-pull-requests/releases/download/v1.3.3/github-pr-poller-1.3.3.jar + - GOCD_PLUGIN_maven-repository=https://github.com/1and1/go-maven-poller/releases/download/v1.1.4/go-maven-poller.jar + - GOCD_PLUGIN_maven-task=https://github.com/ruckc/gocd-maven-plugin/releases/download/0.1.1/gocd-maven-plugin-0.1.1.jar + - GOCD_PLUGIN_s3-fetch=https://github.com/indix/gocd-s3-artifacts/releases/download/v2.0.2/s3fetch-assembly-2.0.2.jar + - GOCD_PLUGIN_s3-publish=https://github.com/indix/gocd-s3-artifacts/releases/download/v2.0.2/s3publish-assembly-2.0.2.jar + - GOCD_PLUGIN_nessus-scan=https://github.com/Haufe-Lexware/gocd-plugins/releases/download/v1.0.0-beta/gocd-nessus-scan-plugin-1.0.0.jar + - GOCD_PLUGIN_sonar=https://github.com/Haufe-Lexware/gocd-plugins/releases/download/v1.0.0-beta/gocd-sonar-qualitygates-plugin-1.0.0.jar + - GOCD_PLUGIN_gitlab-auth=https://github.com/gocd-contrib/gocd-oauth-login/releases/download/v2.3/gitlab-oauth-login-2.3.jar + - GOCD_PLUGIN_google-auth=https://github.com/gocd-contrib/gocd-oauth-login/releases/download/v2.3/google-oauth-login-2.3.jar + - GOCD_PLUGIN_github-auth=https://github.com/gocd-contrib/gocd-oauth-login/releases/download/v2.3/github-oauth-login-2.3.jar + {{- end}} + {{- if (ne .Values.DEPLOY_LB "true") and .Values.PUBLISH_PORT}} + ports: + - ${PUBLISH_PORT}:8153 + {{- end}} + labels: + io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name} + io.rancher.container.hostname_override: container_name + {{- if eq .Values.DEPLOY_LB "true"}} + lb: + image: rancher/lb-service-haproxy:v0.6.2 + {{- if .Values.PUBLISH_PORT}} + ports: + - ${PUBLISH_PORT}:8153/tcp + {{- else}} + expose: + - 8153:8153/tcp + {{- end}} + links: + - gocd-server:gocd-server + labels: + io.rancher.container.agent.role: environmentAdmin + io.rancher.container.create_agent: 'true' + {{- end}} + {{- end}} + {{- if eq .Values.DEPLOY_AGENT "true"}} + gocd-agent: + tty: true + image: webcenter/alpine-gocd-agent:17.3.0-1 + volumes: + {{- if (contains .Values.VOLUME_DRIVER_AGENT "/")}} + - ${VOLUME_DRIVER_AGENT}:/data + {{- else}} + - gocd-agent-data:/data + {{- end}} + - gocd-scheduler-setting:/opt/scheduler + environment: + - GOCD_CONFIG_memory=${GOCD_AGENT_MEMORY} + - GOCD_CONFIG_agent_key=${GOCD_AGENT_KEY} + - GOCD_CONFIG_agent_resource_docker=${GOCD_AGENT_RESOURCE} + - DOCKER_HOST=docker-engine:2375 + {{- if eq .Values.DEPLOY_SERVER "true"}} + links: + - gocd-server:gocd-server + {{- end}} + labels: + io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name} + io.rancher.container.hostname_override: container_name + io.rancher.container.agent.role: environment + io.rancher.container.create_agent: 'true' + io.rancher.sidekicks: rancher-cattle-metadata,docker-engine + rancher-cattle-metadata: + network_mode: none + labels: + io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name} + io.rancher.container.hostname_override: container_name + io.rancher.container.start_once: "true" + image: webcenter/rancher-cattle-metadata:1.0.1 + volumes: + - gocd-scheduler-setting:/opt/scheduler + docker-engine: + privileged: true + labels: + io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name} + io.rancher.container.hostname_override: container_name + image: index.docker.io/docker:1.13-dind + volumes: + {{- if (contains .Values.VOLUME_DRIVER_AGENT "/")}} + - ${VOLUME_DRIVER_AGENT}:/data + {{- else}} + - gocd-agent-data:/data + {{- end}} + {{- end}} + + +volumes: + gocd-scheduler-setting: + driver: local + per_container: true + {{- if not (contains .Values.VOLUME_DRIVER_AGENT "/")}} + gocd-agent-data: + driver: ${VOLUME_DRIVER_AGENT} + per_container: true + {{- end}} + {{- if not (contains .Values.VOLUME_DRIVER_SERVER "/")}} + gocd-server-data: + driver: ${VOLUME_DRIVER_SERVER} + {{- end}} diff --git a/templates/gocd/0/rancher-compose.yml b/templates/gocd/0/rancher-compose.yml new file mode 100644 index 0000000..11e6bb6 --- /dev/null +++ b/templates/gocd/0/rancher-compose.yml @@ -0,0 +1,155 @@ +version: '2' +catalog: + name: GoCD + version: 17.3.0-rancher1 + minimum_rancher_version: v1.5.0 + questions: + - variable: "DEPLOY_SERVER" + description: "Deploy GoCD server" + label: "Deploy GoCD server" + required: true + type: enum + default: "true" + options: + - "true" + - "false" + - variable: "DEPLOY_AGENT" + description: "Deploy GoCD agent" + label: "Deploy GoCD agent" + required: true + type: enum + default: "true" + options: + - "true" + - "false" + - variable: "GOCD_AGENT_SCALE" + description: "Number of GoCD agent" + label: "GoCD Agents" + required: true + default: 1 + type: "string" + - variable: "GOCD_AGENT_KEY" + description: "Key to use for auto registration agent" + label: "Agent key" + required: true + type: "password" + - variable: "GOCD_SERVER_MEMORY" + description: "Max memory allowed to GoCD server" + label: "Max memory for server" + type: "string" + required: true + default: "1024m" + - variable: "GOCD_AGENT_MEMORY" + description: "Max memory allowed to GoCD agent" + label: "Max memory for agent" + type: "string" + required: true + default: "2048m" + - variable: "GOCD_AGENT_RESOURCE" + description: "Resource name associated for agent" + label: "Resource name" + type: "string" + required: true + default: "docker" + - variable: "GOCD_USER" + description: "Login to connect on GoCD" + label: "Login" + type: "string" + required: true + default: "admin" + - variable: "GOCD_PASSWORD" + description: "Password to connect on GoCD" + label: "Password" + type: "password" + required: true + - variable: "GOCD_AGENT_PACKAGE" + description: "Install GoCD extra plugins" + label: "Install extra plugins" + required: true + type: enum + default: "true" + options: + - "true" + - "false" + - variable: "VOLUME_DRIVER_SERVER" + description: "Docker driver to store volume or base path for GoCD server" + label: "Volume drver / Path for server" + type: "string" + required: true + default: "local" + - variable: "VOLUME_DRIVER_AGENT" + description: "Docker driver to store volume or base path for GoCD agent" + label: "Volume drver / Path for agent" + type: "string" + required: true + default: "local" + - variable: "DEPLOY_LB" + description: "Deploy Loadbalancer" + label: "Deploy Loadbalancer" + required: true + type: enum + default: "true" + options: + - "true" + - "false" + - variable: "PUBLISH_PORT" + description: "Set port if you want publish external port for GoCD server or Loadbalancer" + label: "Publish port" + required: false + type: "string" + default: "8153" + - variable: "GOCD_SERVER_URL" + description: "The server URL use by agent to auto register. Don't touch if you deploy server and agent" + label: "Server URL" + required: true + type: "string" + default: "https://gocd-server:8154/go" + - variable: "CONFD_BACKEND" + description: "The confd backend to grab config" + label: "Confd backend" + required: true + default: "env" + type: "string" + - variable: "CONFD_NODES" + description: "The confd nodes" + label: "Confd nodes" + required: false + type: "string" + - variable: "CONFD_PREFIX" + description: "The confd prefix" + label: "Confd prefix" + required: true + default: "/gocd" + type: "string" + +services: + gocd-agent: + scale: ${GOCD_AGENT_SCALE} + retain_ip: true + gocd-server: + scale: 1 + retain_ip: false + health_check: + port: 8153 + interval: 5000 + unhealthy_threshold: 3 + request_line: '' + healthy_threshold: 2 + response_timeout: 5000 + lb: + scale: 1 + start_on_create: true + lb_config: + certs: [] + port_rules: + - priority: 1 + protocol: http + service: gocd-server + source_port: 8153 + target_port: 8153 + health_check: + response_timeout: 2000 + healthy_threshold: 2 + port: 42 + unhealthy_threshold: 3 + interval: 2000 \ No newline at end of file diff --git a/templates/gocd/catalogIcon-gocd.png b/templates/gocd/catalogIcon-gocd.png new file mode 100644 index 0000000..8983baa Binary files /dev/null and b/templates/gocd/catalogIcon-gocd.png differ diff --git a/templates/gocd/config.yml b/templates/gocd/config.yml new file mode 100644 index 0000000..8c59e5e --- /dev/null +++ b/templates/gocd/config.yml @@ -0,0 +1,8 @@ +name: GoCD +description: | + GoCD Stack (server and agents) +version: 17.3.0-rancher1 +category: Continuous Integration +maintainer: "Sebastien Langoureaux " +license: Apache License +projectURL: https://www.gocd.io/