Move all the master code into codevalet/master

This commit is contained in:
R. Tyler Croy 2017-12-20 15:53:09 -08:00
parent a095f5b0ac
commit a59dc268a0
No known key found for this signature in database
GPG Key ID: 1426C7DC3F51E16F
26 changed files with 4 additions and 714 deletions

View File

@ -1,4 +0,0 @@
build/repos
webapp/
proxy/
assets/

View File

@ -1,3 +0,0 @@
FROM maven:3
RUN apt-get update && apt-get install -qy git nodejs node-gyp

View File

@ -1,97 +0,0 @@
FROM nginx:alpine
USER root
# Prepare the alpine image with some Jenkins dependencies
################################################################################
RUN apk add --no-cache git \
openssh-client \
curl \
unzip \
bash \
ttf-dejavu \
coreutils \
supervisor \
openjdk8-jre && \
mkdir -p /usr/share/jenkins && \
curl -sSL https://ci.jenkins.io/job/Core/job/jenkins/job/master/lastSuccessfulBuild/artifact/war/target/linux-jenkins.war > /usr/share/jenkins/jenkins.war
################################################################################
# Snippet taken from Dockerfile.alpine
################################################################################
ARG user=jenkins
ARG group=jenkins
ARG uid=1000
ARG gid=1000
ARG http_port=8080
ARG agent_port=50000
ENV JENKINS_HOME /var/jenkins_home
ENV JENKINS_SLAVE_AGENT_PORT ${agent_port}
# Jenkins is run with user `jenkins`, uid = 1000
# If you bind mount a volume from the host or a data container,
# ensure you use the same uid
RUN addgroup -g ${gid} ${group} \
&& adduser -h "$JENKINS_HOME" -u ${uid} -G ${group} -s /bin/bash -D ${user}
# Jenkins home directory is a volume, so configuration and build history
# can be persisted and survive image upgrades
VOLUME /var/jenkins_home
# `/usr/share/jenkins/ref/` contains all reference configuration we want
# to set on a fresh new installation. Use it to bundle additional plugins
# or config file with your custom jenkins Docker image.
RUN mkdir -p /usr/share/jenkins/ref/init.groovy.d
ENV TINI_VERSION 0.14.0
ENV TINI_SHA 6c41ec7d33e857d4779f14d9c74924cab0c7973485d2972419a3b7c7620ff5fd
# Use tini as subreaper in Docker container to adopt zombie processes
RUN curl -fsSL https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini-static-amd64 -o /bin/tini && chmod +x /bin/tini \
&& echo "$TINI_SHA /bin/tini" | sha256sum -c -
ENV JENKINS_UC https://updates.jenkins.io
RUN chown -R ${user} "$JENKINS_HOME" /usr/share/jenkins/ref
# for main web interface:
EXPOSE ${http_port}
# will be used by attached agents:
EXPOSE ${agent_port}
################################################################################
# Grab the latest jenkins.sh from the Jenkins on Docker project
RUN curl -fsSL https://github.com/jenkinsci/docker/raw/master/jenkins.sh > /usr/local/bin/jenkins.sh && \
chmod +x /usr/local/bin/jenkins.sh
RUN curl -fsSL https://github.com/jenkinsci/docker/raw/master/jenkins-support > /usr/local/bin/jenkins-support
# Ensure that all our plugins are bundled properly, along with Groovy bootstrap
# scripts and other build-related content.
################################################################################
ADD build/plugins/*.hpi /usr/share/jenkins/ref/plugins/
RUN for f in /usr/share/jenkins/ref/plugins/*.hpi; do mv $f $f.override ; done
ADD init.groovy.d/*.groovy /usr/share/jenkins/ref/init.groovy.d/
# Link all our files with .override as the suffix to ensure copy_reference_file
# overrides any existing versions on the persistent volume. Basically, we
# always want the init.groovy.d/ in the container to win.
RUN for f in /usr/share/jenkins/ref/init.groovy.d/*.groovy; do mv $f $f.override ; done
RUN mkdir /usr/share/jenkins/ref/userContent
RUN date > /usr/share/jenkins/ref/userContent/builtOn.txt
ADD build/git-refs.txt /usr/share/jenkins/ref/userContent
RUN for f in /usr/share/jenkins/ref/userContent/*.txt; do mv $f $f.override ; done
################################################################################
# Prepare the nginx instance itself
################################################################################
COPY nginx.master.conf /etc/nginx/conf.d/default.conf
################################################################################
# Prepare the supervisor script to run nginx and Jenkins inside the container
################################################################################
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
################################################################################

22
Jenkinsfile vendored
View File

@ -16,28 +16,6 @@ pipeline {
sh 'make generate-k8s'
}
}
stage('Create builder') {
steps {
sh 'make builder'
}
}
stage('Build necessary plugins') {
when { branch 'master' }
steps {
sh 'make plugins'
}
}
stage('Create master container') {
when { branch 'master' }
steps {
sh 'make master'
}
post {
always {
archiveArtifacts artifacts: 'build/git-refs.txt', fingerprint: true
}
}
}
stage('Test') {
steps {
sh 'make check'

View File

@ -1,50 +1,20 @@
IMAGE_PREFIX="rtyler/codevalet"
TF_VARFILE=.terraform.cb.json
TERRAFORM=./scripts/terraform
check: generate validate
$(MAKE) -C webapp check
all: plugins master
generate: generate-k8s agent-templates
generate: generate-k8s
run: webapp
docker-compose up
clean:
rm -f build/git-refs.txt k8/generated
rm -rf k8s/generated
docker-compose down || true
$(MAKE) -C webapp clean
## Build the Jenkins master image
###############################################################
builder: Dockerfile.builder
docker build -t ${IMAGE_PREFIX}-$@ -f Dockerfile.$@ .
master: Dockerfile.master build/git-refs.txt agent-templates
docker build -t ${IMAGE_PREFIX}-$@ -f Dockerfile.$@ .
plugins: ./scripts/build-plugins plugins.txt builder
./scripts/build-plugins
build/git-refs.txt:
./scripts/record-sha1sums
###############################################################
## Handling for agent-templates which is an external repository
###############################################################
agent-templates: build/agent-templates
(cd build/agent-templates && git pull --rebase)
docker run --rm -v $(PWD):$(PWD) -w $(PWD) ruby:2-alpine \
ruby ./scripts/render-agent-templates build/agent-templates
build/agent-templates:
git clone --depth 1 https://github.com/codevalet/agent-templates.git build/agent-templates
###############################################################
## Handle sub-projects
###############################################################
@ -101,6 +71,6 @@ k8s/generated:
###############################################################
.PHONY: clean all plugins master builder plan validate \
.PHONY: clean all plan validate \
deploy generate-k8s deploy-k8s webapp check generate \
agent-templates run tfinit
run tfinit

View File

@ -1,2 +0,0 @@
setup-azure-cloud.groovy
*.class

View File

@ -1,29 +0,0 @@
= Groovy bootstrap scripts for Jenkins
This directory contains a number Groovy-based scripts which will execute when
the Jenkins instances boot up, providing the baseline configuration required
per instance.
== Environment Variables
The environment variables that these scripts need to be present when Jenkins
executes are:
=== GITHUB_USER
The user on link:https://github.com[github.com] who should "own" this instance.
This will automatically set up some permissions for the set `GITHUB_USER`
=== CLIENT_SECRET
The GitHub OAuth "Client Secret" for the OAuth Application which should be used
for authentication against these Jenkins instances.
=== AZURE_TENANT_ID
=== AZURE_SUBSCRIPTION_ID
=== AZURE_CLIENT_ID
=== AZURE_CLIENT_SECRET

View File

@ -1,17 +0,0 @@
#!/usr/bin/env groovy
/* Configure the Datadog plugin for this instance */
import jenkins.model.*
import org.datadog.jenkins.plugins.datadog.DatadogBuildListener
def dog = Jenkins.instance.getDescriptor('org.datadog.jenkins.plugins.datadog.DatadogBuildListener')
if (System.env.get('GITHUB_USER')) {
dog.hostname = "${System.env.get('GITHUB_USER')}.codevalet.io"
}
dog.tagNode = true
dog.apiKey = System.env.get('DATADOG_API_KEY') ?: 'dummy-datadog-api-key'
dog.save()

