make介绍
make是一个构建工具,现在前端的构建工具有很多.像gulp,grunt等等,它们常被用在前端项目中.在后端领域常使用make来做构建这件事情.
具体的用法说明,可以阅读阮一峰写的Make 命令教程
harbor make文件解析
在完成了以上make教程的学习之后,再来读这个makefile,应该难度也不大。
大体上分为四大模块,编译,构建,安装,清除
这里提供了两种编译方式,本地编译和容器编译
本地编译: go build -o 编译结果路径 源码文件路径
容器编译: docker run --rm -v 源码路径:容器挂载路径 -w 工作目录 golandImage go build -o 可执行路径
harbor的UI页面是使用angular4编写的,这里需要对angular的代码进行构建打包,这里是通过容器进行构建打包,通过目录挂载的方式,加载到ui组件下的static目录下。
docker run --rm -v src/ui/static:/clarity-seed/dist -v src/ui_ng/src:/clarity-seed/src angularImage /bin/bash /entrypoint.sh
看一下容器中运行的打包脚本
代码语言:javascript复制#!/bin/bash
set -e
cd /clarity-seed
rm -rf dist/*
npm_proxy=
while getopts p: option
do
case "${option}"
in
p) npm_proxy=${OPTARG};;
esac
done
if [ ! -z "$npm_proxy" -a "$npm_proxy" != " " ]; then
npm config set proxy $npm_proxy
fi
npm install
ng build
cp -r ./src/i18n/ dist/
至此,完成了对编译模块的解析,接来下,看一下构建模块
harbor使用容器的方式部署,build将编译后的exec文件通过docker copy的方式加载到相应的组件中。
在这里单独用了一个脚本用于镜像的构建。
代码语言:javascript复制FROM library/photon:1.0
RUN mkdir /harbor/
COPY ./make/dev/adminserver/harbor_adminserver /harbor/
RUN chmod u x /harbor/harbor_adminserver
WORKDIR /harbor/
ENTRYPOINT ["/harbor/harbor_adminserver"]
harbor的db也容器化,通过一个dockerfile在容器中运行一个 shell脚本完成db的初始化。
代码语言:javascript复制#!/bin/bash
set -e
if [ ! -d '/var/lib/mysql/mysql' -a "${1%_safe}" = 'mysqld' ]; then
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then
echo >&2 'error: database is uninitialized and MYSQL_ROOT_PASSWORD not set'
echo >&2 ' Did you forget to add -e MYSQL_ROOT_PASSWORD=... ? v2'
exit 1
fi
mysql_install_db --user=mysql --datadir=/var/lib/mysql
# These statements _must_ be on individual lines, and _must_ end with
# semicolons (no line breaks or comments are permitted).
# TODO proper SQL escaping on ALL the things D:
printf -v MYSQL_ROOT_PASSWORD "%q" ${MYSQL_ROOT_PASSWORD}
TEMP_FILE='/tmp/mysql-first-time.sql'
cat > "$TEMP_FILE" <<-EOSQL
DELETE FROM mysql.user ;
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
DROP DATABASE IF EXISTS test ;
EOSQL
if [ "$MYSQL_DATABASE" ]; then
echo "CREATE DATABASE IF NOT EXISTS $MYSQL_DATABASE ;" >> "$TEMP_FILE"
fi
if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then
echo "CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;" >> "$TEMP_FILE"
if [ "$MYSQL_DATABASE" ]; then
echo "GRANT ALL ON $MYSQL_DATABASE.* TO '$MYSQL_USER'@'%' ;" >> "$TEMP_FILE"
fi
fi
echo 'FLUSH PRIVILEGES ;' >> "$TEMP_FILE"
cat /tmp/r.sql >> "$TEMP_FILE"
set -- "$@" --init-file="$TEMP_FILE"
fi
chown -R mysql:mysql /var/lib/mysql
exec "$@"
还有一个不同的组件log,使用的是syslog,针对日志这块内容,后续会开一遍文章,专门对日志这块内容进行展开。
在安装这一步,主要是通过docker-compose 启动编排脚本
dcoker-compose -f docker-compose.yaml -d up
最后一步,清理,不做详解。
总结
本篇对harbor的makefile进行了展开。对于整个项目的安装和构建部分基本已经完成。还有一个k8s的部署,对k8s专题中,将以此为demo进行展开。接来下,将开始源码的学习。将分为以下几个模块。