Skip to content

Commit b342595

Browse files
committed
Bugfixes and gitlab-runner (executer=docker)
1 parent 0c9f6ff commit b342595

File tree

7 files changed

+196
-160
lines changed

7 files changed

+196
-160
lines changed

README.md

+13-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Now you are ready to go with a little CI/CD Environment:
4343
|Jenkins| admin| admin |
4444
|Sonar|admin|admin|
4545
|Nexus | admin | admin123 |
46-
|Gitlab | root | choosen Password |
46+
|Gitlab | root | gitlab4me |
4747

4848
## The Tools
4949
### Jenkins
@@ -59,6 +59,16 @@ Now you are ready to go with a little CI/CD Environment:
5959
prepareCompose.sh), just create a project in gitlab and click at the registry tab to show
6060
how to login to the project registry and how to tag your images
6161
* ssh cloning and pushing is at port 2222
62+
63+
#### gitlab-runner
64+
The runner is a gitlab-multirunner image with a docker-runner (concurrent=1) , based on [gitlab/gitlab-runner][2] The docker-compose section has an environment called
65+
REGISTER_MODE, it can set to KEEP or REFRESH
66+
* KEEP register at one time a runner and keep it during startups
67+
* REFRESH at every startup remove all old runners and register one new runner (the pipeline-history ist lost.)
68+
69+
It takes a long time until gitlab is ready to accept a runner registration, if it fails, increase the REGISTER_TRYS
70+
71+
6272

6373
#### Jenkins and Gitlab
6474