View File

@ -1,9 +0,0 @@
#!/usr/bin/env groovy
/*
* Set the global quiet period to zero to avoid any delays in provisioning
* infrastructure or executing Pipelines
*/
import jenkins.model.Jenkins
Jenkins.instance.quietPeriod = 0

View File

@ -1,6 +0,0 @@
#!/usr/bin/env groovy
/*
* Disable the CLI by default
*/
jenkins.CLI.get().setEnabled(false)

View File

@ -1,14 +0,0 @@
#!/usr/bin/env groovy
/*
* Set up the CSRF protection which would normally be defaulted in 2.0 , but
* are not in our instances because we're * skipping the setup wizard
*/
import jenkins.model.*
import hudson.security.csrf.*
println "Checking CSRF protection..."
if (Jenkins.instance.crumbIssuer == null) {
println "Enabling CSRF protection"
Jenkins.instance.crumbIssuer = new DefaultCrumbIssuer(true)
}

View File

@ -1,14 +0,0 @@
#!/usr/bin/env groovy
/*
* Restrict the JNLP protocols to only those which should be enabled (modern
* and secure ones)
*/
import jenkins.model.*
import org.kohsuke.stapler.StaplerProxy
import jenkins.security.s2m.AdminWhitelistRule
Jenkins.instance.agentProtocols = ['JNLP4-connect', 'Ping']
Jenkins.instance.save()
Jenkins.instance.getExtensionList(StaplerProxy).get(AdminWhitelistRule).masterKillSwitch = false

