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

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏自然语言处理

Anaconda+Sublime搭建机器学习开发环境

1 安装Anaconda集成环境,Anaconda下载,安装下一步一路安装结束。(无需环境变量配置),配置完成后,查看是否成功。

11420
来自专栏Linux 杂货铺

使用Apache Guacamole连接虚拟云桌面

Apache Guacamole是一款HTML5应用程序,可通过RDP,VNC和其他协议访问远程桌面。您可以创建一个虚拟云桌面,用户通过Web浏览器即可访问。本...

4.9K50
来自专栏jeremy的技术点滴

CentOS7部署k8s集群

2.1K50
来自专栏乐沙弥的世界

使用nid命令修改 db name 及 dbid

    工作中不可避免地碰到需要修改dbname以及dbid的情形,如将数据库恢复到同一台机器的情形是其中之一。但dbname以及dbid是用于标识数据库的重要...

10920
来自专栏数据和云

Oracle 12.2 新特性 | PDB不同字符集变更深入解析

从12c版本12.1开始,就有了新特性——Pluggable Database,相比较之前通过schema的管理方式实现多用户管理,Pluggable Data...

39390
来自专栏数据和云

【深度好文】有关延迟块清除和一致性读

在《ORA-1555错误解决一例》一文中,当时尝试模拟UNDO段头事务表被覆盖的情况下出现ORA-01555错误,没有成功。实际上没有成功的原因是事务数虽然多,...

35550
来自专栏张戈的专栏

基于Docker部署ceph分布式文件系统(Luminous版本)

本文记录分享了ceph分布式文件系统的详尽部署过程,既是为了方便自己后续回溯,也希望能给初次接触ceph的同学提供些许参考。

69560
来自专栏游戏杂谈

webgame开发中的文件解密

因为图片文件经过加密,已经成了二进制流的文件了(一堆乱码),只能使用URLStream来加载资源了。

11440
来自专栏闵开慧

修改eclipse中的默认工作路径

首先,关闭Eclipse并打开eclipse的安装目录,依次打开以下目录,configuration\.settings 文件夹下有一个文件 org.eclip...

335100
来自专栏杨建荣的学习笔记

奇怪的登录问题及解决 (75天)

最近新建了好几个测试库,有一个库在过了一段时间之后,出现了很奇怪的问题,有时候能够登录,有时候又登不上。 通过sqlplus登录,报错如下: >sqlplus ...

21860

扫码关注云+社区

领取腾讯云代金券