Skip to content
This repository was archived by the owner on Oct 11, 2019. It is now read-only.

Commit 24b642b

Browse files
authored
Merge pull request #39 from keptn/release-0.3.0
#341 Release 0.3.0
2 parents cf5e0ba + 39fb06e commit 24b642b

25 files changed

+474
-257
lines changed

.snyk

-8
This file was deleted.

.travis.yml

+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
sudo: true
2+
dist: xenial
3+
language: node_js
4+
node_js:
5+
- '10'
6+
services:
7+
- docker
8+
before_install:
9+
- export TZ=Europe/Vienna
10+
- SERVICE_IMAGE=keptn/jenkins-service
11+
- JENKINS_IMAGE=keptn/jenkins
12+
- REGISTRY_USER=jbraeuer
13+
- SERVICE_VERSION="$(cat version | tr -d '[:space:]')"
14+
- JENKINS_VERSION="$(cat ./docker-jenkins/version | tr -d '[:space:]')"
15+
- JENKINS_FOLDER="docker-jenkins"
16+
- DATE="$(date +'%Y%m%d.%H%M')"
17+
- GIT_SHA="$(git rev-parse --short HEAD)"
18+
- echo "$REGISTRY_PASSWORD" | docker login --username $REGISTRY_USER --password-stdin
19+
- REPO_URL="$(git remote get-url --all origin)"
20+
- LAST_COMMIT="$(git log -1 --oneline)"
21+
- CHANGED_FILES=($(git diff --name-only $TRAVIS_COMMIT_RANGE | paste -sd "," ) )
22+
- echo "Changed files>$CHANGED_FILES"
23+
- ./writeManifest.sh
24+
- cp MANIFEST ./docker-jenkins/MANIFEST
25+
- cat MANIFEST
26+
- cat ./docker-jenkins/MANIFEST
27+
- npm install
28+
jobs:
29+
include:
30+
- stage: feature/bug
31+
if: branch =~ ^feature.*$ OR branch =~ ^bug.*$ OR branch =~ ^hotfix.*$
32+
script:
33+
- echo $TRAVIS_BUILD_STAGE_NAME
34+
- echo "Build jenkins-service"
35+
- TYPE="$(echo $TRAVIS_BRANCH | cut -d'/' -f1)"
36+
- NUMBER="$(echo $TRAVIS_BRANCH | cut -d'/' -f2)"
37+
- docker build . -t "${SERVICE_IMAGE}:${GIT_SHA}"
38+
- docker tag "${SERVICE_IMAGE}:${GIT_SHA}" "${SERVICE_IMAGE}:${TYPE}.${NUMBER}.${DATE}"
39+
- docker push "${SERVICE_IMAGE}:${GIT_SHA}"
40+
- docker push "${SERVICE_IMAGE}:${TYPE}.${NUMBER}.${DATE}"
41+
- |
42+
if [[ $CHANGED_FILES == *"${JENKINS_FOLDER}"* ]]; then
43+
echo "Build Jenkins image"
44+
cd docker-jenkins
45+
docker build . -t "${JENKINS_IMAGE}:${GIT_SHA}"
46+
docker tag "${JENKINS_IMAGE}:${GIT_SHA}" "${JENKINS_IMAGE}:${TYPE}.${NUMBER}.${DATE}"
47+
docker push "${JENKINS_IMAGE}:${GIT_SHA}"
48+
docker push "${JENKINS_IMAGE}:${TYPE}.${NUMBER}.${DATE}"
49+
fi
50+
- stage: develop
51+
if: branch = develop AND NOT type = pull_request
52+
script:
53+
- echo $TRAVIS_BUILD_STAGE_NAME
54+
- echo "Build jenkins-service"
55+
- docker build . -t "${SERVICE_IMAGE}:${GIT_SHA}"
56+
- docker tag "${SERVICE_IMAGE}:${GIT_SHA}" "${SERVICE_IMAGE}:${DATE}"
57+
- docker tag "${SERVICE_IMAGE}:${GIT_SHA}" "${SERVICE_IMAGE}:latest"
58+
- docker push "${SERVICE_IMAGE}:${GIT_SHA}"
59+
- docker push "${SERVICE_IMAGE}:${DATE}"
60+
- docker push "${SERVICE_IMAGE}:latest"
61+
- |
62+
if [[ $CHANGED_FILES == *"${JENKINS_FOLDER}"* ]]; then
63+
echo "Build Jenkins image"
64+
cd docker-jenkins
65+
docker build . -t "${JENKINS_IMAGE}:${GIT_SHA}"
66+
docker tag "${JENKINS_IMAGE}:${GIT_SHA}" "${JENKINS_IMAGE}:${DATE}"
67+
docker tag "${JENKINS_IMAGE}:${GIT_SHA}" "${JENKINS_IMAGE}:latest"
68+
docker push "${JENKINS_IMAGE}:${GIT_SHA}"
69+
docker push "${JENKINS_IMAGE}:${DATE}"
70+
docker push "${JENKINS_IMAGE}:latest"
71+
fi
72+
- stage: release-branch
73+
if: branch =~ ^release.*$ AND NOT type = pull_request
74+
script:
75+
- echo $TRAVIS_BUILD_STAGE_NAME
76+
- docker build . -t "${SERVICE_IMAGE}:${GIT_SHA}"
77+
- docker tag "${SERVICE_IMAGE}:${GIT_SHA}" "${SERVICE_IMAGE}:${SERVICE_VERSION}.${DATE}"
78+
- docker tag "${SERVICE_IMAGE}:${GIT_SHA}" "${SERVICE_IMAGE}:${SERVICE_VERSION}.latest"
79+
- docker push "${SERVICE_IMAGE}:${GIT_SHA}"
80+
- docker push "${SERVICE_IMAGE}:${SERVICE_VERSION}.${DATE}"
81+
- docker push "${SERVICE_IMAGE}:${SERVICE_VERSION}.latest"
82+
- echo "Build Jenkins image"
83+
- cd docker-jenkins
84+
- docker build . -t "${JENKINS_IMAGE}:${GIT_SHA}"
85+
- docker tag "${JENKINS_IMAGE}:${GIT_SHA}" "${JENKINS_IMAGE}:${JENKINS_VERSION}.${DATE}"
86+
- docker tag "${JENKINS_IMAGE}:${GIT_SHA}" "${JENKINS_IMAGE}:${JENKINS_VERSION}.latest"
87+
- docker push "${JENKINS_IMAGE}:${GIT_SHA}"
88+
- docker push "${JENKINS_IMAGE}:${JENKINS_VERSION}.${DATE}"
89+
- docker push "${JENKINS_IMAGE}:${JENKINS_VERSION}.latest"
90+
- stage: master
91+
if: branch = master AND NOT type = pull_request
92+
script:
93+
- echo $TRAVIS_BUILD_STAGE_NAME
94+
- docker build . -t "${SERVICE_IMAGE}:${SERVICE_VERSION}"
95+
- docker push "${SERVICE_IMAGE}:${SERVICE_VERSION}"
96+
- echo "Build Jenkins image"
97+
- cd docker-jenkins
98+
- docker build . -t "${JENKINS_IMAGE}:${JENKINS_VERSION}"
99+
- docker push "${JENKINS_IMAGE}:${JENKINS_VERSION}"

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ RUN npm run build-ts
2424
USER myuser
2525