View File

@ -1,8 +0,0 @@
#!/usr/bin/env groovy
/*
* Make sure the number of executors available on the master is set to zero for
* security purposes
*/
import jenkins.model.*
Jenkins.instance.setNumExecutors(0)

View File

@ -1,34 +0,0 @@
#!/usr/bin/env groovy
/*
* This file is responsible for setting Global Pipeline configurations to the
* sensible defaults which are necessary
*/
import jenkins.model.*
import jenkins.plugins.git.GitSCMSource
import org.jenkinsci.plugins.workflow.libs.*
import jenkins.model.GlobalConfiguration
import org.jenkinsci.plugins.pipeline.modeldefinition.config.GlobalConfig
/* Set the default Docker label for Declarative Pipeline to .. wait for it .. docker */
GlobalConfig c = GlobalConfiguration.all().find { it instanceof GlobalConfig }
c?.dockerLabel = 'docker'
/* Add our global library properly */
List<LibraryConfiguration> libs = []
['pipeline-library', 'inline-pipeline-secrets'].each {
GitSCMSource source= new GitSCMSource(it, "https://github.com/codevalet/${it}.git",
null, null, null, false)
LibraryConfiguration lib = new LibraryConfiguration(it, new SCMSourceRetriever(source))
lib.implicit = true
lib.defaultVersion = 'master'
libs.add (lib)
}
GlobalLibraries.get().libraries = libs

View File

@ -1,9 +0,0 @@
#!/usr/bin/env groovy
/* Configure the instance's URL based on the GITHUB_USER */
import jenkins.model.*
if (System.env.get('GITHUB_USER')) {
JenkinsLocationConfiguration.get().setUrl("https://${System.env.get('GITHUB_USER')}.codevalet.io/")
}

View File

