实例
配置如下:
注意:在实际工作中,一般都会搭建nexus私库给开发用的,而像java这样的项目中很多依赖包的用的都是nexus私库的地址,这时在构建项目时就需要给jenkins配置私库的配置文件,即在/var/lib/jenkins/.m2/下添加settings.xml配置文件。
下面附上这个实例中salt的所用到的sls文件,如下:
sls文件所在的位置:
[root@test11 deploy]# ls /srv/salt/state/deploy/
files java.sls
[root@test11 deploy]# ls /srv/salt/state/deploy/files/java/
service-7.sh system.sh
发送项目到相应服务器运行的java.sls文件:
[root@test11 deploy]# cat /srv/salt/state/deploy/java.sls
{% set project_name = pillar['project']['name'] -%}
base_dirs:
file.directory:
- names:
- /ubox/apps/{{ project_name }}
- /ubox/logs/{{ project_name }}
- /ubox/share/config/{{ project_name }}
- /var/run/java
- user: root
- group: root
- dir_mode: 755
- makedirs: True
release_code:
cmd.run:
- name: rsync -rl {%- if salt['pillar.get']('project:clean') %} --delete {%- endif %} test11.uboxol.com::artifacts/{{ project_name }}/ /ubox/apps/{{ project_name }}
- require:
- file: base_dirs
service_scripts:
file.managed:
- name: /etc/init.d/{{ project_name | replace('/', '_') }}
- source: salt://deploy/files/java/service-7.sh
- user: root
- group: root
- mode: 755
- template: jinja
- require:
- file: base_dirs
system_scripts:
file.managed:
- name: /lib/systemd/system/{{ project_name | replace('/', '_') }}.service
- source: salt://deploy/files/java/system.sh
- user: root
- group: root
- mode: 755
- template: jinja
- require:
- file: service_scripts
cmd.run:
- name: systemctl daemon-reload
project_service:
service.running:
- name: {{ project_name | replace('/', '_') }}
- require:
- file: system_scripts
- watch:
- cmd: release_code
{%- if salt['pillar.get']('project:tmp_dirs') %}
tmp_dirs:
file.directory:
- user: root
- group: root
- dir_mode: 755
- makedirs: True
- names:
{%- for tmp_dir in salt['pillar.get']('project:tmp_dirs') %}
- /ubox/apps/{{ project_name }}/{{ tmp_dir }}
{%- endfor %}
- require:
- cmd: release_code
{%- endif %}
java的启动、停止脚本:
[root@test11 deploy]# cat /srv/salt/state/deploy/files/java/service-7.sh
{% set project_name = pillar['project']['name'] -%}
{% set jar_name = salt['pillar.get']('java:jar_name') -%}
{% set java_opts = salt['pillar.get']('java:java_opts') -%}
#!/bin/sh
#
# Source function library.
. /etc/rc.d/init.d/functions
# limit
ulimit -SH -n 1048576 -u 655350
PID_FILE='/var/run/java/{{ project_name | replace('/', '_') }}.pid'
KILL_SLEEP_INTERVAL=30
start() {
if status -p $PID_FILE {{ project_name }}; then
echo "{{ project_name }} is still running !" >&2
exit 1
fi
# Run the program!
# wait 2 second
sleep 2
cd /ubox/apps/{{ project_name }}
{%- if 'ysera' in project_name %}
export LD_PRELOAD=/ubox/apps/glusterfs/glibc/lib/libc.so.6
{% endif %}
exec java -jar -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Xloggc:/ubox/logs/{{ project_name }}/gc.log -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -Djava.awt.headless=true -DappHome=/ubox/share/config/{{ project_name }} {{ java_opts }} {{ jar_name }} >/dev/null 2>&1 &
# Generate the pidfile from here. If we instead made the forked process
# generate it there will be a race condition between the pidfile writing
# and a process possibly asking for status.
echo $! > $PID_FILE
echo "{{ project_name }} started."
}
stop() {
if [ -z "$PID_FILE" ]; then
echo "Kill {{ project_name }} failed: \$PID not set"
else
if [ -f "$PID_FILE" ]; then
PID=`cat "$PID_FILE"`
echo "Killing {{ project_name }} with the PID: $PID"
kill $PID
while [ $KILL_SLEEP_INTERVAL -ge 0 ]; do
if ! kill -0 $PID &> /dev/null;then
echo "The {{ project_name }} process has been killed."
break
fi
if [ $KILL_SLEEP_INTERVAL -gt 0 ]; then
sleep 1
fi
KILL_SLEEP_INTERVAL=`expr $KILL_SLEEP_INTERVAL - 1 `
done
if [ $KILL_SLEEP_INTERVAL -lt 0 ]; then
echo "{{ project_name }} has not been killed completely yet. Force kill!"
kill -9 `cat "$PID_FILE"`
fi
rm -f $PID_FILE
fi
fi
}
rh_status() {
status -p $PID_FILE {{ project_name }}
}
case "$1" in
start)
$1
;;
stop)
$1
;;
restart)
stop
start
;;
status)
rh_status
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
exit 2
esac
centos7下的自定义脚本服务:
[root@test11 deploy]# cat /srv/salt/state/deploy/files/java/system.sh
{% set project_name = pillar['project']['name'] -%}
[Unit]
Description=summer
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/{{ project_name }} start
ExecReload=/etc/init.d/{{ project_name }} restart
ExecStop=/etc/init.d/{{ project_name }} stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
文档更新时间: 2019-06-25 17:24 作者:子木