2626
# Start the app
27-
CMD ["/usr/local/bin/npm", "start"]
27+
CMD ["sh", "-c", "cat MANIFEST && /usr/local/bin/npm start"]

MANIFEST

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
##########
2+
branch: MANIFEST_BRANCH
3+
repository: MANIFEST_REPOSITORY
4+
commitlink: MANIFEST_REPOSITORY/commit/MANIFEST_COMMIT
5+
repolink: MANIFEST_REPOSITORY/tree/MANIFEST_COMMIT
6+
travisbuild: MANIFEST_TRAVIS_JOB_URL
7+
timestamp: MANIFEST_DATE
8+
##########

README.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
[![Build Status](https://travis-ci.org/keptn/jenkins-service.svg?branch=master)](https://travis-ci.org/keptn/jenkins-service)
2+
13
# Keptn Jenkins Service
24

35
This service is designed to use Jenkins for executing various continuous delivery tasks. Thus, this service can make use of Jenkins jobs to:
@@ -18,6 +20,7 @@ During the setup of the Jenkins, a secret is created that contains key-value pai
1820

1921
## Docker Jenkins
2022
The `docker-jenkins` folder contains a `Dockerfile` and all artifacts for building the Jenkins container image. Characteristics of this Jenkins image are:
23+
* **Performance Signature Plugin 3.1.1**
2124
* **Jenkins jobs**:
2225
* deploy
2326
* run_test
@@ -26,19 +29,17 @@ The `docker-jenkins` folder contains a `Dockerfile` and all artifacts for buildi
2629
## Install service <a id="install"></a>
2730

2831
1. To install the service, specify values for the following parameters:
29-
* REGISTRY_URI - URI of the container registry
32+
* REGISTRY_URL - URL of the container registry
3033
* JENKINS_USER - Jenkins user
3134
* JENKINS_PASSWORD - Password of Jenkins user
3235
* GITHUB_USER_EMAIL - Email of GitHub user
3336
* GITHUB_ORGANIZATION - GitHub organization used by keptn
3437
* GITHUB_PERSONAL_ACCESS_TOKEN - Personal access token from GitHub user
35-
* DT_API_TOKEN (optional) - Dynatrace API token
36-
* DT_TENANT_URL (optional) - Dynatrace tenant URL
3738

3839
1. Run the `deploy.sh` script as shown below:
3940

4041
```console
41-
$ ./deploy.sh REGISTRY_URI JENKINS_USER JENKINS_PASSWORD GITHUB_USER_EMAIL GITHUB_ORGANIZATION GITHUB_PERSONAL_ACCESS_TOKEN DT_API_TOKEN DT_TENANT_URL
42+
$ ./deploy.sh $REGISTRY_URL $JENKINS_USER $JENKINS_PASSWORD $GITHUB_USER_NAME $GITHUB_USER_EMAIL $GITHUB_ORGANIZATION $GITHUB_PERSONAL_ACCESS_TOKEN
4243
```
4344

4445
1. To verify the installation, execute the following `kubectl` commands:
@@ -73,4 +74,4 @@ The `docker-jenkins` folder contains a `Dockerfile` and all artifacts for buildi
7374

7475
```console
7576
$ kubectl delete -f ./config/gen/service.yml
76-
```
77+
```

config/jenkins/k8s-jenkins-deployment.yml

+1-5
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ spec:
6969
spec:
7070
containers:
7171
- name: jenkins
72-
image: keptn/jenkins:0.4.1
72+
image: keptn/jenkins:0.6.0
7373
imagePullPolicy: Always
7474
env:
7575
- name: GITHUB_USER_EMAIL
@@ -78,10 +78,6 @@ spec:
7878
value: GITHUB_ORGANIZATION_PLACEHOLDER
7979
- name: DOCKER_REGISTRY_IP
8080
value: DOCKER_REGISTRY_IP_PLACEHOLDER
81-
- name: DT_TENANT_URL
82-
value: DT_TENANT_URL_PLACEHOLDER
83-
- name: DT_API_TOKEN
84-
value: DT_API_TOKEN_PLACEHOLDER
8581
ports:
8682
- containerPort: 8080
8783
- containerPort: 50000

config/service/service.yaml

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ kind: Service
55
metadata:
66
name: jenkins-service
77
namespace: keptn
8+
labels:
9+
serving.knative.dev/visibility: cluster-local
810
spec:
911
runLatest:
1012
configuration:
@@ -15,7 +17,7 @@ spec:
1517
autoscaling.knative.dev/minScale: "1"
1618
spec:
1719
container:
18-
image: keptn/jenkins-service:0.1.0
20+
image: keptn/jenkins-service:0.3.0
1921
env:
2022
- name: JENKINS_URL
2123
valueFrom:

deploy.sh

+68-56
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,93 @@
1-
#!/bin/sh
1+
#!/bin/bash
2+
23
REGISTRY_URL=$1
34
JENKINS_USER=$2
45
JENKINS_PASSWORD=$3
56
GITHUB_USER_NAME=$4
67
GITHUB_USER_EMAIL=$5
78
GITHUB_ORGANIZATION=$6
89
GITHUB_PERSONAL_ACCESS_TOKEN=$7
9-
DT_API_TOKEN=$8
10-
DT_TENANT_URL=$9
1110

12-
# Deploy Jenkins - see keptn/install/setupInfrastructure.sh:
11+
source ./deploy_utils.sh
12+
13+
# Deploy Jenkins
1314
rm -f config/jenkins/gen/k8s-jenkins-deployment.yml
1415

15-
export GATEWAY=$(kubectl describe svc istio-ingressgateway -n istio-system | grep "LoadBalancer Ingress:" | sed 's~LoadBalancer Ingress:[ \t]*~~')
16+
GATEWAY=$(kubectl describe svc istio-ingressgateway -n istio-system | grep "LoadBalancer Ingress:" | sed 's~LoadBalancer Ingress:[ \t]*~~')
17+
verify_variable "$GATEWAY" "GATEWAY is empty and could not be derived from the Istio ingress gateway."
1618

1719
cat config/jenkins/k8s-jenkins-deployment.yml | \
1820
sed 's~GATEWAY_PLACEHOLDER~'"$GATEWAY"'~' | \
1921
sed 's~GITHUB_USER_EMAIL_PLACEHOLDER~'"$GITHUB_USER_EMAIL"'~' | \
2022
sed 's~GITHUB_ORGANIZATION_PLACEHOLDER~'"$GITHUB_ORGANIZATION"'~' | \
21-
sed 's~DOCKER_REGISTRY_IP_PLACEHOLDER~'"$REGISTRY_URL"'~' | \
22-
sed 's~DT_TENANT_URL_PLACEHOLDER~'"$DT_TENANT_URL"'~' | \
23-
sed 's~DT_API_TOKEN_PLACEHOLDER~'"$DT_API_TOKEN"'~' >> config/jenkins/gen/k8s-jenkins-deployment.yml
24-
25-
kubectl create -f config/jenkins/k8s-jenkins-pvcs.yml
26-
kubectl create -f config/jenkins/gen/k8s-jenkins-deployment.yml
27-
kubectl create -f config/jenkins/k8s-jenkins-rbac.yml
28-
kubectl create -f config/jenkins/k8s-jenkins-service-entry.yml
29-
30-
echo "Wait 200s for Jenkins..."
31-
sleep 200
32-
33-
# Setup credentials in Jenkins
34-
echo "--------------------------"
35-
echo "Setup Credentials in Jenkins "
36-
echo "--------------------------"
37-
38-
# Export Jenkins route in a variable
39-
export JENKINS_URL="jenkins.keptn.$GATEWAY.xip.io"
40-
41-
curl -X POST http://$JENKINS_URL/credentials/store/system/domain/_/createCredentials \
42-
--user $JENKINS_USER:$JENKINS_PASSWORD \
43-
--data-urlencode 'json={
44-
"": "0",
45-
"credentials": {
46-
"scope": "GLOBAL",
47-
"id": "git-credentials-acm",
48-
"username": "'$GITHUB_USER_NAME'",
49-
"password": "'$GITHUB_PERSONAL_ACCESS_TOKEN'",
50-
"description": "Token used by Jenkins to access the GitHub repositories",
51-
"$class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl"
52-
}
53-
}'
54-
55-
curl -X POST http://$JENKINS_URL/credentials/store/system/domain/_/createCredentials \
56-
--user $JENKINS_USER:$JENKINS_PASSWORD \
57-
--data-urlencode 'json={
58-
"": "0",
59-
"credentials": {
60-
"scope": "GLOBAL",
61-
"id": "perfsig-api-token",
62-
"apiToken": "'$DT_API_TOKEN'",
63-
"description": "Dynatrace API Token used by the Performance Signature plugin",
64-
"$class": "de.tsystems.mms.apm.performancesignature.dynatracesaas.model.DynatraceApiTokenImpl"
65-
}
66-
}'
67-
68-
echo "--------------------------"
69-
echo "End setup credentials in Jenkins "
70-
echo "--------------------------"
23+
sed 's~DOCKER_REGISTRY_IP_PLACEHOLDER~'"$REGISTRY_URL"'~' >> config/jenkins/gen/k8s-jenkins-deployment.yml
24+
25+
kubectl apply -f config/jenkins/k8s-jenkins-pvcs.yml
26+
verify_kubectl $? "Creating persistent volume claim for jenkins failed."
27+
28+
kubectl apply -f config/jenkins/gen/k8s-jenkins-deployment.yml
29+
verify_kubectl $? "Creating deployment for jenkins failed."
30+
31+
kubectl apply -f config/jenkins/k8s-jenkins-rbac.yml
32+
verify_kubectl $? "Creating cluster role binding for jenkins failed."
33+
34+
kubectl apply -f config/jenkins/k8s-jenkins-service-entry.yml
35+
verify_kubectl $? "Creating service entries for jenkins failed."
36+
37+
wait_for_deployment_in_namespace "jenkins" "keptn"
38+
39+
echo "Wait 100s for Jenkins..."
40+
sleep 100
41+
42+
JENKINS_URL="jenkins.keptn.$GATEWAY.xip.io"
43+
44+
# Configure Jenkins with GitHub credentials
45+
RETRY=0; RETRY_MAX=12;
46+
47+
while [[ $RETRY -lt $RETRY_MAX ]]; do
48+
curl -X POST http://$JENKINS_URL/credentials/store/system/domain/_/createCredentials \
49+
--user $JENKINS_USER:$JENKINS_PASSWORD \
50+
--data-urlencode 'json={
51+
"": "0",
52+
"credentials": {
53+
"scope": "GLOBAL",
54+
"id": "git-credentials-acm",
55+
"username": "'$GITHUB_USER_NAME'",
56+
"password": "'$GITHUB_PERSONAL_ACCESS_TOKEN'",
57+
"description": "Token used by Jenkins to access the GitHub repositories",
58+
"$class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl"
59+
}
60+
}'
61+
62+
if [[ $? == '0' ]]
63+
then
64+
print_debug "Git credentials in Jenkins created."
65+
break
66+
fi
67+
RETRY=$[$RETRY+1]
68+
print_debug "Retry: ${RETRY}/${RETRY_MAX} - Wait 10s for creating git credentials in Jenkins ..."
69+
sleep 10
70+
done
71+
72+
if [[ $RETRY == $RETRY_MAX ]]; then
73+
print_error "Git credentials could not be created in Jenkins."
74+
exit 1
75+
fi
7176

7277
# Create secret and deploy jenkins-service
7378
kubectl create secret generic -n keptn jenkins-secret --from-literal=jenkinsurl="jenkins.keptn.svc.cluster.local" --from-literal=user="$JENKINS_USER" --from-literal=password="$JENKINS_PASSWORD"
79+
verify_kubectl $? "Creating secret for jenkins-service failed."
7480

7581
kubectl delete -f config/service/service.yaml --ignore-not-found
7682
kubectl apply -f config/service/service.yaml
83+
verify_kubectl $? "Deploying jenkins-service failed."
7784

7885
# Deploy Tiller for Helm
79-
kubectl -n kube-system create serviceaccount tiller
86+
kubectl create serviceaccount tiller -n kube-system
87+
verify_kubectl $? "Creating service account for tiller in namespace kube-system failed."
88+
8089
kubectl create clusterrolebinding tiller --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
90+
verify_kubectl $? "Creating cluster role binding for tiller failed."
91+
8192
helm init --service-account tiller
93+
verify_install_step $? "Helm init failed."

0 commit comments

Comments
 (0)