@ -1,126 +0,0 @@
#!/usr/bin/env groovy
/*
* Set up the Azure VM Cloud plugin.
*
* This file is generated from an ERB template!
*/
import jenkins.model.*
import com.microsoft.azure.vmagent.*
import com.microsoft.azure.util.*
import com.cloudbees.plugins.credentials.*
import com.cloudbees.plugins.credentials.impl.*
import com.cloudbees.plugins.credentials.domains.Domain
final String maxAgents = System.env.get('MAX_AGENTS') ?: '2'
final String cloudName = 'Azure'
final String githubUser = System.env.get('GITHUB_USER') ?: 'max-the-code-monkey'
final String resourceGroup = "azureagents-for-codevalet"
final String credentialsId = 'azure-agents-credential'
final String adminCredentialsId = 'azure-agent-admin-credential'
final String tenantId = System.env.get('AZURE_TENANT_ID') ?: 'dummy-tenant-id'
final String subscriptionId = System.env.get('AZURE_SUBSCRIPTION_ID') ?: 'dummy-subscription-id'
final String clientId = System.env.get('AZURE_CLIENT_ID') ?: 'dummy-client-id'
final String clientSecret = System.env.get('AZURE_CLIENT_SECRET') ?: 'dummy-secret'
CredentialsScope scope = CredentialsScope.valueOf('SYSTEM')
AzureCredentials.ServicePrincipal principle = AzureCredentials.getServicePrincipal(credentialsId)
final String id = java.util.UUID.randomUUID().toString()
final Credentials c = new UsernamePasswordCredentialsImpl(scope,
adminCredentialsId,
adminCredentialsId,
'azureuser',
id)
SystemCredentialsProvider.instance.store.addCredentials(Domain.global(), c)
println ">> Credential: ${id}"
/* If the credentials hasn't already been defined, let's create one! */
if (principle.isBlank()) {
AzureCredentials credential = new AzureCredentials(scope, /* Scope for the credential */
credentialsId, /* */
'Azure credentials for provisioning agent', /* description */
subscriptionId, /* subscriptionId */
clientId, /* clientId */
clientSecret) /* clientSecret */
credential.tenant = tenantId
SystemCredentialsProvider.instance.store.addCredentials(Domain.global(), credential)
}
Jenkins.instance.clouds.clear()
def cloud = Jenkins.instance.clouds.find { it.name == cloudName }
/* Avoid adding the AzureVMCloud over and over and over again */
if (cloud == null) {
cloud = new AzureVMCloud(cloudName, /* Cloud Name */
credentialsId, /* credentials id */
maxAgents, /* Max Agents */
'1200', /* Deployment Timeout (s) */
'existing', /* Resource group reference type */
'', /* New resource group name */
resourceGroup, /* Existing resource group name */
null) /* VM Templates */
Jenkins.instance.clouds.add(cloud)
}
/* Nuke all our templates */
cloud.clearVmTemplates()
final String agentWorkspace = '/home/azureuser/workspace'
def retentionTime = null
def imageReference = null
def vmTemplate = null
def vhd = null
<% agents.each_pair do |name, d| %>
vhd = '<%= d['image']['vhd'] %>'
retentionTime = new AzureVMCloudRetensionStrategy(<%= d['retention'] %>)
imageReference = new AzureVMAgentTemplate.ImageReferenceTypeClass(vhd, vhd, vhd, vhd, vhd)
vmTemplate = new AzureVMAgentTemplate('<%= name %>',
'<%= d['description'] %>', /* description */
'<%= d['labels'].join(' ') %>', /* labels */
'West US', /* location */
'<%= d['size'] %>', /* VM Size */
'existing', /* Storage account Name reference type */
'Standard_LRS', /* Storage account type */
'', /* new storage account name */
'codevaletimages', /* existing storage account name */
'unmanaged', /* disk type */
'<%= d['executors'] %>', /* number of executors */
'NORMAL', /* Usage mode */
'', /* built-in image */
false, /* install git */
false, /* install maven */
false, /* install docker */
'Linux', /* OS type */
'custom', /* image top level type */
false, /* image reference? */
imageReference, /* image reference class */
'SSH', /* agent launch method */
false, /* pre install SSH */
'<%= d['initscript']%>', /* init script */
adminCredentialsId, /* admin credential Id */
'', /* virtual network name */
'', /* virtual network resource group name */
'', /* subnet name */
false, /* use private IP */
'', /* Network security group name */
agentWorkspace, /* agent workspace */
'', /* JVM options */
retentionTime, /* retention time */
false, /* shutdown on idle */
false, /* template disabled */
'', /* template status details */
true, /* execute init script as root */
true /* do not use machine if init fails */
)
vmTemplate.azureCloud = cloud
cloud.addVmTemplate(vmTemplate)
<% end %>

View File

@ -1,19 +0,0 @@
#!/usr/bin/env groovy
/*
* Pre-configure the Git plugin and the default git tooling in Jenkins
*/
import org.jenkinsci.plugins.gitclient.*
import hudson.plugins.git.*
import jenkins.model.Jenkins
def gitConfig = Jenkins.instance.getDescriptor('hudson.plugins.git.GitSCM')
def tools = Jenkins.instance.getDescriptor('hudson.plugins.git.GitTool')
GitTool[] gitTools = new GitTool[1]
gitTools[0] = new JGitTool()
tools.installations = gitTools
tools.save()
gitConfig.globalConfigName = 'max'
gitConfig.globalConfigEmail = 'max@example.com'

View File

