Skip to content

Commit 845ace8

Browse files
committed
Merge pull request #62 from AcalephStorage/release/0.1.4
Release/0.1.4
2 parents 19c5223 + dd112e1 commit 845ace8

24 files changed

+530
-305
lines changed

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM alpine:edge
1+
FROM alpine:3.4
22

33
ENV GOPATH /go
44
ENV SWAGGER_UI /swagger/dist

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ format:
1313
deps:
1414
@echo "--> Getting dependencies..."
1515
@go get -v -d ./...
16-
@go get -v github.com/golang/lint/golint
16+
@go get -v -d github.com/golang/lint/golint
1717

1818
test: format
1919
@echo "--> Testing..."

api/build.go

+4-23
Original file line numberDiff line numberDiff line change
@@ -158,30 +158,11 @@ func (b *BuildResource) create(req *restful.Request, res *restful.Response) {
158158
return
159159
}
160160

161-
switch stage.Type {
162-
case "deploy":
163-
stageStatus.Status = ps.BuildRunning
161+
if _, err := ps.CreateJob(definition, jobInfo, client); err != nil {
164162
stage.UpdateStatus(stageStatus, pipeline, build, b.KVClient, client)
165-
166-
err := stage.Deploy(pipeline, build, client)
167-
if err != nil {
168-
stageStatus.Status = ps.BuildFailure
169-
stage.UpdateStatus(stageStatus, pipeline, build, b.KVClient, client)
170-
msg := fmt.Sprintf("Unable to deploy resouce to kubernetes for %s/%s/builds/%d/stages/%d", pipeline.Owner, pipeline.Repo, build.Number, stage.Index)
171-
jsonError(res, http.StatusInternalServerError, err, msg)
172-
return
173-
}
174-
stageStatus.Status = ps.BuildSuccess
175-
stage.UpdateStatus(stageStatus, pipeline, build, b.KVClient, client)
176-
177-
default:
178-
if _, err := ps.CreateJob(definition, jobInfo); err != nil {
179-
stage.UpdateStatus(stageStatus, pipeline, build, b.KVClient, client)
180-
msg := fmt.Sprintf("Unable to create job for %s/%s/builds/%s/stages/%d", owner, repo, build.Number, 1)
181-
jsonError(res, http.StatusInternalServerError, err, msg)
182-
return
183-
}
184-
163+
msg := fmt.Sprintf("Unable to create job for %s/%s/builds/%s/stages/%d", owner, repo, build.Number, 1)
164+
jsonError(res, http.StatusInternalServerError, err, msg)
165+
return
185166
}
186167

187168
res.WriteEntity(build)

api/stage.go

+3-19
Original file line numberDiff line numberDiff line change
@@ -252,26 +252,10 @@ func (s *StageResource) runStage(pipeline *ps.Pipeline, build *ps.Build, stage *
252252
Timestamp: time.Now().UnixNano(),
253253
}
254254

255-
switch stage.Type {
256-
case "deploy":
257-
stageStatus.Status = ps.BuildRunning
255+
if _, err := ps.CreateJob(definition, jobInfo, scmClient); err != nil {
258256
stage.UpdateStatus(stageStatus, pipeline, build, s.KVClient, scmClient)
259-
err := stage.Deploy(pipeline, build, scmClient)
260-
if err != nil {
261-
stageStatus.Status = ps.BuildFailure
262-
stage.UpdateStatus(stageStatus, pipeline, build, s.KVClient, scmClient)
263-
msg := fmt.Sprintf("Unable to deploy resouce to kubernetes for %s/%s/builds/%s/stages/%d", pipeline.Owner, pipeline.Repo, build.Number, stage.Index)
264-
return err, msg
265-
}
266-
stageStatus.Status = ps.BuildSuccess
267-
stage.UpdateStatus(stageStatus, pipeline, build, s.KVClient, scmClient)
268-
269-
default:
270-
if _, err := ps.CreateJob(definition, jobInfo); err != nil {
271-
stage.UpdateStatus(stageStatus, pipeline, build, s.KVClient, scmClient)
272-
msg := fmt.Sprintf("Unable to create job for %s/%s/builds/%s/stages/%d", pipeline.Owner, pipeline.Repo, build.Number, stage.Index)
273-
return err, msg
274-
}
257+
msg := fmt.Sprintf("Unable to create job for %s/%s/builds/%s/stages/%d", pipeline.Owner, pipeline.Repo, build.Number, stage.Index)
258+
return err, msg
275259
}
276260

277261
return nil, ""

dockerfiles/command-agent/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FROM debian:jessie
22
33

4-
ENV KUBERNETES_VERSION 1.1.7
4+
ENV KUBERNETES_VERSION 1.2.4
55

66
# install curl
77
# download kubectl

dockerfiles/command-agent/run.sh

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/bash
22

33
setup() {
4-
mkdir -p /kontinuous/{src,status}/${PIPELINE_ID}/${BUILD_ID}/${STAGE_ID}
4+
mkdir -p /kontinuous/{src,status}/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}
55
}
66

77
prepare_kube_config() {
@@ -11,7 +11,7 @@ prepare_kube_config() {
1111

1212
wait_for_ready() {
1313
echo "Waiting for ready signal..."
14-
until [[ -f /kontinuous/status/${PIPELINE_ID}/${BUILD_ID}/${STAGE_ID}/ready ]]; do
14+
until [[ -f /kontinuous/status/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}/ready ]]; do
1515
sleep 5
1616
done
1717
}
@@ -39,7 +39,7 @@ deploy(){
3939
return 1
4040
fi
4141

42-
kubectl create -f ${deployFile}
42+
kubectl apply -f ${deployFile}
4343
if [[ "$?" != "0" ]]; then
4444
echo "Deploy Failed. Unable to deploy app."
4545
return 1
@@ -68,7 +68,7 @@ clean(){
6868
run_image() {
6969
local pod_name="$1"
7070
# get which node the current job is running on
71-
local node_name=$(kubectl get pods ${pod_name} -o template --template="{{ .spec.nodeName }}" --namespace=${NAMESPACE})
71+
local node_name=$(kubectl get pods ${pod_name} -o template --template="{{ .spec.nodeName }}" --namespace=${KONTINUOUS_NAMESPACE})
7272

7373
# prepare vars
7474
local commands="`for cmd in ${COMMAND}; do echo \" - ${cmd}\"; done`"
@@ -77,7 +77,7 @@ run_image() {
7777
# do the sed thingy
7878
cp /root/pod_template.yml /tmp/pod.yml
7979
sed -i "s|__POD_NAME__|${pod_name}|g" /tmp/pod.yml
80-
sed -i "s|__NAMESPACE__|${NAMESPACE}|g" /tmp/pod.yml
80+
sed -i "s|__NAMESPACE__|${KONTINUOUS_NAMESPACE}|g" /tmp/pod.yml
8181
sed -i "s|__WORKING_DIR__|${WORKING_DIR}|g" /tmp/pod.yml
8282
sed -i "s|__NODE_NAME__|${node_name}|g" /tmp/pod.yml
8383
sed -i "s|__IMAGE__|${IMAGE}|g" /tmp/pod.yml
@@ -86,17 +86,17 @@ run_image() {
8686
echo " env:" >> /tmp/pod.yml
8787
echo "$env_vars" >> /tmp/pod.yml
8888

89-
kubectl create -f /tmp/pod.yml
89+
kubectl apply -f /tmp/pod.yml
9090
}
9191

9292
generate_result(){
9393
local result="$1"
9494
if [[ "$result" != "0" ]]; then
95-
touch /kontinuous/status/${PIPELINE_ID}/${BUILD_ID}/${STAGE_ID}/fail
95+
touch /kontinuous/status/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}/fail
9696
echo "Build Fail"
9797
exit 1
9898
else
99-
touch /kontinuous/status/${PIPELINE_ID}/${BUILD_ID}/${STAGE_ID}/success
99+
touch /kontinuous/status/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}/success
100100
echo "Build Successful"
101101
exit 0
102102
fi
@@ -109,7 +109,7 @@ wait_for_success() {
109109
local exit_code_line=""
110110
until [[ "${exit_code_line}" != "" ]]; do
111111
sleep 5
112-
exit_code_line=$(kubectl get pods ${pod_name}-cmd -o yaml --namespace="${NAMESPACE}" | grep exitCode)
112+
exit_code_line=$(kubectl get pods ${pod_name}-cmd -o yaml --namespace="${KONTINUOUS_NAMESPACE}" | grep exitCode)
113113
done
114114

115115
local exit_code=$(echo ${exit_code_line} | awk '{print $2}')
@@ -136,7 +136,7 @@ run_command() {
136136
fi
137137

138138
# run image as a pod in the same node as this job
139-
local pod_name=$(kubectl get pods --namespace=${NAMESPACE} --selector="pipeline=${PIPELINE_ID},build=${BUILD_ID},stage=${STAGE_ID}" --no-headers | awk '{print $1}')
139+
local pod_name=$(kubectl get pods --namespace=${KONTINUOUS_NAMESPACE} --selector="pipeline=${KONTINUOUS_PIPELINE_ID},build=${KONTINUOUS_BUILD_ID},stage=${KONTINUOUS_STAGE_ID}" --no-headers | awk '{print $1}')
140140
run_image ${pod_name}
141141

142142
wait_for_success "${pod_name}"
@@ -145,7 +145,7 @@ run_command() {
145145
echo "Command Agent Logs:"
146146
echo "-------------------"
147147
# print logs afterwards
148-
kubectl logs --namespace="${NAMESPACE}" "${pod_name}-cmd"
148+
kubectl logs --namespace="${KONTINUOUS_NAMESPACE}" "${pod_name}-cmd"
149149

150150
# cleanup
151151
kubectl delete -f /tmp/pod.yml || true

dockerfiles/deploy-agent/Dockerfile

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
FROM debian:jessie
2+
3+
4+
ENV KUBERNETES_VERSION 1.2.4
5+
6+
# install curl
7+
# download kubectl
8+
RUN apt-get update && \
9+
apt-get install -y curl && \
10+
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
11+
curl -O https://storage.googleapis.com/kubernetes-release/release/v${KUBERNETES_VERSION}/bin/linux/amd64/kubectl && \
12+
mv kubectl /usr/bin && \
13+
chmod +x /usr/bin/kubectl
14+
15+
ADD kube-config.yml /root/.kube/config
16+
ADD run.sh /usr/bin/deploy-agent
17+
RUN chmod +x /usr/bin/deploy-agent
18+
19+
ENTRYPOINT deploy-agent
+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
kind: Config
3+
apiVersion: v1
4+
clusters:
5+
- name: default
6+
cluster:
7+
server: https://kubernetes.default
8+
certificate-authority: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
9+
contexts:
10+
- name: default
11+
context:
12+
cluster: default
13+
namespace: default
14+
user: admin
15+
current-context: default
16+
users:
17+
- name: admin
18+
user:
19+
token: {{token}}

dockerfiles/deploy-agent/run.sh

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#!/bin/bash
2+
3+
setup() {
4+
mkdir -p /kontinuous/{src,status}/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}
5+
}
6+
7+
8+
prepare_kube_config() {
9+
# replace token for kube config
10+
sed -i "s/{{token}}/$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)/g" /root/.kube/config
11+
}
12+
13+
wait_for_ready() {
14+
echo "Waiting for ready signal..."
15+
until [[ -f /kontinuous/status/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}/ready ]]; do
16+
sleep 5
17+
done
18+
}
19+
20+
21+
deploy(){
22+
echo "Deploying App to Kubernetes Cluster"
23+
if [[ ${DEPLOY_FILES} == "" ]]; then
24+
echo "Resource/s not found."
25+
return exit 1
26+
fi
27+
28+
i=0
29+
mkdir -p /tmp/deployfiles
30+
31+
for fileStr in ${DEPLOY_FILES}
32+
do
33+
echo -n ${fileStr} | base64 -d > /tmp/deployfiles/$i.yml
34+
let "i+=1"
35+
done
36+
37+
38+
kubectl apply -f /tmp/deployfiles
39+
generate_result $?
40+
}
41+
42+
43+
generate_result(){
44+
local result="$1"
45+
if [[ "$result" != "0" ]]; then
46+
touch /kontinuous/status/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}/fail
47+
echo "Deploy Fail"
48+
exit 1
49+
else
50+
touch /kontinuous/status/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}/success
51+
echo "Deploy Successful"
52+
exit 0
53+
fi
54+
}
55+
56+
57+
58+
main() {
59+
setup
60+
prepare_kube_config
61+
wait_for_ready
62+
deploy
63+
}
64+
65+
main $@

dockerfiles/deploy.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/bash -e
22

33
TAG=${TAG:-latest}
4-
IMAGES="kontinuous-agent docker-agent command-agent"
4+
IMAGES="kontinuous-agent docker-agent command-agent deploy-agent"
55

66
echo_plus() {
77
local message=$1

dockerfiles/docker-agent/run.sh

+14-14
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
#!/usr/bin/env sh
22

33
setup() {
4-
mkdir -p /kontinuous/{src,status}/${PIPELINE_ID}/${BUILD_ID}/${STAGE_ID}
4+
mkdir -p /kontinuous/{src,status}/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}
55
}
66

77
wait_for_ready() {
88
echo "Waiting for ready signal..."
9-
until [[ -f /kontinuous/status/${PIPELINE_ID}/${BUILD_ID}/${STAGE_ID}/ready ]]; do
9+
until [[ -f /kontinuous/status/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}/ready ]]; do
1010
sleep 5
1111
done
1212
}
1313

1414
build_image() {
1515
echo "Building docker image..."
16-
docker build -f /kontinuous/src/${PIPELINE_ID}/${BUILD_ID}/${STAGE_ID}/${DOCKERFILE_PATH}/${DOCKERFILE_NAME} -t ${IMAGE_NAME}:${IMAGE_TAG} /kontinuous/src/${PIPELINE_ID}/${BUILD_ID}/${STAGE_ID}/${DOCKERFILE_PATH}
16+
docker build -f /kontinuous/src/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}/${DOCKERFILE_PATH}/${DOCKERFILE_NAME} -t ${IMAGE_NAME}:${IMAGE_TAG} /kontinuous/src/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}/${DOCKERFILE_PATH}
1717
}
1818

1919
push_internal() {
20-
echo "Pushing Image to local registry: ${IMAGE_NAME}:${IMAGE_TAG} ${INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
21-
docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
22-
docker push ${INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
20+
echo "Pushing Image to local registry: ${IMAGE_NAME}:${IMAGE_TAG} ${KONTINUOUS_INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
21+
docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${KONTINUOUS_INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
22+
docker push ${KONTINUOUS_INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
2323
}
2424

2525
pull_internal() {
2626
echo "Pulling Image"
27-
docker pull ${INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
27+
docker pull ${KONTINUOUS_INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
2828
}
2929

3030
push_external() {
@@ -38,23 +38,23 @@ push_external() {
3838
if [[ "$REQUIRE_CREDENTIALS" == "TRUE" ]]; then
3939
docker login --username=${username} --password=${password} --email=${email} ${EXTERNAL_REGISTRY}
4040
fi
41-
docker tag -f ${INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} ${EXTERNAL_REGISTRY}/${EXTERNAL_IMAGE_NAME}:${IMAGE_TAG}
42-
docker tag -f ${INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} ${EXTERNAL_REGISTRY}/${EXTERNAL_IMAGE_NAME}:${BRANCH}
43-
docker tag -f ${INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} ${EXTERNAL_REGISTRY}/${EXTERNAL_IMAGE_NAME}:latest
41+
docker tag -f ${KONTINUOUS_INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} ${EXTERNAL_REGISTRY}/${EXTERNAL_IMAGE_NAME}:${IMAGE_TAG}
42+
docker tag -f ${KONTINUOUS_INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} ${EXTERNAL_REGISTRY}/${EXTERNAL_IMAGE_NAME}:${KONTINUOUS_BRANCH}
43+
docker tag -f ${KONTINUOUS_INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} ${EXTERNAL_REGISTRY}/${EXTERNAL_IMAGE_NAME}:latest
4444
docker push ${EXTERNAL_REGISTRY}/${EXTERNAL_IMAGE_NAME}:${IMAGE_TAG}
45-
docker push ${EXTERNAL_REGISTRY}/${EXTERNAL_IMAGE_NAME}:${BRANCH}
45+
docker push ${EXTERNAL_REGISTRY}/${EXTERNAL_IMAGE_NAME}:${KONTINUOUS_BRANCH}
4646
docker push ${EXTERNAL_REGISTRY}/${EXTERNAL_IMAGE_NAME}:latest
4747
}
4848

4949
fail() {
50-
touch /kontinuous/status/${PIPELINE_ID}/${BUILD_ID}/${STAGE_ID}/fail
50+
touch /kontinuous/status/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}/fail
5151
echo "Build Fail"
5252
exit 1
5353
}
5454

5555
pass() {
56-
echo "${INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}" > /kontinuous/status/${PIPELINE_ID}/${BUILD_ID}/${STAGE_ID}/docker-image
57-
touch /kontinuous/status/${PIPELINE_ID}/${BUILD_ID}/${STAGE_ID}/success
56+
echo "${KONTINUOUS_INTERNAL_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}" > /kontinuous/status/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}/docker-image
57+
touch /kontinuous/status/${KONTINUOUS_PIPELINE_ID}/${KONTINUOUS_BUILD_ID}/${KONTINUOUS_STAGE_ID}/success
5858
echo "Build Successful"
5959
exit 0
6060
}

dockerfiles/kontinuous-agent/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FROM debian:jessie
22
33

4-
ENV KUBERNETES_VERSION 1.1.7
4+
ENV KUBERNETES_VERSION 1.2.4
55
ENV MC_VERSION release
66

77
# install curl and git

0 commit comments

Comments
 (0)