first-fix
This commit is contained in:
1 parent
6d87c1edc8
commit
565d9d673a
6284 files changed
+820267
-76
No files matched your search
@@ -0,0 +1,94 @@
|
||||
# ThingsBoard single docker images
|
||||
|
||||
This project provides the build for the ThingsBoard single docker images.
|
||||
|
||||
* `thingsboard/tb` - single instance of ThingsBoard with embedded HSQLDB database.
|
||||
* `thingsboard/tb-postgres` - single instance of ThingsBoard with PostgreSQL database.
|
||||
* `thingsboard/tb-cassandra` - single instance of ThingsBoard with Hybrid PostgreSQL (entities) and Cassandra (timeseries) database.
|
||||
|
||||
## Running
|
||||
|
||||
Before starting Docker container run following command to create a directory for storing data and change its owner to docker container user.
|
||||
To be able to change user, **chown** command is used, which requires sudo permissions (command will request password for a sudo access):
|
||||
|
||||
`
|
||||
$ mkdir -p ~/.mytb-data && sudo chown -R 799:799 ~/.mytb-data
|
||||
`
|
||||
|
||||
**NOTE**: replace directory `~/.mytb-data` with directory you're planning to use on container creation.
|
||||
|
||||
In this example `thingsboard/tb` image will be used. You can choose any other images with different databases (see above).
|
||||
Execute the following command to run this docker directly:
|
||||
|
||||
`
|
||||
$ docker run -it -p 9090:9090 -p 1883:1883 -p 5683:5683/udp -p 5685:5685/udp -v ~/.mytb-data:/data --name mytb thingsboard/tb
|
||||
`
|
||||
|
||||
Where:
|
||||
|
||||
- `docker run` - run this container
|
||||
- `-it` - attach a terminal session with current ThingsBoard process output
|
||||
- `-p 9090:9090` - connect local port 9090 to exposed internal HTTP port 9090
|
||||
- `-p 1883:1883` - connect local port 1883 to exposed internal MQTT port 1883
|
||||
- `-p 5683:5683` - connect local port 5683 to exposed internal COAP port 5683
|
||||
- `-p 5685:5685` - connect local port 5685 to exposed internal COAP port 5685 (lwm2m)
|
||||
- `-v ~/.mytb-data:/data` - mounts the host's dir `~/.mytb-data` to ThingsBoard DataBase data directory
|
||||
- `--name mytb` - friendly local name of this machine
|
||||
- `thingsboard/tb` - docker image, can be also `thingsboard/tb-postgres` or `thingsboard/tb-cassandra`
|
||||
|
||||
> **NOTE**: **Windows** users should use docker managed volume instead of host's dir. Create docker volume (for ex. `mytb-data`) before executing `docker run` command:
|
||||
> ```
|
||||
> $ docker volume create mytb-data
|
||||
> ```
|
||||
> After you can execute docker run command using `mytb-data` volume instead of `~/.mytb-data`.
|
||||
> In order to get access to necessary resources from external IP/Host on **Windows** machine, please execute the following commands:
|
||||
> ```
|
||||
> $ VBoxManage controlvm "default" natpf1 "tcp-port9090,tcp,,9090,,9090"
|
||||
> $ VBoxManage controlvm "default" natpf1 "tcp-port1883,tcp,,1883,,1883"
|
||||
> $ VBoxManage controlvm "default" natpf1 "tcp-port5683,tcp,,5683,,5683"
|
||||
> $ VBoxManage controlvm "default" natpf1 "tcp-port5683,tcp,,5685,,5685"
|
||||
> ```
|
||||
|
||||
After executing `docker run` command you can open `http://{your-host-ip}:9090` in you browser (for ex. `http://localhost:9090`). You should see ThingsBoard login page.
|
||||
Use the following default credentials:
|
||||
|
||||
- **System Administrator**: sysadmin@thingsboard.org / sysadmin
|
||||
- **Tenant Administrator**: tenant@thingsboard.org / tenant
|
||||
- **Customer User**: customer@thingsboard.org / customer
|
||||
|
||||
You can always change passwords for each account in account profile page.
|
||||
|
||||
You can detach from session terminal with `Ctrl-p` `Ctrl-q` - the container will keep running in the background.
|
||||
|
||||
To reattach to the terminal (to see ThingsBoard logs) run:
|
||||
|
||||
```
|
||||
$ docker attach mytb
|
||||
```
|
||||
|
||||
To stop the container:
|
||||
|
||||
```
|
||||
$ docker stop mytb
|
||||
```
|
||||
|
||||
To start the container:
|
||||
|
||||
```
|
||||
$ docker start mytb
|
||||
```
|
||||
|
||||
## Upgrading
|
||||
|
||||
In order to update to the latest image, execute the following commands:
|
||||
|
||||
```
|
||||
$ docker pull thingsboard/tb
|
||||
$ docker stop mytb
|
||||
$ docker run -it -v ~/.mytb-data:/data --rm thingsboard/tb upgrade-tb.sh
|
||||
$ docker start mytb
|
||||
```
|
||||
|
||||
**NOTE**: if you use different database change image name in all commands from `thingsboard/tb` to `thingsboard/tb-postgres` or `thingsboard/tb-cassandra` correspondingly.
|
||||
|
||||
**NOTE**: replace host's directory `~/.mytb-data` with directory used during container creation.
|
||||
@@ -0,0 +1,93 @@
|
||||
#
|
||||
# Copyright © 2016-2023 The Thingsboard Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
FROM thingsboard/openjdk11:bullseye-slim
|
||||
|
||||
ENV PG_MAJOR=12
|
||||
|
||||
ENV DATA_FOLDER=/data
|
||||
|
||||
ENV HTTP_BIND_PORT=9090
|
||||
ENV DATABASE_TS_TYPE=cassandra
|
||||
|
||||
ENV PGDATA=/data/db
|
||||
ENV CASSANDRA_DATA=/data/cassandra
|
||||
|
||||
ENV SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver
|
||||
ENV SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard
|
||||
ENV SPRING_DATASOURCE_USERNAME=${pkg.user}
|
||||
ENV SPRING_DATASOURCE_PASSWORD=postgres
|
||||
|
||||
ENV CASSANDRA_HOST=localhost
|
||||
ENV CASSANDRA_PORT=9042
|
||||
ENV CASSANDRA_HOME=/opt/cassandra
|
||||
|
||||
ENV PATH=$CASSANDRA_HOME/bin:$PATH
|
||||
ENV PATH=$PATH:/usr/lib/postgresql/$PG_MAJOR/bin
|
||||
|
||||
ENV PGLOG=/var/log/postgres
|
||||
ENV CASSANDRA_LOG=/var/log/cassandra
|
||||
|
||||
COPY logback.xml ${pkg.name}.conf start-db.sh stop-db.sh start-tb.sh upgrade-tb.sh install-tb.sh ${pkg.name}.deb /tmp/
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends wget nmap procps gnupg2 \
|
||||
&& echo "deb http://apt.postgresql.org/pub/repos/apt/ $(. /etc/os-release && echo -n $VERSION_CODENAME)-pgdg main" | tee --append /etc/apt/sources.list.d/pgdg.list > /dev/null \
|
||||
&& wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O- | apt-key add - \
|
||||
&& echo "deb https://debian.cassandra.apache.org 40x main" | tee -a /etc/apt/sources.list.d/cassandra.sources.list > /dev/null \
|
||||
&& wget -q https://downloads.apache.org/cassandra/KEYS -O- | apt-key add - \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y --no-install-recommends cassandra cassandra-tools postgresql-${PG_MAJOR} \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& update-rc.d cassandra disable \
|
||||
&& update-rc.d postgresql disable \
|
||||
&& apt-get purge -y --auto-remove \
|
||||
&& sed -i.old '/ulimit/d' /etc/init.d/cassandra \
|
||||
&& chmod a+x /tmp/*.sh \
|
||||
&& mv /tmp/start-tb.sh /usr/bin \
|
||||
&& mv /tmp/upgrade-tb.sh /usr/bin \
|
||||
&& mv /tmp/install-tb.sh /usr/bin \
|
||||
&& mv /tmp/start-db.sh /usr/bin \
|
||||
&& mv /tmp/stop-db.sh /usr/bin \
|
||||
&& dpkg -i /tmp/${pkg.name}.deb \
|
||||
&& rm /tmp/${pkg.name}.deb \
|
||||
&& (systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || :) \
|
||||
&& mv /tmp/logback.xml ${pkg.installFolder}/conf \
|
||||
&& mv /tmp/${pkg.name}.conf ${pkg.installFolder}/conf \
|
||||
# postgres config
|
||||
&& mkdir -p $PGLOG \
|
||||
&& chown -R ${pkg.user}:${pkg.user} $PGLOG \
|
||||
&& chown -R ${pkg.user}:${pkg.user} /var/log/postgresql \
|
||||
&& chown -R ${pkg.user}:${pkg.user} /var/run/postgresql \
|
||||
# cassandra config
|
||||
&& rm -rf /var/lib/cassandra \
|
||||
&& chmod a+w /var/lib \
|
||||
&& chown -R ${pkg.user}:${pkg.user} $CASSANDRA_LOG \
|
||||
&& mkdir -p $DATA_FOLDER \
|
||||
&& chown -R ${pkg.user}:${pkg.user} $DATA_FOLDER \
|
||||
&& chown -R ${pkg.user}:${pkg.user} /var/log/${pkg.name} \
|
||||
&& chmod 555 ${pkg.installFolder}/bin/${pkg.name}.jar
|
||||
|
||||
USER ${pkg.user}
|
||||
|
||||
EXPOSE 9090
|
||||
EXPOSE 1883
|
||||
EXPOSE 5683/udp
|
||||
EXPOSE 5685/udp
|
||||
|
||||
VOLUME ["/data"]
|
||||
|
||||
CMD ["start-tb.sh"]
|
||||
@@ -0,0 +1,60 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright © 2016-2023 The Thingsboard Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
firstlaunch=${DATA_FOLDER}/.firstlaunch
|
||||
|
||||
PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl)
|
||||
|
||||
if [ ! -d ${PGDATA} ]; then
|
||||
mkdir -p ${PGDATA}
|
||||
${PG_CTL} initdb
|
||||
fi
|
||||
|
||||
echo "Starting Postgresql..."
|
||||
${PG_CTL} start
|
||||
|
||||
RETRIES="${PG_ISREADY_RETRIES:-300}"
|
||||
until pg_isready -U ${pkg.user} -d postgres --quiet || [ $RETRIES -eq 0 ]
|
||||
do
|
||||
echo "Connecting to Postgres, $((RETRIES--)) attempts left..."
|
||||
sleep 1
|
||||
done
|
||||
|
||||
if [ ! -f ${firstlaunch} ]; then
|
||||
echo "Creating database..."
|
||||
psql -U ${pkg.user} -d postgres -c "CREATE DATABASE thingsboard"
|
||||
fi
|
||||
|
||||
echo "Postgresql is ready"
|
||||
|
||||
cassandra_data_dir=${CASSANDRA_DATA}
|
||||
cassandra_data_link=/var/lib/cassandra
|
||||
|
||||
if [ ! -L ${cassandra_data_link} ]; then
|
||||
if [ ! -d ${cassandra_data_dir} ]; then
|
||||
mkdir -p ${cassandra_data_dir}
|
||||
fi
|
||||
ln -s ${cassandra_data_dir} ${cassandra_data_link}
|
||||
fi
|
||||
|
||||
exec setsid nohup cassandra >> ${CASSANDRA_LOG}/cassandra.log 2>&1 &
|
||||
|
||||
until nmap $CASSANDRA_HOST -p $CASSANDRA_PORT | grep "$CASSANDRA_PORT/tcp open"
|
||||
do
|
||||
echo "Wait for cassandra db to start..."
|
||||
sleep 5
|
||||
done
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright © 2016-2023 The Thingsboard Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
CASSANDRA_PID=$(ps aux | grep '[c]assandra' | awk '{print $2}')
|
||||
|
||||
echo "Stopping cassandra (pid ${CASSANDRA_PID})."
|
||||
kill -SIGTERM ${CASSANDRA_PID}
|
||||
|
||||
PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl)
|
||||
echo "Stopping postgres."
|
||||
${PG_CTL} stop
|
||||
|
||||
while [ -e /proc/${CASSANDRA_PID} ]
|
||||
do
|
||||
echo "Waiting for cassandra to stop."
|
||||
sleep 2
|
||||
done
|
||||
echo "Cassandra was stopped."
|
||||
@@ -0,0 +1,75 @@
|
||||
#
|
||||
# Copyright © 2016-2023 The Thingsboard Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
FROM thingsboard/openjdk11:bullseye-slim
|
||||
|
||||
ENV PG_MAJOR 12
|
||||
|
||||
ENV DATA_FOLDER=/data
|
||||
|
||||
ENV HTTP_BIND_PORT=9090
|
||||
ENV DATABASE_TS_TYPE=sql
|
||||
|
||||
ENV PGDATA=/data/db
|
||||
ENV PATH=$PATH:/usr/lib/postgresql/$PG_MAJOR/bin
|
||||
|
||||
ENV SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver
|
||||
ENV SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard
|
||||
ENV SPRING_DATASOURCE_USERNAME=${pkg.user}
|
||||
ENV SPRING_DATASOURCE_PASSWORD=postgres
|
||||
|
||||
ENV PGLOG=/var/log/postgres
|
||||
|
||||
COPY logback.xml ${pkg.name}.conf start-db.sh stop-db.sh start-tb.sh upgrade-tb.sh install-tb.sh ${pkg.name}.deb /tmp/
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends wget gnupg2 \
|
||||
&& echo "deb http://apt.postgresql.org/pub/repos/apt/ $(. /etc/os-release && echo -n $VERSION_CODENAME)-pgdg main" | tee --append /etc/apt/sources.list.d/pgdg.list > /dev/null \
|
||||
&& wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O- | apt-key add - \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y --no-install-recommends postgresql-${PG_MAJOR} \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& update-rc.d postgresql disable \
|
||||
&& apt-get purge -y --auto-remove \
|
||||
&& chmod a+x /tmp/*.sh \
|
||||
&& mv /tmp/start-tb.sh /usr/bin \
|
||||
&& mv /tmp/upgrade-tb.sh /usr/bin \
|
||||
&& mv /tmp/install-tb.sh /usr/bin \
|
||||
&& mv /tmp/start-db.sh /usr/bin \
|
||||
&& mv /tmp/stop-db.sh /usr/bin \
|
||||
&& dpkg -i /tmp/${pkg.name}.deb \
|
||||
&& rm /tmp/${pkg.name}.deb \
|
||||
&& (systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || :) \
|
||||
&& mv /tmp/logback.xml ${pkg.installFolder}/conf \
|
||||
&& mv /tmp/${pkg.name}.conf ${pkg.installFolder}/conf \
|
||||
&& mkdir -p $PGLOG \
|
||||
&& chown -R ${pkg.user}:${pkg.user} $PGLOG \
|
||||
&& chown -R ${pkg.user}:${pkg.user} /var/run/postgresql \
|
||||
&& mkdir -p /data \
|
||||
&& chown -R ${pkg.user}:${pkg.user} /data \
|
||||
&& chown -R ${pkg.user}:${pkg.user} /var/log/${pkg.name} \
|
||||
&& chmod 555 ${pkg.installFolder}/bin/${pkg.name}.jar
|
||||
|
||||
USER ${pkg.user}
|
||||
|
||||
EXPOSE 9090
|
||||
EXPOSE 1883
|
||||
EXPOSE 5683/udp
|
||||
EXPOSE 5685/udp
|
||||
|
||||
VOLUME ["/data"]
|
||||
|
||||
CMD ["start-tb.sh"]
|
||||
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright © 2016-2023 The Thingsboard Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
firstlaunch=${DATA_FOLDER}/.firstlaunch
|
||||
|
||||
PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl)
|
||||
|
||||
if [ ! -d ${PGDATA} ]; then
|
||||
mkdir -p ${PGDATA}
|
||||
${PG_CTL} initdb
|
||||
fi
|
||||
|
||||
echo "Starting Postgresql..."
|
||||
${PG_CTL} start
|
||||
|
||||
RETRIES="${PG_ISREADY_RETRIES:-300}"
|
||||
until pg_isready -U ${pkg.user} -d postgres --quiet || [ $RETRIES -eq 0 ]
|
||||
do
|
||||
echo "Connecting to Postgres, $((RETRIES--)) attempts left..."
|
||||
sleep 1
|
||||
done
|
||||
|
||||
if [ ! -f ${firstlaunch} ]; then
|
||||
echo "Creating database..."
|
||||
psql -U ${pkg.user} -d postgres -c "CREATE DATABASE thingsboard"
|
||||
fi
|
||||
|
||||
echo "Postgresql is ready"
|
||||
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright © 2016-2023 The Thingsboard Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl)
|
||||
|
||||
${PG_CTL} stop
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright © 2016-2023 The Thingsboard Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
key="$1"
|
||||
|
||||
case $key in
|
||||
--loadDemo)
|
||||
LOAD_DEMO=true
|
||||
shift # past argument
|
||||
;;
|
||||
*)
|
||||
# unknown option
|
||||
;;
|
||||
esac
|
||||
shift # past argument or value
|
||||
done
|
||||
|
||||
if [ "$LOAD_DEMO" == "true" ]; then
|
||||
loadDemo=true
|
||||
else
|
||||
loadDemo=false
|
||||
fi
|
||||
|
||||
CONF_FOLDER="${pkg.installFolder}/conf"
|
||||
jarfile=${pkg.installFolder}/bin/${pkg.name}.jar
|
||||
configfile=${pkg.name}.conf
|
||||
upgradeversion=${DATA_FOLDER}/.upgradeversion
|
||||
|
||||
source "${CONF_FOLDER}/${configfile}"
|
||||
|
||||
echo "Starting ThingsBoard installation ..."
|
||||
|
||||
set -e
|
||||
|
||||
java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication \
|
||||
-Dinstall.load_demo=${loadDemo} \
|
||||
-Dspring.jpa.hibernate.ddl-auto=none \
|
||||
-Dinstall.upgrade=false \
|
||||
-Dlogging.config=/usr/share/thingsboard/bin/install/logback.xml \
|
||||
org.springframework.boot.loader.PropertiesLauncher
|
||||
|
||||
echo "${pkg.upgradeVersion}" > ${upgradeversion}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2023 The Thingsboard Authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
<!DOCTYPE configuration>
|
||||
<configuration scan="true" scanPeriod="10 seconds">
|
||||
|
||||
<appender name="fileLogAppender"
|
||||
class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>/var/log/thingsboard/thingsboard.log</file>
|
||||
<rollingPolicy
|
||||
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<fileNamePattern>/var/log/thingsboard/thingsboard.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
<maxHistory>30</maxHistory>
|
||||
<totalSizeCap>3GB</totalSizeCap>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<logger name="org.thingsboard.server" level="INFO" />
|
||||
<logger name="com.microsoft.azure.servicebus.primitives.CoreMessageReceiver" level="OFF" />
|
||||
<logger name="org.apache.kafka.common.utils.AppInfoParser" level="WARN"/>
|
||||
<logger name="org.apache.kafka.clients" level="WARN"/>
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="fileLogAppender"/>
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</root>
|
||||
|
||||
</configuration>
|
||||
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright © 2016-2023 The Thingsboard Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
start-db.sh
|
||||
|
||||
CONF_FOLDER="${pkg.installFolder}/conf"
|
||||
jarfile=${pkg.installFolder}/bin/${pkg.name}.jar
|
||||
configfile=${pkg.name}.conf
|
||||
firstlaunch=${DATA_FOLDER}/.firstlaunch
|
||||
|
||||
source "${CONF_FOLDER}/${configfile}"
|
||||
|
||||
if [ ! -f ${firstlaunch} ]; then
|
||||
install-tb.sh --loadDemo && touch ${firstlaunch}
|
||||
fi
|
||||
|
||||
if [ -f ${firstlaunch} ]; then
|
||||
echo "Starting ThingsBoard ..."
|
||||
|
||||
java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.ThingsboardServerApplication \
|
||||
-Dspring.jpa.hibernate.ddl-auto=none \
|
||||
-Dlogging.config=${CONF_FOLDER}/logback.xml \
|
||||
org.springframework.boot.loader.PropertiesLauncher
|
||||
else
|
||||
echo "ERROR: ThingsBoard is not installed"
|
||||
fi
|
||||
|
||||
stop-db.sh
|
||||
@@ -0,0 +1,24 @@
|
||||
#
|
||||
# Copyright © 2016-2023 The Thingsboard Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb -Dinstall.data_dir=/usr/share/thingsboard/data"
|
||||
export JAVA_OPTS="$JAVA_OPTS -Xlog:gc*,heap*,age*,safepoint=debug:file=/var/log/thingsboard/gc.log:time,uptime,level,tags:filecount=10,filesize=10M"
|
||||
export JAVA_OPTS="$JAVA_OPTS -XX:+IgnoreUnrecognizedVMOptions -XX:+HeapDumpOnOutOfMemoryError"
|
||||
export JAVA_OPTS="$JAVA_OPTS -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark"
|
||||
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=500 -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled -XX:MaxTenuringThreshold=10"
|
||||
export JAVA_OPTS="$JAVA_OPTS -XX:+ExitOnOutOfMemoryError"
|
||||
export LOG_FILENAME=thingsboard.out
|
||||
export LOADER_PATH=/usr/share/thingsboard/conf,/usr/share/thingsboard/extensions
|
||||
@@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright © 2016-2023 The Thingsboard Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
start-db.sh
|
||||
|
||||
CONF_FOLDER="${pkg.installFolder}/conf"
|
||||
jarfile=${pkg.installFolder}/bin/${pkg.name}.jar
|
||||
configfile=${pkg.name}.conf
|
||||
upgradeversion=${DATA_FOLDER}/.upgradeversion
|
||||
|
||||
source "${CONF_FOLDER}/${configfile}"
|
||||
|
||||
FROM_VERSION=`cat ${upgradeversion}`
|
||||
|
||||
echo "Starting ThingsBoard upgrade ..."
|
||||
|
||||
if [[ -z "${FROM_VERSION// }" ]]; then
|
||||
echo "FROM_VERSION variable is invalid or unspecified!"
|
||||
exit 1
|
||||
else
|
||||
fromVersion="${FROM_VERSION// }"
|
||||
fi
|
||||
|
||||
java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication \
|
||||
-Dspring.jpa.hibernate.ddl-auto=none \
|
||||
-Dinstall.upgrade=true \
|
||||
-Dinstall.upgrade.from_version=${fromVersion} \
|
||||
-Dlogging.config=/usr/share/thingsboard/bin/install/logback.xml \
|
||||
org.springframework.boot.loader.PropertiesLauncher
|
||||
|
||||
echo "${pkg.upgradeVersion}" > ${upgradeversion}
|
||||
|
||||
stop-db.sh
|
||||
+384
@@ -0,0 +1,384 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2023 The Thingsboard Authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.thingsboard</groupId>
|
||||
<version>0.6.2-SNAPSHOT</version>
|
||||
<artifactId>msa</artifactId>
|
||||
</parent>
|
||||
<groupId>org.thingsboard.msa</groupId>
|
||||
<artifactId>tb</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>ThingsBoard Docker Images</name>
|
||||
<url>https://thingsboard.io</url>
|
||||
<description>ThingsBoard Docker Images</description>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<main.dir>${basedir}/../..</main.dir>
|
||||
<pkg.name>thingsboard</pkg.name>
|
||||
<tb-postgres.docker.name>tb-postgres</tb-postgres.docker.name>
|
||||
<tb-cassandra.docker.name>tb-cassandra</tb-cassandra.docker.name>
|
||||
<pkg.installFolder>/usr/share/${pkg.name}</pkg.installFolder>
|
||||
<pkg.upgradeVersion>3.5.2</pkg.upgradeVersion>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard</groupId>
|
||||
<artifactId>application</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<classifier>deb</classifier>
|
||||
<type>deb</type>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-tb-postgres-deb</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>copy</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>org.thingsboard</groupId>
|
||||
<artifactId>application</artifactId>
|
||||
<classifier>deb</classifier>
|
||||
<type>deb</type>
|
||||
<destFileName>${pkg.name}.deb</destFileName>
|
||||
<outputDirectory>${project.build.directory}/docker-postgres</outputDirectory>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-tb-cassandra-deb</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>copy</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>org.thingsboard</groupId>
|
||||
<artifactId>application</artifactId>
|
||||
<classifier>deb</classifier>
|
||||
<type>deb</type>
|
||||
<destFileName>${pkg.name}.deb</destFileName>
|
||||
<outputDirectory>${project.build.directory}/docker-cassandra</outputDirectory>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-docker-tb-postgres-config</id>
|
||||
<phase>process-resources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${project.build.directory}/docker-postgres</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>docker</directory>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>docker-postgres</directory>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-docker-tb-cassandra-config</id>
|
||||
<phase>process-resources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${project.build.directory}/docker-cassandra</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>docker</directory>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>docker-cassandra</directory>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>com.spotify</groupId>
|
||||
<artifactId>dockerfile-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>build-docker-tb-postgres-image</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>build</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<skip>${dockerfile.skip}</skip>
|
||||
<repository>${docker.repo}/${tb-postgres.docker.name}</repository>
|
||||
<verbose>true</verbose>
|
||||
<googleContainerRegistryEnabled>false</googleContainerRegistryEnabled>
|
||||
<contextDirectory>${project.build.directory}/docker-postgres</contextDirectory>
|
||||
<noCache>true</noCache>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>tag-docker-tb-postgres-image</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>tag</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<skip>${dockerfile.skip}</skip>
|
||||
<repository>${docker.repo}/${tb-postgres.docker.name}</repository>
|
||||
<tag>${project.version}</tag>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>build-docker-tb-cassandra-image</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>build</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<skip>${dockerfile.skip}</skip>
|
||||
<repository>${docker.repo}/${tb-cassandra.docker.name}</repository>
|
||||
<verbose>true</verbose>
|
||||
<googleContainerRegistryEnabled>false</googleContainerRegistryEnabled>
|
||||
<contextDirectory>${project.build.directory}/docker-cassandra</contextDirectory>
|
||||
<noCache>true</noCache>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>tag-docker-tb-cassandra-image</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>tag</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<skip>${dockerfile.skip}</skip>
|
||||
<repository>${docker.repo}/${tb-cassandra.docker.name}</repository>
|
||||
<tag>${project.version}</tag>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>push-docker-image</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>push-docker-image</name>
|
||||
</property>
|
||||
</activation>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>com.spotify</groupId>
|
||||
<artifactId>dockerfile-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>push-latest-docker-tb-postgres-image</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>push</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<tag>latest</tag>
|
||||
<repository>${docker.repo}/${tb-postgres.docker.name}</repository>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>push-version-docker-tb-postgres-image</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>push</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<tag>${project.version}</tag>
|
||||
<repository>${docker.repo}/${tb-postgres.docker.name}</repository>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>push-latest-docker-tb-cassandra-image</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>push</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<tag>latest</tag>
|
||||
<repository>${docker.repo}/${tb-cassandra.docker.name}</repository>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>push-version-docker-tb-cassandra-image</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>push</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<tag>${project.version}</tag>
|
||||
<repository>${docker.repo}/${tb-cassandra.docker.name}</repository>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>push-docker-amd-arm-images</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>push-docker-amd-arm-images</name>
|
||||
</property>
|
||||
</activation>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>exec-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>push-latest-docker-amd-arm-tb-postgres-images</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>exec</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<executable>docker</executable>
|
||||
<workingDirectory>${project.build.directory}/docker-postgres</workingDirectory>
|
||||
<arguments>
|
||||
<argument>buildx</argument>
|
||||
<argument>build</argument>
|
||||
<argument>-t</argument>
|
||||
<argument>${docker.repo}/${tb-postgres.docker.name}:latest</argument>
|
||||
<argument>--platform=linux/amd64,linux/arm64</argument>
|
||||
<argument>-o</argument>
|
||||
<argument>type=registry</argument>
|
||||
<argument>.</argument>
|
||||
</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>push-version-docker-amd-arm-tb-postgres-images</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>exec</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<executable>docker</executable>
|
||||
<workingDirectory>${project.build.directory}/docker-postgres</workingDirectory>
|
||||
<arguments>
|
||||
<argument>buildx</argument>
|
||||
<argument>build</argument>
|
||||
<argument>-t</argument>
|
||||
<argument>${docker.repo}/${tb-postgres.docker.name}:${project.version}</argument>
|
||||
<argument>--platform=linux/amd64,linux/arm64</argument>
|
||||
<argument>-o</argument>
|
||||
<argument>type=registry</argument>
|
||||
<argument>.</argument>
|
||||
</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>push-latest-docker-amd-arm-tb-cassandra-images</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>exec</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<executable>docker</executable>
|
||||
<workingDirectory>${project.build.directory}/docker-cassandra</workingDirectory>
|
||||
<arguments>
|
||||
<argument>buildx</argument>
|
||||
<argument>build</argument>
|
||||
<argument>-t</argument>
|
||||
<argument>${docker.repo}/${tb-cassandra.docker.name}:latest</argument>
|
||||
<argument>--platform=linux/amd64,linux/arm64</argument>
|
||||
<argument>-o</argument>
|
||||
<argument>type=registry</argument>
|
||||
<argument>.</argument>
|
||||
</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>push-version-docker-amd-arm-tb-cassandra-images</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>exec</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<executable>docker</executable>
|
||||
<workingDirectory>${project.build.directory}/docker-cassandra</workingDirectory>
|
||||
<arguments>
|
||||
<argument>buildx</argument>
|
||||
<argument>build</argument>
|
||||
<argument>-t</argument>
|
||||
<argument>${docker.repo}/${tb-cassandra.docker.name}:${project.version}</argument>
|
||||
<argument>--platform=linux/amd64,linux/arm64</argument>
|
||||
<argument>-o</argument>
|
||||
<argument>type=registry</argument>
|
||||
<argument>.</argument>
|
||||
</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>jenkins</id>
|
||||
<name>Jenkins Repository</name>
|
||||
<url>https://repo.jenkins-ci.org/releases</url>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
</repositories>
|
||||
</project>
|
||||
Reference in new issue
Block a user