@ -1,45 +0,0 @@
#!/usr/bin/env groovy
/*
* Set up the basic GitHub OAuth permissions for this instance
*/
if (System.env.get('SUPER_DANGEROUS_LOCAL_ONLY_DISABLE_AUTH')) {
return
}
import jenkins.model.*
import hudson.security.*
import hudson.model.Item
import org.jenkinsci.plugins.workflow.cps.replay.ReplayAction
import org.jenkinsci.plugins.GithubAuthorizationStrategy
import org.jenkinsci.plugins.GithubSecurityRealm
def authorization = new GlobalMatrixAuthorizationStrategy()
authorization.add(Jenkins.READ, 'Anonymous')
authorization.add(Item.READ, 'Anonymous')
authorization.add(Jenkins.ADMINISTER, 'rtyler')
[
Jenkins.READ,
Item.BUILD,
Item.CANCEL,
Item.CONFIGURE,
Item.CREATE,
Item.DELETE,
Item.DISCOVER,
Item.READ,
ReplayAction.REPLAY,
].each { permission ->
authorization.add(permission, System.env.get('GITHUB_USER') ?: 'rtyler')
}
def realm = new GithubSecurityRealm('https://github.com', /* GitHub web URI */
'https://api.github.com', /* GitHub API URI */
System.env.get('CLIENT_ID') ?: 'f19661554c93f3b11cfe', /* OAuth Client ID */
System.env.get('CLIENT_SECRET') ?: '0672e14addb9f41dec11b5da1219017edfc82a58',/* OAuth Client Secret */
'read:public_repo,user:email' /* OAuth permission scopes */
)
Jenkins.instance.authorizationStrategy = authorization
Jenkins.instance.securityRealm = realm
Jenkins.instance.save()

View File

@ -1,28 +0,0 @@
#
# This nginx configuration is meant to be embedded into a Jenkins master container
# for automatically routing some things
#
# Related to: https://issues.jenkins-ci.org/browse/JENKINS-46706
server {
listen 80;
location = / {
return 301 /blue/pipelines;
}
# Only allow the usage of the Blue Ocean Pipeline creation flow.
# https://github.com/CodeValet/codevalet/issues/10
location = /newJob {
return 301 /blue/organizations/jenkins/create-pipeline;
}
location / {
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080;
}
}

View File

@ -1,8 +0,0 @@
workflow-aggregator-plugin
blueocean-plugin
github-oauth-plugin
azure-vm-agents-plugin
kubernetes-plugin
matrix-auth-plugin
embeddable-build-status-plugin
sentry-plugin

View File

@ -1,85 +0,0 @@
#!/bin/bash
BUILD_DIR=$PWD/build
REPOS_DIR=$BUILD_DIR/repos
SCRIPTS_DIR=$(realpath $(dirname $0))
PLUGINS_OUTPUT_DIR=$BUILD_DIR/plugins
BUILDER_CONTAINER="rtyler/codevalet-builder"
mkdir -p $REPOS_DIR
mkdir -p $PLUGINS_OUTPUT_DIR
declare -A PROCESSED
function cloneWithDependencies() {
if [ ! ${PROCESSED[$1]} ]; then
PROCESSED[$1]="$1"
if [ ! -d $1 ]; then
git clone --depth 1 git://github.com/jenkinsci/$1.git
fi;
for pom in $(find $1 -iname 'pom.xml' -maxdepth 2 -type f); do
(cd $(dirname $pom) && ${SCRIPTS_DIR}/plugins-from-pom 'pom.xml')
done;
for dep in $(find $1 -iname '.plugins.txt' -type f -exec cat {} \; | sort -u); do
cloneWithDependencies "${dep}-plugin"
done;
fi;
}
tty --quiet
if [ $? -eq 0 ]; then
echo "We're interactive, adjusting the Docker arguments accordingly";
TTY_ARGS="-ti";
fi;
pushd $REPOS_DIR
# See https://github.com/jenkinsci/azure-commons-plugin/pull/15
git clone --depth 1 -b jenkins-48636 git://github.com/abayer/azure-commons-plugin.git
# Grab the latest datadog plugin from their org (it's not in jenkinsci)
git clone --depth 1 git://github.com/datadog/jenkins-datadog-plugin.git datadog-plugin
# pubsub-light-module is a plugin but not called a plugin
git clone --depth 1 git://github.com/jenkinsci/pubsub-light-module.git pubsub-light-plugin
# the artifact is called cloudbees-bitbucket-branch-source but the repo isn't
git clone --depth 1 git://github.com/jenkinsci/bitbucket-branch-source-plugin.git cloudbees-bitbucket-branch-source-plugin
git clone --depth 1 git://github.com/jenkinsci/js-libs.git js-libs-plugin
# https://issues.jenkins-ci.org/browse/JENKINS-45668
(cd js-libs-plugin && find . -maxdepth 1 -type d -exec mkdir -p {}/src/main/webapp/jsmodules \;)
for plugin in $(cat $SCRIPTS_DIR/../plugins.txt); do
cloneWithDependencies $plugin
done;
# This was merged into the blueocean-plugin repository but still exists as a tombstone
rm -rf blueocean-pipeline-editor-plugin
set -e
for d in *-plugin; do
pushd $d
if [ -f pom.xml ]; then
echo ">> Building $d"
git pull --rebase
docker run --rm ${TTY_ARGS} -v $HOME/.m2:/root/.m2 \
-v $PWD:/data -w /data ${BUILDER_CONTAINER} mvn install -e -B -DskipTests
fi;
popd
done;
set +e
# Handle an old tombstoned dependency which will not build from source
# anymore :(
# https://github.com/jenkinsci/pipeline-model-definition-plugin/blob/master/pipeline-model-definition/pom.xml#L117-L123
curl https://repo.jenkins-ci.org/releases/org/jenkinsci/plugins/pipeline-model-declarative-agent/1.1.1/pipeline-model-declarative-agent-1.1.1.hpi > $PLUGINS_OUTPUT_DIR/pipeline-model-declarative-agent.hpi
for hpi in $(find . -iname "*.hpi" | grep -v "test-classes" | grep -v "target/plugins/"); do
cp $hpi $PLUGINS_OUTPUT_DIR
done;
popd

