-
Notifications
You must be signed in to change notification settings - Fork 16
262 lines (234 loc) · 13.2 KB
/
main.yml
File metadata and controls
262 lines (234 loc) · 13.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
name: CI
on:
push:
branches:
- main
- 'releases/**'
env:
DOCKER_REGISTRY: ghcr.io
DOCKER_USERNAME: ${{ github.actor }}
DOCKER_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
GIT_BRANCH: ${{ github.ref }}
GIT_SHA: ${GITHUB_SHA}
GITHUB_USER: ${{ github.repository_owner }}
GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
publish_images:
strategy:
matrix:
python-version: [3.8.12]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ${{ env.DOCKER_REGISTRY }}
username: ${{ env.DOCKER_USERNAME }}
password: ${{ env.DOCKER_PASSWORD }}
- name: Switch to Current Branch
run: git checkout ${{ env.BRANCH }}
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
cd jenkins_scripts
pip install -r requirements.txt
- name: Fetch all tags
run: |
git fetch --prune --unshallow --tags
- name: MSA Tglib main
if: github.ref == 'refs/heads/main'
run: |
python jenkins_scripts/registry.py build tglib --dir tglib --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY" --stage builder
python jenkins_scripts/registry.py build tglib --dir tglib --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push tglib --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: MSA Tglib Release
if: ${{ startsWith(github.ref, 'refs/heads/releases') }}
run: |
python jenkins_scripts/registry.py build tglib --dir tglib --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push tglib --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: Alarms
run: |
python jenkins_scripts/registry.py build tg-alarms --context alarms --dir alarms --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push tg-alarms --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: EFK Fluentd
run: |
python jenkins_scripts/registry.py build fluentd --context fluentd --dir fluentd --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push fluentd --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: Kafka Bitnami
run: |
cat <<EOF > kafka/Dockerfile
FROM bitnami/kafka:2.6.0
COPY jmx_prometheus_javaagent-0.11.0.jar /opt/jmx_exporter/jmx_prometheus_javaagent-0.11.0.jar
COPY kafka-2_0_0.yml /opt/jmx_exporter/kafka-2_0_0.yml
EOF
python jenkins_scripts/registry.py build kafka-bitnami --context kafka --dir kafka --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push kafka-bitnami --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: Kafka
run: |
python jenkins_scripts/registry.py build kafka --context kafka --dir kafka --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push kafka --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: MSA Scan Service
run: |
python jenkins_scripts/registry.py build scan_service --dir scan_service --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push scan_service --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: MSA Network Health Service
run: |
python jenkins_scripts/registry.py build network_health_service --dir network_health_service --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push network_health_service --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: MSA Analytics
run: |
python jenkins_scripts/registry.py build analytics --dir analytics --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push analytics --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: MSA Network Test
run: |
python jenkins_scripts/registry.py build network_test --dir network_test --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push network_test --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: MSA Default Routes Service
run: |
python jenkins_scripts/registry.py build default_routes_service --dir default_routes_service --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push default_routes_service --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: MSA Weather Service
run: |
python jenkins_scripts/registry.py build weather_service --dir weather_service --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push weather_service --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: MSA Crash Log Service
run: |
python jenkins_scripts/registry.py build crashlog_analysis_service --dir crashlog_analysis_service --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push crashlog_analysis_service --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: MSA Topology Service
run: |
python jenkins_scripts/registry.py build topology_service --dir topology_service --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push topology_service --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: MSA Anomaly Detection Service
run: |
python jenkins_scripts/registry.py build anomaly_detection --dir anomaly_detection --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push anomaly_detection --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: NMS v2
run: |
export COMMIT_HASH=$(git log -1 --pretty=%h)
export COMMIT_DATE=$(git log -1 --pretty=%ad)
pushd tgnms
bash fbcnms-projects/tgnms/scripts/changelog.sh > fbcnms-projects/tgnms/changelog.json
popd
python jenkins_scripts/registry.py build nmsv2 --build-arg COMMIT_DATE="$COMMIT_DATE" --build-arg COMMIT_HASH="$COMMIT_HASH" --context tgnms --dir tgnms/fbcnms-projects/tgnms --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push nmsv2 --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: NMS Docs
run: |
python jenkins_scripts/registry.py build nms_docs --dir docs --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push nms_docs --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: NMS Proxy Nginx
run: |
python jenkins_scripts/registry.py build nms_nginx --context nginx --dir nginx --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push nms_nginx --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: NMS V6up
run: |
python jenkins_scripts/registry.py build docker_v6up --context v6up --dir v6up --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push docker_v6up --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: C++ backends Main
if: github.ref == 'refs/heads/main'
run: |
python jenkins_scripts/registry.py build cpp_backends --dir docker --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY" --stage builder
python jenkins_scripts/registry.py build cpp_backends --dir docker --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push cpp_backends --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
- name: C++ backends release
if: ${{ startsWith(github.ref, 'refs/heads/releases') }}
run: |
python jenkins_scripts/registry.py build cpp_backends --dir docker --github-user "$GITHUB_USER" --branch "$GIT_BRANCH" --registry "$DOCKER_REGISTRY"
python jenkins_scripts/registry.py push cpp_backends --username "$DOCKER_USERNAME" --github-user "$GITHUB_USER" --registry "$DOCKER_REGISTRY"
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Lint Code Base
uses: github/super-linter@v4
env:
VALIDATE_ALL_CODEBASE: false
DEFAULT_BRANCH: main
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
LINTER_RULES_PATH: tgnms
JAVASCRIPT_ES_CONFIG_FILE: .eslintrc.yml
VALIDATE_JAVASCRIPT_STANDARD: true
VALIDATE_JAVASCRIPT_ES: true
DISABLE_ERRORS: false
release:
needs: publish_images
runs-on: ubuntu-latest
if: success()
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ${{ env.DOCKER_REGISTRY }}
username: ${{ env.DOCKER_USERNAME }}
password: ${{ env.DOCKER_PASSWORD }}
- name: Switch to Current Branch
run: git checkout ${{ env.GIT_BRANCH }}
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
cd jenkins_scripts
pip install -r requirements.txt
- name: Set environment variables
run: |
echo "GIT_SHA=${GITHUB_SHA}" >> $GITHUB_ENV
echo "GIT_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV
echo "GITHUB_USER: ${{ github.repository_owner }}"
echo "$GIT_BRANCH"
- name: Release
run: |
# Fetch most recent tags
git fetch --prune --unshallow --tags
echo $GIT_BRANCH
BUILD_TAG=$(python jenkins_scripts/github_release.py get-tag -b $GIT_BRANCH)
cd nms_stack
ANSIBLE_VERSION=2.9.9
OUTPUT_FILE="nms.pex"
SYMLINK="nms"
# Construct version file
echo "The build tag is: ${BUILD_TAG}"
echo "${BUILD_TAG}" > nms_cli/__version__
# push versions to console for debugging
echo "Packages"
pip freeze
pex --version
# build nms dist
echo "build nms dist"
python setup.py bdist_wheel
# build pex
echo "Build pex"
pex --wheel --python=python3 -v --disable-cache -f dist -f . ansible==$ANSIBLE_VERSION -e nms_cli.main -o ${OUTPUT_FILE} .
# pex sanity test
# echo "pex sanity test"
# ls -lah ${OUTPUT_FILE}
# ./${OUTPUT_FILE} --version
NOW=$(date +"%m_%d_%y_%H_%M_%S")
DATED_FILE="/tmp/nms_${NOW}"
mv ${OUTPUT_FILE} ${DATED_FILE}
rm -f ${SYMLINK}
ln -s ${DATED_FILE} ${SYMLINK}
echo "Check if all required images have been created:"
if ./nms check-images --nonfatal-image-check
then
echo 'IMAGES READY; STARTING RELEASE'
# tag this build on github
python ../jenkins_scripts/github_release.py tag -b $GIT_BRANCH
# we pause for 10 seconds to let github catch up before we release.
sleep 30
# release command expects the GITHUB_USER and GITHUB_ACCESS_TOKEN env to be defined
python ../jenkins_scripts/github_release.py release -a $(realpath nms) -n nms
else
echo 'IMAGES NOT READY; ABORTING RELEASE'
fi