5.8 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	ROSA Ruby On Rails Workshop
Introduction
This document captures the setup steps for a 90-minute, hands-on Ruby On Rails workshop on Openshift.
Within the session, participants will:
Pre-requisites
This guide assumes you have an existing Openshift 4.10+ cluster with cluster admin permissions.
In my case I have a Red Hat OpenShift on AWS (ROSA) cluster provisioned
1 - Preparing the cluster
- 
Log in to the cluster in your terminal with the
occli.oc login --server <URL> --token <TOKEN> 
2 - Deploy Bitbucket
Now that we're logged into the cluster, let's create the namespace to deploy Bitbucket into.
oc new-project bitbucket
Already on project "bitbucket" on server "https://api.rosa-7lpn7.2pqm.p1.openshiftapps.com:6443".
You can add applications to this project with the 'new-app' command. For example, try:
    oc new-app rails-postgresql-example
to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:
    kubectl create deployment hello-node --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 -- /agnhost serve-hostname
Once the namespace is created we can deploy Bitbucket using the official Bitbucket image from Atlassian.
oc --namespace bitbucket new-app --image docker.io/atlassian/bitbucket-server --name bitbucket
--> Found container image 525a6bc (3 days old) from docker.io for "docker.io/atlassian/bitbucket-server"
    * An image stream tag will be created as "bitbucket:latest" that will track this image
--> Creating resources ...
    imagestream.image.openshift.io "bitbucket" created
    deployment.apps "bitbucket" created
    service "bitbucket" created
--> Success
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose service/bitbucket'
    Run 'oc status' to view your app.
Now, let's verify that the Bitbucket pod started successfully.
oc --namespace bitbucket get pods
NAME READY STATUS RESTARTS AGE bitbucket-56d9849bbf-7922z 1/1 Running 0 2m36s
As this is running successfully, let's expose it with a route so that we can access it from our web browser.
oc --namespace bitbucket create route edge bitbucket --service=bitbucket --port=7990
oc --namespace bitbucket get route
route.route.openshift.io/bitbucket created NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD bitbucket bitbucket-bitbucket.apps.rosa-7lpn7.2pqm.p1.openshiftapps.com bitbucket 7990 edge None
Once we open the Bitbucket route in our browser, we need to follow a short setup process manually before we can continue with the rest of our automation.
- Select your language 
English. - Select 
internaland clickNext. 
You'll then be prompted for an Atlassian license key. For the purposes of this workshop, we'll be generating a new trial license here.
Copy the Server ID into the Bitbucket setup screen and click Generate License.
Copy the generated license key into the text box for the Bitbucket license key and click Next.
On the Bitbucket setup screen enter details for your administrative user and click Go to Bitbucket.
3 - Configure Bitbucket
With our Bitbucket server successfully deployed, let's configure it for the workshop.
First step is to create additional users.
source .env
for user in {1..30}; do
  bitbucket_route=$(oc get route --namespace bitbucket | awk '{print $2}'  | tail -n 1)
  echo curl --user "admin:${bitbucket_password}" \
            --header "'Content-Type: application/json'" \
            --data  ""
       "\"https://${bitbucket_route}/rest/api/latest/admin/users?name=user${user}&displayName=user${user}&emailAddress=user${user}%40example.com&password=${bitbucket_user_password}\"" >> users.sh
  cat users.sh
done
chmod +x users.sh && ./users.sh && rm users.sh
Each of these users will be forking a copy of a Ruby on Rails codebase, so let's now create that codebase now.
source .env
bitbucket_route=$(oc get route --namespace bitbucket | awk '{print $2}'  | tail -n 1)
echo curl --user "admin:${bitbucket_password}" \
          --header "'Content-Type: application/json'" \
          --data "'{ \"key\": \"MSD\", \"name\": \"Rails Team\", \"description\": \"Rails!\"}'" \
          "https://${bitbucket_route}/rest/api/latest/projects" > project.sh
echo curl --user "admin:${bitbucket_password}" \
          --header "'Content-Type: application/json'" \
          --data "'{\"name\": \"openstreetmap-website\",\"scmId\": \"git\", \"forkable\": true, \"public\": true }'" \
          "https://${bitbucket_route}/rest/api/latest/projects/${project_key}/repos" >> project.sh
chmod +x project.sh && ./project.sh && rm project.sh
git clone https://github.com/openstreetmap/openstreetmap-website.git
cd openstreetmap-website
git remote set-url origin "https://admin:${bitbucket_password}@${bitbucket_route}/scm/msd/openstreetmap-website.git"
git push -u origin HEAD:master && cd ../ && rm -rf openstreetmap-website