Home - Jimmy-Xu/jenkins-hypercli-image GitHub Wiki
How to integrate Jenkins with Hyper_
Use Case
- Project source code is hosted on GitHub
- Jenkins server(with hyper cli installed) is hosted on Hyper_
- Use Jenkins job to build(pull,make,test and upload) project in container which hosted on Hyper_
- Start Jenkins build when a change is pushed to GitHub
- When Jenkins start build, a new Hyper_ container will be created
- The whole build process(
pull code-> unit-test-> make-> integration-test-> upload) will be done in this Hyper_ container - If Jenkins build successfully, the result(binary archive file) will be uploaded to AWS S3
- Finally, the Hyper_ container will be destroy
Solution
There are two ways to integrate Jenkins with Hyper_
- Jenkins + hyper-plugin ( require hyper api for java, not ready )
- Jenkins + hyper cli ( require hyper command line )
This demo will show the 2nd way.
Here is the diagram
assets/jenkins_with_hypercli.PNG
Prepare
Account
Example project
jenkins-hyper-example-app
- Description:
- this is a golang example project, output a binary file "reverse"
- usage:
./reverse hello world, outputdlrow olleh
- usage:
- this project will be build(
pull code-> unit-test-> make-> integration-test-> upload) in a container with a golang env - there is a pre-build image( hyperhq/jenkins-hyper-example-builder ) for build this project
- this is a golang example project, output a binary file "reverse"
- Source Code(public repo): https://github.com/hyperhq/jenkins-hyper-example-app
Docker image
- Jenkins server
- The image
hyperhq/jenkins-hypercli:2.10is base on jenkinsci/jenkins:2.10. - There is a hyper cli installed in it(
use hyper cli to run temporary container to build project). - This is the Dockerfile.
- The image
- Build env for golang project
- This image
hyperhq/jenkins-hyper-example-builder:latest) is base on golang:1.5. - There is a awscli installed in it(
use aws s3 cli to upload binary archive). - This is the Dockerfile.
- This image
Step by Step
Step 1. Run jenkins server on Hyper_
- Require:
- Hyper_ credential
- hyper cli
- image on docker hub: hyperhq/jenkins-hypercli:2.10
Run the following command in your local HostOS:
// allocate public ip
$ hyper fip allocate 1
23.236.114.227
// create volume
$ hyper volume create --name jenkins-data
// run jenkins container(use Hyper_ Credential here)
$ ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxx
$ SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxx
$ hyper run -d --name jenkins-hyper-demo \
--size=l \
-v jenkins-data:/var/jenkins_home \
-e ACCESS_KEY=$ACCESS_KEY \
-e SECRET_KEY=$SECRET_KEY \
hyperhq/jenkins-hypercli:2.10
// associate public ip to jenkins container
$ hyper fip associate 23.236.114.227 jenkins-hyper-demo
// test hypercli in jenkins container(show tenantid of Hyper_)
$ hyper exec -it jenkins-hyper-demo hyper info | grep ID
ID: 56bfa4e8063c4872axxxxxxxxxxxxxxx
// get Jenkins unlock password
$ hyper logs jenkins-hyper-demo
...
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
e85299cb69274de48f5a09xxxxxxxxxxxxxx
...
$ hyper ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES PUBLIC IP
60aaf8d60c4d hyperhq/jenkins-hypercli:2.10 "/bin/tini -- /usr/lo" 11 hours ago Up 11 hours 0.0.0.0:8080->8080/tcp,... jenkins-hyper-demo 23.236.114.227
Of course, the Jenkins server don't have to be hosted on Hyper_.
The key is to install Jenkins and hyper cli together.
For example, you can run the Jenkins server with docker on your own host.
Here is an example run jenkins server with docker
$ mkdir -p $(pwd)/jenkins-data
$ ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxx
$ SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxx
$ docker run -d --name jenkins-hyper-demo \
-v $(pwd)/jenkins-data:/var/jenkins_home \
-p 8080:8080 \
-p 50000:50000 \
-e ACCESS_KEY=$ACCESS_KEY \
-e SECRET_KEY=$SECRET_KEY \
hyperhq/jenkins-hypercli:2.10
//get tenantid to test the connection to Hyper_
$ docker exec -it jenkins-hyper-demo hyper info | grep ID
But if you want to receive GitHub webhook to trigger Jenkins to start build, you need a public ip for this container.
Step 2. Config Jenkins
open Jenkins web ui: http://23.236.114.227:8080
2.1 initialize Jenkins(first time)
Unlock Jenkins(with unlock password)
-> Customize Jenkins(install suggested plugins)
-> Create First Admin User
-> Jenkins is ready!
2.2 add github server
Manage Jenkins -> Configure System -> GitHub
-> Add Github Server
-> Add Credentials (kind="Secret text", Secret=<github personal access token>)
-> Test connection
-> Manage hooks(checked)
2.3 create new job for build example project
- Require:
- AWS S3 credential
- S3 Bucket
New Item -> Freestyle project, input item name: "demo"
-> Source Code Management
Repository URL="https://github.com/hyperhq/jenkins-hyper-example-app",
Branch="*/master"
-> Build Triggers
Build when a change is pushed to GitHub(checked)
-> Build
-> Execute shell
Command:
The following is the content of Command:
### prepare
# remove old container
(hyper ps -a | grep jenkins-hyper-example-builder) && hyper rm -f jenkins-hyper-example-builder
# pull new image
hyper pull hyperhq/jenkins-hyper-example-builder
### start new container (set AWS S3 Credential and S3 Bucket here)
AWS_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxx
AWS_SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxx
AWS_S3_BUCKET=jenkins-hyper-example-app
hyper run -d --name jenkins-hyper-example-builder \
--size=l \
-e AWS_ACCESS_KEY=$AWS_ACCESS_KEY \
-e AWS_SECRET_KEY=$AWS_SECRET_KEY \
-e AWS_S3_BUCKET=$AWS_S3_BUCKET \
hyperhq/jenkins-hyper-example-builder
### start deploy in container ( unit-test -> make -> integration-test -> upload )
# clone source from github
hyper exec -i jenkins-hyper-example-builder /step.sh clone
# start deploy
hyper exec -i jenkins-hyper-example-builder /go/src/github.com/hyperhq/jenkins-hyper-example-app/auto.sh
### clear container
hyper stop jenkins-hyper-example-builder
hyper rm jenkins-hyper-example-builder
Step 3. Trigger Build
//trigger by manual
click "Build Now" link.
//trigger by github webhook
just push change to GitHub
Step 4. View job result
Build History -> Console Output