Skip to content

Commit 59fde8a

Browse files
committed
Added jenkins pipeline cicd for laravel capistrano deployment
1 parent b6453ac commit 59fde8a

38 files changed

+1751
-7
lines changed

README.md

+20-1
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,16 @@ storage
212212
```
213213

214214
## Git Pipeline CI/CD
215+
* Create secure PEM file for deployment
216+
```
217+
openssl rsa -in id_rsa -outform pem > ~/.ssh/id_rsa.pem
218+
--- or ---
219+
./run-encode.sh
220+
```
221+
* Added PEM file (myapp.pem) in `keys` folder
222+
```
223+
cp ~/.ssh/id_rsa.pem keys/myapp.pem
224+
```
215225
* GitLab Configuration Variable
216226
: [.gitlab-ci.yml](.gitlab-ci.yml)
217227
```
@@ -235,6 +245,11 @@ storage
235245
```
236246
* OpenShift Configuration
237247
: [.openshift/action_hooks](.openshift/action_hooks)
248+
* Jenkins Configuration
249+
: [jenkins/staging/Jenkinsfile](jenkins/staging/Jenkinsfile) for Staging and
250+
[jenkins/production/Jenkinsfile](jenkins/production/Jenkinsfile) for Production, detail documentation refer to this
251+
[link](jenkins/README.md)
252+
238253
* Trigger Pipeline CI/CD
239254
```
240255
- Commit
@@ -258,7 +273,6 @@ storage
258273
git push --all -u && git push --tags
259274
```
260275

261-
262276
## Tested Environment
263277
### Versioning
264278
* Docker version
@@ -269,8 +283,13 @@ storage
269283
```
270284
docker-compose version 1.27.4, build 40524192
271285
```
286+
* Jenkins version
287+
```
288+
Jenkins
289+
```
272290

273291
## TODO
292+
* [X] Pipeline CI/CD using Jenkins
274293
* [ ] Provisioning with Terraform & Terragrunt
275294
* [ ] Deployment with Helm Chart
276295
* [ ] Deployment with K8S

compose/app-compose-jenkins.yml

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
version: '3.6'
2+
3+
#================================================================================================
4+
# NETWORK SETUP
5+
#================================================================================================
6+
networks:
7+
zeroc0d3lab_net:
8+
name: ${NETWORKS_NAME:-zeroc0d3lab_net}
9+
driver: ${NETWORKS_DRIVER:-bridge}
10+
ipam:
11+
config:
12+
- subnet: 172.125.125.0/16
13+
14+
#================================================================================================
15+
# VOLUME SETUP
16+
#================================================================================================
17+
volumes:
18+
jenkins:
19+
driver: ${VOLUMES_DRIVER:-local}
20+
21+
services:
22+
#================================================================================================
23+
# JENKINS
24+
#================================================================================================
25+
jenkins:
26+
# image: zeroc0d3labdevops/alpine-jenkins:latest
27+
build:
28+
context: ./docker/alpine-jenkins
29+
dockerfile: Dockerfile
30+
container_name: ${CONTAINER_JENKINS:-zeroc0d3lab_jenkins}
31+
restart: unless-stopped
32+
ports:
33+
- "${PORT_JENKINS:-8185}:8080"
34+
volumes:
35+
- /var/run/docker.sock:/var/run/docker.sock
36+
- /etc/localtime:/etc/localtime:ro
37+
- ${DATA_JENKINS:-/opt/data/docker/jenkins}:/tmp/backup
38+
environment:
39+
- TZ="Asia/Jakarta"
40+
- JENKINS_VERSION=2.249.2
41+
- JENKINS_HOME=/home/jenkins
42+
privileged: true
43+
tty: true
44+
networks:
45+
zeroc0d3lab_net:
46+
ipv4_address: ${CONTAINER_IP_JENKINS:-172.125.125.15}

compose/app-compose-mariadb.yml

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
version: '3.6'
2+
3+
#================================================================================================
4+
# NETWORK SETUP
5+
#================================================================================================
6+
networks:
7+
zeroc0d3lab_net:
8+
name: ${NETWORKS_NAME:-zeroc0d3lab_net}
9+
driver: ${NETWORKS_DRIVER:-bridge}
10+
ipam:
11+
config:
12+
- subnet: 172.125.125.0/16
13+
14+
#================================================================================================
15+
# VOLUME SETUP
16+
#================================================================================================
17+
volumes:
18+
mariadb:
19+
driver: ${VOLUMES_DRIVER:-local}
20+
21+
services:
22+
#================================================================================================
23+
# MARIADB
24+
#================================================================================================
25+
mariadb:
26+
#image: yobasystems/alpine-mariadb:${MARIADB_VERSION}
27+
build:
28+
context: ./docker/mariadb
29+
dockerfile: Dockerfile
30+
container_name: ${CONTAINER_MARIADB:-zeroc0d3lab_mariadb}
31+
restart: always
32+
ports:
33+
- "${PORT_MARIADB:-3306}:3306"
34+
volumes:
35+
- /var/run/docker.sock:/var/run/docker.sock
36+
- ${DATA_MARIADB:-/opt/data/docker/mariadb}:/var/lib/mysql
37+
#- ./docker/mariadb/rootfs/etc/my.cnf:/etc/my.cnf
38+
#- ./docker/mariadb/rootfs/etc/my.cnf.d/mariadb-server.cnf:/etc/my.cnf.d/mariadb-server.cnf
39+
#- ./config/mariadb/run-mysqld-mac.sh:/run-mysqld.sh
40+
environment:
41+
- ENV=local
42+
- TZ="Asia/Jakarta"
43+
- MYSQL_PROFILE=my-medium
44+
- MYSQL_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD:-secret}
45+
- MYSQL_ROOT_HOST=${MARIADB_ROOT_HOST:-127.0.0.1}
46+
- MYSQL_HOST=${MARIADB_HOST:-127.0.0.1}
47+
- MYSQL_DATABASE=${MARIADB_DATABASE:-laravel}
48+
- MYSQL_USER=${MARIADB_USER:-root}
49+
- MYSQL_PASSWORD=${MARIADB_PASSWORD:-secret}
50+
#entrypoint: /run-mysqld.sh
51+
privileged: true
52+
tty: true
53+
networks:
54+
zeroc0d3lab_net:
55+
ipv4_address: ${CONTAINER_IP_MARIADB:-172.125.125.4}

compose/app-compose.yml

+6-6
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ services:
7272
- ENV=local
7373
- TZ="Asia/Jakarta"
7474
- MYSQL_PROFILE=my-medium
75-
- MYSQL_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
76-
- MYSQL_ROOT_HOST=${MARIADB_ROOT_HOST}
77-
- MYSQL_HOST=${MARIADB_HOST}
78-
- MYSQL_DATABASE=${MARIADB_DATABASE}
79-
- MYSQL_USER=${MARIADB_USER}
80-
- MYSQL_PASSWORD=${MARIADB_PASSWORD}
75+
- MYSQL_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD:-secret}
76+
- MYSQL_ROOT_HOST=${MARIADB_ROOT_HOST:-172.125.125.4}
77+
- MYSQL_HOST=${MARIADB_HOST:-172.125.125.4}
78+
- MYSQL_DATABASE=${MARIADB_DATABASE:-laravel}
79+
- MYSQL_USER=${MARIADB_USER:-root}
80+
- MYSQL_PASSWORD=${MARIADB_PASSWORD:-secret}
8181
#entrypoint: /run-mysqld.sh
8282
privileged: true
8383
tty: true
+134
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# ===================================================================================== #
2+
# LIST CONTAINER SERVICES & TOOLS #
3+
# ===================================================================================== #
4+
# '########:'########:'########:::'#######:::'######::::'#####:::'########:::'#######:: #
5+
# ..... ##:: ##.....:: ##.... ##:'##.... ##:'##... ##::'##.. ##:: ##.... ##:'##.... ##: #
6+
# :::: ##::: ##::::::: ##:::: ##: ##:::: ##: ##:::..::'##:::: ##: ##:::: ##:..::::: ##: #
7+
# ::: ##:::: ######::: ########:: ##:::: ##: ##::::::: ##:::: ##: ##:::: ##::'#######:: #
8+
# :: ##::::: ##...:::: ##.. ##::: ##:::: ##: ##::::::: ##:::: ##: ##:::: ##::...... ##: #
9+
# : ##:::::: ##::::::: ##::. ##:: ##:::: ##: ##::: ##:. ##:: ##:: ##:::: ##:'##:::: ##: #
10+
# ########: ########: ##:::. ##:. #######::. ######:::. #####::: ########::. #######:: #
11+
# ........::........::..:::::..:::.......::::......:::::.....::::........::::.......::: #
12+
# ===================================================================================== #
13+
14+
# ================================================================================================
15+
# DOCKER-COMPOSE (DRIVER)
16+
# ================================================================================================
17+
# All Networks driver
18+
NETWORKS_DRIVER=bridge
19+
NETWORKS_NAME=zeroc0d3lab_net
20+
# All volumes driver
21+
VOLUMES_DRIVER=local
22+
23+
# ================================================================================================
24+
# CONTAINER NAME
25+
# ================================================================================================
26+
CONTAINER_ADMINER=zeroc0d3lab_adminer
27+
CONTAINER_GITLAB_RUNNER=zeroc0d3lab_gitlab_runner
28+
CONTAINER_MARIADB=zeroc0d3lab_mariadb
29+
CONTAINER_PORTAINER=zeroc0d3lab_portainer
30+
CONTAINER_PGADMIN=zeroc0d3lab_pgadmin
31+
CONTAINER_DEPLOYMENT=zeroc0d3lab_deployment
32+
CONTAINER_UBUNTU=zeroc0d3lab_ubuntu
33+
CONTAINER_JENKINS=zeroc0d3lab_jenkins
34+
CONTAINER_JENKINS_SLAVE=zeroc0d3lab_jenkins
35+
36+
# ================================================================================================
37+
# CONTAINER IP STATIC
38+
# ================================================================================================
39+
CONTAINER_IP_ADMINER=172.125.125.3
40+
CONTAINER_IP_MARIADB=172.125.125.4
41+
CONTAINER_IP_PORTAINER=172.125.125.5
42+
CONTAINER_IP_POSTGRESQL=172.125.125.6
43+
CONTAINER_IP_PGADMIN=172.125.125.7
44+
CONTAINER_IP_DEPLOYMENT=172.125.125.8
45+
CONTAINER_IP_JENKINS=172.125.125.15
46+
CONTAINER_IP_JENKINS_SLAVE=172.125.125.16
47+
CONTAINER_IP_UBUNTU=172.125.125.90
48+
CONTAINER_IP_GITLAB_RUNER=172.125.125.99
49+
50+
# ================================================================================================
51+
# CONTAINER PORT
52+
# ================================================================================================
53+
PORT_ADMINER=5210
54+
PORT_JENKINS=8185
55+
PORT_JENKINS_SLAVE=8186
56+
PORT_MARIADB=3306
57+
PORT_PORTAINER=5212
58+
PORT_POSTGRESQL=5432
59+
PORT_PGADMIN=5213
60+
PORT_DEPLOYMENT=5214
61+
PORT_UBUNTU=5290
62+
PORT_GITLAB_RUNNER=5299
63+
64+
# ================================================================================================
65+
# PATH VOLUME
66+
# ================================================================================================
67+
DATA_JENKINS=/opt/data/docker/jenkins
68+
DATA_JENKINS_SLAVE=/opt/data/docker/jenkins-slave
69+
DATA_MARIADB=/opt/data/docker/mariadb
70+
DATA_PORTAINER=/opt/data/docker/portainer
71+
DATA_POSTGRESQL=/opt/data/docker/postgresql
72+
DATA_PGADMIN=/opt/data/docker/pgadmin
73+
DATA_DEPLOYMENT=/opt/data/docker/ruby
74+
PATH_SSH=~/.ssh
75+
76+
# ================================================================================================
77+
# PATH SESSION
78+
# ================================================================================================
79+
SESSION_ADMINER=/opt/data/docker/session/adminer
80+
SESSION_PGADMIN=/opt/data/docker/session/pgadmin
81+
82+
# ================================================================================================
83+
# DEFAULT CREDENTIAL
84+
# ================================================================================================
85+
86+
# ================================================================================================
87+
# VERSION
88+
# ================================================================================================
89+
ALPINE_VERSION=3.12
90+
ADMINER_VERSION=4.7.7
91+
MARIADB_VERSION=10.4.13
92+
PORTAINER_VERSION=1.24.1
93+
POSTGRESQL_VERSION=10.13
94+
PGADMIN_VERSION=4.22
95+
RUBY_VERSION=2.7.1
96+
97+
# ================================================================================================
98+
# CONTAINER: ADMINER
99+
# ================================================================================================
100+
INSTALL_MSSQL=false
101+
102+
# ================================================================================================
103+
# CONTAINER: MARIADB
104+
# ================================================================================================
105+
MARIADB_ROOT_PASSWORD=password
106+
MARIADB_ROOT_HOST=172.125.125.4
107+
MARIADB_HOST=172.125.125.4
108+
MARIADB_DATABASE=zeroc0d3lab_db
109+
MARIADB_USER=admin
110+
MARIADB_PASSWORD=password
111+
112+
# ================================================================================================
113+
# CONTAINER: PGADMIN
114+
# ================================================================================================
115+
PGADMIN_DEFAULT_EMAIL=[email protected]
116+
PGADMIN_DEFAULT_PASSWORD=password
117+
118+
# ================================================================================================
119+
# CONTAINER: POSTGRESQL
120+
# ================================================================================================
121+
POSTGRES_ROOT_HOST=172.125.125.6
122+
POSTGRES_DATABASE=zeroc0d3lab_db
123+
POSTGRES_USER=admin
124+
POSTGRES_PASSWORD=password
125+
126+
# ================================================================================================
127+
# CONTAINER: PORTAINER
128+
# ================================================================================================
129+
PORTAINER_HOME=/var/lib/portainer
130+
131+
# ================================================================================================
132+
# CONTAINER: GITLAB_RUNNER
133+
# ================================================================================================
134+
GITLAB_RUNNER_CONFIG=/opt/data/docker/gitlab-runner/config
+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
ARG TAG
2+
3+
FROM zeroc0d3labdevops/alpine-base-consul:${TAG:-latest}
4+
5+
ARG BUILD_DATE
6+
ARG BUILD_VERSION
7+
ARG GIT_COMMIT
8+
ARG GIT_URL
9+
10+
ARG COMPOSER_VERSION="2.0.4"
11+
12+
LABEL maintainer="Dwi Fahni Denni (@zeroc0d3)" \
13+
org.label-schema.build-date="$BUILD_DATE" \
14+
org.label-schema.name="alpine-jenkins" \
15+
org.label-schema.description="alpine-jenkins image" \
16+
org.label-schema.vcs-ref="$GIT_COMMIT" \
17+
org.label-schema.vcs-url="$GIT_URL" \
18+
org.label-schema.vendor="ZeroC0D3Lab" \
19+
org.label-schema.version="$BUILD_VERSION"
20+
21+
ENV JENKINS_VERSION=2.249.2 \
22+
JENKINS_HOME=/home/jenkins
23+
24+
RUN mkdir ${JENKINS_HOME} && \
25+
addgroup -S jenkins && \
26+
adduser -S -D -g "" -G jenkins -s /bin/sh -h ${JENKINS_HOME} jenkins && \
27+
chown jenkins:jenkins ${JENKINS_HOME}
28+
29+
RUN apk add --no-cache --update git \
30+
openjdk11-jre \
31+
openssh-client \
32+
ttf-dejavu \
33+
docker \
34+
docker-compose \
35+
openrc && \
36+
mkdir /usr/local/jenkins && \
37+
curl -sSL http://mirrors.jenkins-ci.org/war-stable/${JENKINS_VERSION}/jenkins.war -o /usr/local/jenkins/jenkins.war && \
38+
curl -sSL https://getcomposer.org/download/${COMPOSER_VERSION}/composer.phar -o /usr/local/bin/composer
39+
40+
RUN chmod +x /usr/local/bin/composer; sync
41+
RUN rc-update add docker boot; sync
42+
43+
COPY rootfs/ /
44+
COPY docker-compose-mariadb.yml /opt/mariadb/docker-compose.yml
45+
COPY .env.example /opt/mariadb/.env
46+
47+
ENTRYPOINT ["/init"]
48+
CMD []
49+
50+
EXPOSE 8080
51+
VOLUME ["/home/jenkins"]
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
IMAGE = zeroc0d3labdevops/alpine-jenkins
2+
3+
clean-local:
4+
docker rmi $(CLEAN_OPTIONS) $(IMAGE):$(TAG) || true
5+
6+
build:
7+
docker build $(BUILD_OPTIONS) --build-arg TAG=${TAG} -t $(IMAGE):$(TAG) .
8+
9+
pull:
10+
docker pull $(PULL_OPTIONS) $(IMAGE):$(TAG)
11+
12+
push: build
13+
docker push $(PUSH_OPTIONS) $(IMAGE):$(TAG)

0 commit comments

Comments
 (0)