View File

@ -1,47 +0,0 @@
#!/usr/bin/env python
import sys
from xml.etree.ElementTree import ElementTree
def main():
document = ElementTree(file=sys.argv[1])
plugins = []
ns = {'mvn' : 'http://maven.apache.org/POM/4.0.0'}
packaging = document.find('mvn:packaging', ns)
if (packaging is not None) and (packaging.text == 'hpi'):
for e in document.findall('mvn:dependencies', ns):
for dep in list(e):
scope = dep.find('mvn:scope', ns)
if scope is None:
optional = dep.find('mvn:optional', ns)
if optional is None:
group = dep.find('mvn:groupId', ns).text
plugin = dep.find('mvn:artifactId', ns).text
# Avoid the github-organization-folder since it's
# tombstoned
if plugin == 'github-organization-folder':
next
try:
['org.jvnet.hudson.plugins', 'org.jenkins-ci.plugins',
'org.jenkinsci.plugins', 'org.jenkins-ci.plugins.icon-shim',
'${project.groupId}', 'io.jenkins.plugins',
'io.jenkins.blueocean',
'org.jenkins-ci.main', 'com.coravy.hudson.plugins.github',
'org.6wind.jenkins', 'org.jenkins-ci.plugins.pipeline-stage-view',
'org.jenkins-ci.ui', 'org.jenkins-ci.plugins.workflow'].index(group)
# Let's only bother with dependencies that are actually Jenkins
# plugins :)
plugins.append(plugin)
except ValueError:
pass
with open('.plugins.txt', 'w+') as fd:
for plugin in plugins:
fd.write(plugin)
fd.write('\n')
if __name__ == '__main__':
main()

View File

@ -1,13 +0,0 @@
#!/bin/bash
mkdir build
OUTPUT_FILE=build/git-refs.txt
echo > $OUTPUT_FILE
for plugin in build/repos/*-plugin; do
echo ">> Record HEAD for ${plugin}";
SHA=$(cd $plugin && git rev-parse HEAD)
echo "${plugin},${SHA}" >> $OUTPUT_FILE
done;

View File

@ -1,22 +0,0 @@
#!/usr/bin/env ruby
require 'erb'
require 'yaml'
repo_dir = ARGV.first
puts ">> Using #{repo_dir} as the agent templates directory"
agents = {}
Dir.glob("#{repo_dir}/**/*.yml").each do |agent|
data = YAML.load(File.read(agent))
name = File.basename(agent, File.extname(agent))
agents[name] = data
end
template = ERB.new(File.read('init.groovy.d/setup-azure-cloud.groovy.erb'))
File.open('init.groovy.d/setup-azure-cloud.groovy', 'w+') do |f|
f.write(template.result)
end

View File

@ -1,19 +0,0 @@
[supervisord]
nodaemon=true
[program:nginx]
command=nginx -g "daemon off;"
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
redirect_stderr=true
[program:jenkins]
command=/usr/local/bin/jenkins.sh
directory=/var/jenkins_home
environment=JENKINS_HOME=/var/jenkins_home,COPY_REFERENCE_FILE_LOG=$JENKINS_HOME/copy_reference_file.log
user=jenkins
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
redirect_stderr=true
startsecs=10