@@ -79,9 +89,10 @@ And _yes_ docker-plugin in jenkins works (docker in docker, usefull but not reco
7989
### My next steps
8090

8191
* give you some more preconfiguratiom
82-
* apply a gitlab runner
92+
* ~~apply a gitlab runner~~
8393
* apply git-lfs
8494

8595

8696

8797
[1]: https://support.sonatype.com/hc/en-us/articles/217542177-Using-Self-Signed-Certificates-with-Nexus-Repository-Manager-and-Docker-Daemon
98+
[2]: https://hub.docker.com/r/gitlab/gitlab-runner/

docker-compose.yml

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#####################################
2+
# Don't touch this file is generated
3+
# expecilly for: vision
4+
###################################
5+
#
6+
# Consider to Backup /home/tom/devstack-data
7+
#
8+
version: "3"
9+
services:
10+
ngnix:
11+
build: nginx-reverse
12+
ports:
13+
- "80:80" #http://
14+
# SSH Bypassing into gitlab, if you want to change this edit nginx.conf also
15+
- "2222:2222" #ssh port of gitlab (ssh://git@myhostname:2222/scott/foo.git)
16+
- "5555:5555" #Gitlab Docker Registry do NOT use 5000, this is an internal PORT of the gitlab-ce Image
17+
jenkins-fat:
18+
build: jenkins-fat
19+
dns: 192.168.178.1
20+
volumes:
21+
- /home/tom/devstack-data/jenkins:/var/jenkins_home
22+
- /var/run/docker.sock:/var/run/docker.sock
23+
sonar-db:
24+
image: postgres
25+
environment:
26+
- POSTGRES_USER=sonar
27+
- POSTGRES_PASSWORD=sonar
28+
volumes:
29+
- /home/tom/devstack-data/sonar-db/postgresql:/var/lib/postgresql
30+
# This needs explicit mapping due to
31+
# https://github.com/docker-library/postgres/blob/4e48e3228a30763913ece952c611e5e9b95c8759/Dockerfile.template#L52
32+
- /home/tom/devstack-data/sonar-db/postgresql_data:/var/lib/postgresql/data
33+
sonar:
34+
image: sonarqube
35+
dns: 192.168.178.1
36+
environment:
37+
- SONARQUBE_JDBC_URL=jdbc:postgresql://sonar-db:5432/sonar
38+
volumes:
39+
- /home/tom/devstack-data/sonar/sonarqube_conf:/opt/sonarqube/conf
40+
- /home/tom/devstack-data/sonar/sonarqube_data:/opt/sonarqube/data
41+
- /home/tom/devstack-data/sonar/sonarqube_extensions:/opt/sonarqube/extensions
42+
- /home/tom/devstack-data/sonar/sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins
43+
gitlab:
44+
image: 'gitlab/gitlab-ce:latest'
45+
dns: 192.168.178.1
46+
environment:
47+
GITLAB_OMNIBUS_CONFIG: |
48+
external_url 'http://vision/gitlab'
49+
gitlab_rails['gitlab_shell_ssh_port'] = 2222
50+
# docker-registry config
51+
registry_external_url 'https://vision:5555'
52+
registry_nginx['listen_port'] = 5555
53+
registry_nginx['listen_https'] = true
54+
# SSL config just for the docker-registry need
55+
nginx['ssl_certificate'] = "/etc/gitlab/ssl/vision.crt"
56+
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/vision.key"
57+
registry_nginx['proxy_set_headers'] = {
58+
"X-Forwarded-Proto" => "https",
59+
"X-Forwarded-Ssl" => "on"
60+
}
61+
volumes:
62+
- /home/tom/devstack-data/gitlab/config:/etc/gitlab
63+
- /home/tom/devstack-data/gitlab/logs:/var/log/gitlab
64+
- /home/tom/devstack-data/gitlab/data:/var/opt/gitlab
65+
66+
gitlabrunner:
67+
build: gitlabrunner
68+
dns: 192.168.178.1
69+
environment:
70+
- DOCKER_DNS=192.168.178.1
71+
- GITLAB_URL=http://vision/gitlab
72+
- REGISTER_TOKEN=s3cretToken4Runner
73+
- REGISTER_MODE=KEEP #KEEP register a new runner an keep it. FRESH unregister all runners and always install a new (pipeline-history lost!)
74+
- REGISTER_TRYS=60 # every 5 seconds a try to register the runner..gitlab takes a long time to startup
75+
volumes:
76+
- /home/tom/devstack-data/gitlab-runner/config:/etc/gitlab-runner
77+
- /var/run/docker.sock:/var/run/docker.sock
78+
79+
nexus:
80+
image: sonatype/nexus3
81+
dns: 192.168.178.1
82+
environment:
83+
- NEXUS_CONTEXT=nexus
84+
volumes:
85+
- /home/tom/devstack-data/nexus:/nexus-data
86+
87+

docker-compose.yml.template

+17
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ services:
4646
environment:
4747
GITLAB_OMNIBUS_CONFIG: |
4848
external_url 'http://HOSTNAME/gitlab'
49+
gitlab_rails['initial_root_password'] = "gitlab4me"
50+
gitlab_rails['initial_shared_runners_registration_token'] = "s3cretToken4Runner"
4951
gitlab_rails['gitlab_shell_ssh_port'] = 2222
5052
# docker-registry config
5153
registry_external_url 'https://HOSTNAME:5555'
@@ -62,11 +64,26 @@ services:
6264
- BASE_DATA_DIR/gitlab/config:/etc/gitlab
6365
- BASE_DATA_DIR/gitlab/logs:/var/log/gitlab
6466
- BASE_DATA_DIR/gitlab/data:/var/opt/gitlab
67+
68+
gitlabrunner:
69+
build: gitlabrunner
70+
dns: DNS_SERVER
71+
environment:
72+
- DOCKER_DNS=DNS_SERVER
73+
- GITLAB_URL=http://HOSTNAME/gitlab
74+
- REGISTER_TOKEN=s3cretToken4Runner
75+
- REGISTER_MODE=KEEP #KEEP register a new runner an keep it. FRESH unregister all runners and always install a new (pipeline-history lost!)
76+
- REGISTER_TRYS=60 # every 10 seconds a try to register the runner..gitlab takes a long time to startup
77+
volumes:
78+
- BASE_DATA_DIR/gitlab-runner/config:/etc/gitlab-runner
79+
- /var/run/docker.sock:/var/run/docker.sock
80+
6581
nexus:
6682
image: sonatype/nexus3
6783
dns: DNS_SERVER
6884
environment:
6985
- NEXUS_CONTEXT=nexus
7086
volumes:
7187
- BASE_DATA_DIR/nexus:/nexus-data
88+
7289

gitlabrunner/Dockerfile

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
FROM gitlab/gitlab-runner
2+
3+
# The giltab multirunner ist an officila Image by gitlab
4+
5+
ADD entrypointAutoregister /
6+
RUN chmod +x /entrypointAutoregister
7+
8+
ENTRYPOINT ["/usr/bin/dumb-init", "/entrypointAutoregister"]
9+
10+
CMD ["run", "--user=gitlab-runner", "--working-directory=/home/gitlab-runner"]
11+
12+

gitlabrunner/entrypointAutoregister

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/bin/bash
2+
3+
# gitlab-ci-multi-runner data directory
4+
DATA_DIR="/etc/gitlab-runner"
5+
CONFIG_FILE=${CONFIG_FILE:-$DATA_DIR/config.toml}
6+
# custom certificate authority path
7+
CA_CERTIFICATES_PATH=${CA_CERTIFICATES_PATH:-$DATA_DIR/certs/ca.crt}
8+
LOCAL_CA_PATH="/usr/local/share/ca-certificates/ca.crt"
9+
10+
update_ca() {
11+
echo "Updating CA certificates..."
12+
cp "${CA_CERTIFICATES_PATH}" "${LOCAL_CA_PATH}"
13+
update-ca-certificates --fresh >/dev/null
14+
}
15+
16+
if [ -f "${CA_CERTIFICATES_PATH}" ]; then
17+
# update the ca if the custom ca is different than the current
18+
cmp --silent "${CA_CERTIFICATES_PATH}" "${LOCAL_CA_PATH}" || update_ca
19+
fi
20+
21+
22+
###########################################################################################################
23+
echo "Try to autoregister runner at ${GITLAB_URL} with ${REGISTER_TOKEN} with $REGISTER_TRYS trys"
24+
25+
grep docker-runner /etc/gitlab-runner/config.toml 2>/dev/null 1>/dev/null
26+
RUNNER_IS_PRESENT=$?
27+
28+
if test $REGISTER_MODE = "KEEP" -a $RUNNER_IS_PRESENT -eq 0 ; then
29+
echo "Keeping old runner"
30+
fi
31+
32+
TRYS=$REGISTER_TRYS
33+
REGISTERED=1
34+
35+
if test $REGISTER_MODE = "FRESH" -o $RUNNER_IS_PRESENT -ne 0 ; then
36+
while test $TRYS -gt 0 -a $REGISTERED -gt 0 ; do
37+
TRYS=$(expr $TRYS - 1)
38+
gitlab-runner register -n --url=${GITLAB_URL} --registration-token=${REGISTER_TOKEN} \
39+
--executor=docker --name=docker-runner \
40+
--run-untagged=true --locked=false --docker-image=docker:latest \
41+
--docker-privileged
42+
REGISTERED=$?
43+
if [ $REGISTERED -ne 0 ] ; then
44+
echo "${GITLAB_URL} not ready $TRYS trys left, next try in 10 second for ${GITLAB_URL}"
45+
sleep 10
46+
else
47+
# Gitlab is ready, so remove ALL runner and re-registrer only one runner
48+
# so we have a clean state
49+
sleep 1
50+
gitlab-runner unregister --all-runners
51+
sleep 1
52+
gitlab-runner verify --delete
53+
sleep 1
54+
gitlab-runner register -n --url=${GITLAB_URL} --registration-token=${REGISTER_TOKEN} \
55+
--executor=docker --name=docker-runner \
56+
--run-untagged=true --locked=false --docker-image=docker:latest \
57+
--docker-privileged
58+
fi
59+
done
60+
fi
61+
62+
# launch gitlab-ci-multi-runner passing all arguments
63+
exec gitlab-ci-multi-runner "$@"

jenkins-fat/plugins.txt_SAVE

-156
This file was deleted.

0 commit comments

Comments
 (0)