前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >harbor源码分析之构建工具make(五)

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

原创
作者头像
暮雨
修改2018-11-05 10:50:57
1.7K0
修改2018-11-05 10:50:57
举报
文章被收录于专栏:云端漫步

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • make介绍
  • harbor make文件解析
  • 总结
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档