Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
configuration
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
configuration
Commits
168303c8
Commit
168303c8
authored
Aug 10, 2015
by
Jesse Zoldak
Committed by
Ben Patterson
Aug 17, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Create a jenkins worker with sitespeedio on it.
parent
8381bbcc
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
294 additions
and
0 deletions
+294
-0
playbooks/edx-east/jenkins_worker_sitespeedio.yml
+20
-0
playbooks/roles/jenkins_worker_sitespeed/defaults/main.yml
+15
-0
playbooks/roles/jenkins_worker_sitespeed/meta/main.yml
+4
-0
playbooks/roles/jenkins_worker_sitespeed/tasks/java.yml
+3
-0
playbooks/roles/jenkins_worker_sitespeed/tasks/main.yml
+15
-0
playbooks/roles/jenkins_worker_sitespeed/tasks/packer.yml
+8
-0
playbooks/roles/jenkins_worker_sitespeed/tasks/python.yml
+6
-0
playbooks/roles/jenkins_worker_sitespeed/tasks/system.yml
+41
-0
playbooks/roles/jenkins_worker_sitespeed/tasks/test.yml
+26
-0
playbooks/roles/jenkins_worker_sitespeed/templates/github_post_status.py.j2
+96
-0
util/packer/jenkins_worker_sitespeedio.json
+60
-0
No files found.
playbooks/edx-east/jenkins_worker_sitespeedio.yml
0 → 100644
View file @
168303c8
# Configure a Jenkins worker instance
# This has all the requirements to run sitespeedio,
# but not the Jenkins Java app, or edx-platform.
-
name
:
Configure instance(s)
hosts
:
jenkins_worker_sitespeedio
sudo
:
True
gather_facts
:
True
vars
:
mongo_enable_journal
:
False
serial_count
:
1
serial
:
"
{{
serial_count
}}"
vars_files
:
-
roles/edxapp/defaults/main.yml
-
roles/ora/defaults/main.yml
-
roles/xqueue/defaults/main.yml
-
roles/xserver/defaults/main.yml
-
roles/forum/defaults/main.yml
roles
:
-
jenkins_worker_sitespeed
playbooks/roles/jenkins_worker_sitespeed/defaults/main.yml
0 → 100644
View file @
168303c8
---
jenkins_user
:
"
jenkins"
jenkins_group
:
"
jenkins"
jenkins_home
:
/home/jenkins
# repo for nodejs
jenkins_chrislea_ppa
:
"
ppa:chris-lea/node.js"
# System packages
jenkins_debian_pkgs
:
-
nodejs
-
pkg-config
# packer direct download URL
packer_url
:
"
https://dl.bintray.com/mitchellh/packer/0.6.1_linux_amd64.zip"
playbooks/roles/jenkins_worker_sitespeed/meta/main.yml
0 → 100644
View file @
168303c8
---
dependencies
:
-
common
-
role
:
sitespeedio
playbooks/roles/jenkins_worker_sitespeed/tasks/java.yml
0 → 100644
View file @
168303c8
---
-
name
:
Install Java
apt
:
pkg=openjdk-7-jre-headless state=present
playbooks/roles/jenkins_worker_sitespeed/tasks/main.yml
0 → 100644
View file @
168303c8
---
# jenkins
#
# Provision a Jenkins instance.
#
# Parameters:
# `jenkins_user`: jenkins
# `jenkins_home`: /var/lib/jenkins
# `jenkins_user_home`: /home/jenkins
-
include
:
packer.yml
-
include
:
system.yml
-
include
:
python.yml
-
include
:
java.yml
-
include
:
test.yml
playbooks/roles/jenkins_worker_sitespeed/tasks/packer.yml
0 → 100644
View file @
168303c8
---
-
name
:
Download packer
shell
:
"
curl
-L
{{
packer_url
}}
-o
/var/tmp/packer.zip"
args
:
creates
:
/var/tmp/packer.zip
-
name
:
Unzip packer
unarchive
:
src=/var/tmp/packer.zip dest=/usr/local/bin copy=no
playbooks/roles/jenkins_worker_sitespeed/tasks/python.yml
0 → 100644
View file @
168303c8
---
# Install requests library so we can use the
# edx-sitespeed session cookie saver.
-
name
:
Install requests Python library
pip
:
name=requests state=present
playbooks/roles/jenkins_worker_sitespeed/tasks/system.yml
0 → 100644
View file @
168303c8
---
-
name
:
Create jenkins group
group
:
name={{ jenkins_group }} state=present
# The Jenkins account needs a login shell because Jenkins uses scp
-
name
:
Add the jenkins user to the group and configure shell
user
:
name={{ jenkins_user }} append=yes group={{ jenkins_group }} shell=/bin/bash
# Because of a bug in the latest release of the EC2 plugin
# we need to use a key generated by Amazon (not imported)
# To satisfy this, we allow users to log in as Jenkins
# using the same keypair the instance was started with.
-
name
:
Create .ssh directory
file
:
path={{ jenkins_home }}/.ssh state=directory
owner={{ jenkins_user }} group={{ jenkins_group }}
ignore_errors
:
yes
-
name
:
Copy ssh keys for jenkins
command
:
cp /home/ubuntu/.ssh/authorized_keys /home/{{ jenkins_user }}/.ssh/authorized_keys
ignore_errors
:
yes
-
name
:
Set key permissions
file
:
path={{ jenkins_home }}/.ssh/authorized_keys
owner={{ jenkins_user }} group={{ jenkins_group }} mode=400
ignore_errors
:
yes
# adding chris-lea nodejs repo
-
name
:
add ppas for current versions of nodejs
apt_repository
:
repo="{{ jenkins_chrislea_ppa }}"
-
name
:
Install system packages
apt
:
pkg={{','.join(jenkins_debian_pkgs)}}
state=present update_cache=yes
# Need to add Github to known_hosts to avoid
# being prompted when using git through ssh
-
name
:
Add github.com to known_hosts if it does not exist
shell
:
>
ssh-keygen -f {{ jenkins_home }}/.ssh/known_hosts -H -F github.com | grep -q found || ssh-keyscan -H github.com > {{ jenkins_home }}/.ssh/known_hosts
playbooks/roles/jenkins_worker_sitespeed/tasks/test.yml
0 → 100644
View file @
168303c8
---
# Tests for this role
# Set up #
# To get a baseline comparison for timestamp comparisons
# create a testfile and register its stat info
-
name
:
Create test file
file
:
path=testfile state=touch
-
name
:
Stat test file
stat
:
path=testfile
register
:
testfile
# Tests #
-
name
:
Verify java cmd is using v 1.7
shell
:
java -version
register
:
java_version
-
assert
:
that
:
-
"
'1.7.0'
in
java_version.stderr"
# Tear Down #
-
name
:
Remove test file
file
:
path=testfile state=absent
playbooks/roles/jenkins_worker_sitespeed/templates/github_post_status.py.j2
0 → 100644
View file @
168303c8
#!/usr/bin/env python
"""
Update the status of a GitHub commit.
"""
import
sys
import
requests
import
json
from
textwrap
import
dedent
# The Ansible script will fill in the GitHub OAuth token.
# That way, we can give the jenkins user on the worker
# execute-only access to this script, ensuring that
# the jenkins user cannot retrieve the token.
GITHUB_OAUTH_TOKEN
=
"{{ github_oauth_token }}"
USAGE
=
"Usage: {0} ORG REPO SHA STATUS TARGET_URL DESCRIPTION CONTEXT"
VALID_STATUS_LIST
=
[
'pending'
,
'success'
,
'error'
,
'failure'
]
def
parse_args
(
arg_list
):
"""
Parse the list of arguments, returning a dict.
Prints an error message and exits if the arguments are invalid.
"""
if
len
(
arg_list
)
!=
8
:
print
USAGE
.
format
(
arg_list
[
0
])
exit
(
1
)
# Check that the build status is valid
status
=
arg_list
[
4
]
if
not
status
in
VALID_STATUS_LIST
:
print
"Invalid status: must be one of {0}"
.
format
(
", "
.
join
(
VALID_STATUS_LIST
))
exit
(
1
)
return
{
'org'
:
arg_list
[
1
],
'repo'
:
arg_list
[
2
],
'sha'
:
arg_list
[
3
],
'status'
:
arg_list
[
4
],
'target_url'
:
arg_list
[
5
],
'description'
:
arg_list
[
6
],
'context'
:
arg_list
[
7
],
}
def
post_status
(
org
,
repo
,
sha
,
status
,
target_url
,
description
,
context
):
"""
Post a new status to GitHub.
See http://developer.github.com/v3/repos/statuses/ for details.
Prints an error message and exits if unsuccessful.
"""
url
=
"https://api.github.com/repos/{0}/{1}/statuses/{2}?access_token={3}"
.
format
(
org
,
repo
,
sha
,
GITHUB_OAUTH_TOKEN
)
params
=
{
'state'
:
status
,
'target_url'
:
target_url
,
'description'
:
description
,
'context'
:
context
,
}
response
=
requests
.
post
(
url
,
data
=
json
.
dumps
(
params
))
if
response
.
status_code
!=
201
:
print
dedent
(
"""
Could not post status:
HTTP response code is {0}
Content: {1}
"""
)
.
format
(
response
.
status_code
,
response
.
text
)
.
strip
()
exit
(
1
)
def
main
():
"""
Post the status to GitHub.
"""
if
not
GITHUB_OAUTH_TOKEN
:
print
"No GitHub Oauth token configured."
exit
(
1
)
arg_dict
=
parse_args
(
sys
.
argv
)
post_status
(
arg_dict
[
'org'
],
arg_dict
[
'repo'
],
arg_dict
[
'sha'
],
arg_dict
[
'status'
],
arg_dict
[
'target_url'
],
arg_dict
[
'description'
],
arg_dict
[
'context'
],
)
if
__name__
==
"__main__"
:
main
()
util/packer/jenkins_worker_sitespeedio.json
0 → 100644
View file @
168303c8
{
"variables"
:
{
"aws_access_key"
:
"{{env `AWS_ACCESS_KEY_ID`}}"
,
"aws_secret_key"
:
"{{env `AWS_SECRET_ACCESS_KEY`}}"
,
"playbook_remote_dir"
:
"/tmp/packer-edx-playbooks"
,
"ami"
:
"{{env `JENKINS_WORKER_AMI`}}"
},
"builders"
:
[{
"type"
:
"amazon-ebs"
,
"access_key"
:
"{{user `aws_access_key`}}"
,
"secret_key"
:
"{{user `aws_secret_key`}}"
,
"ami_name"
:
"jenkins_worker_sitespeedio-{{isotime | clean_ami_name}}"
,
"instance_type"
:
"m3.large"
,
"region"
:
"us-east-1"
,
"source_ami"
:
"{{user `ami`}}"
,
"ssh_username"
:
"ubuntu"
,
"ami_description"
:
"jenkins worker sitespeedio"
,
"iam_instance_profile"
:
"jenkins-worker"
,
"security_group_id"
:
"sg-75af5e18"
}],
"provisioners"
:
[{
"type"
:
"shell"
,
"inline"
:
[
"rm -rf {{user `playbook_remote_dir`}}"
,
"mkdir {{user `playbook_remote_dir`}}"
]
},
{
"type"
:
"file"
,
"source"
:
"../../playbooks/run_role.yml"
,
"destination"
:
"{{user `playbook_remote_dir`}}/run_role.yml"
},
{
"type"
:
"file"
,
"source"
:
"../../playbooks/roles"
,
"destination"
:
"{{user `playbook_remote_dir`}}/roles"
},
{
"type"
:
"file"
,
"source"
:
"../../playbooks/edx-east"
,
"destination"
:
"{{user `playbook_remote_dir`}}/edx-east"
},
{
"type"
:
"file"
,
"source"
:
"../../requirements.txt"
,
"destination"
:
"{{user `playbook_remote_dir`}}/requirements.txt"
},
{
"type"
:
"shell"
,
"inline"
:
[
"sudo add-apt-repository ppa:git-core/ppa -y"
]
},
{
"type"
:
"shell"
,
"inline"
:
[
"sudo apt-get update"
]
},
{
"type"
:
"shell"
,
"inline"
:
[
"sudo apt-get -y install git-core"
]
},
{
"type"
:
"shell"
,
"inline"
:
[
"cd {{user `playbook_remote_dir`}}"
,
"virtualenv packer-venv"
,
". packer-venv/bin/activate"
,
"pip install -q -r requirements.txt"
,
"echo '[jenkins_worker_sitespeedio]' > inventory.ini"
,
"echo 'localhost' >> inventory.ini"
,
"ansible-playbook edx-east/jenkins_worker_sitespeedio.yml -i inventory.ini -c local -vvvv"
]
}]
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment