harbor源码分析之构建工具make(五)

时间:2022-06-13
本文章向大家介绍harbor源码分析之构建工具make(五),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

看一下容器中运行的打包脚本

#!/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的方式加载到相应的组件中。

在这里单独用了一个脚本用于镜像的构建。

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的初始化。

#!/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进行展开。接来下,将开始源码的学习。将分为以下几个模块。