我们希望运行引导程序默认artifactory.config.xml
并security.import.xml
文件来预定义我们的用户和存储库。
我们还希望使用持久存储(特别是 PVC(在容器重启之间持久化项目。
根据他们的文档,您可以通过将配置文件放入artifactory_extra_config
来设置额外的配置,它们将在容器启动时复制到$ARTIFACTORY_HOME/etc
目录中。然而,Artifactory OSS似乎并非如此。
根据掌舵图:
Bootstrapping Artifactory
IMPORTANT: Bootstrapping Artifactory needs license. Pass license as shown in above section.
文档还提到,将artifactory.config.import.xml
和security.import.xml
放在$ARTIFACTORY_HOME/etc
目录中允许引导。
我们已经从 Artifactory-oss:6.1.0 基础映像构建了一个自定义 docker 映像,只需将两个配置文件复制到$ARTIFACTORY_HOME/etc
目录,但在/var/opt/jfrog/artifactory
处附加 PVC 似乎覆盖了导致引导失败的配置。
我发现 Helm 图表将包含引导配置文件的 ConfigMap 挂载到/bootstrap/
卷中,并将它们复制到lifecycle.postStart
命令中的/artifactory_extra_conf
。这似乎也不起作用。
我注意到Artifactory PRO基础映像的ENV
包含ARTIFACTORY_EXTRA_CONF=/artifactory_extra_conf
而Artifactory OSS不包含。
我还尝试了一些实验,将自定义映像中的配置文件复制到其他目录并使用initContainers
复制加载卷,但到目前为止,我尝试过的任何东西都不允许我引导 Arrtifactory OSS 并使用挂载在/var/opt/jfrog/artifactory
的持久卷。
我在 Artifactory 的 Dockerfile 中指出,/var/opt/jfrog/artifactory
子目录实际上链接到基本映像中相应的/opt/jfrog/artifactory
目录。
我们的解决方案是修改他们的/entrypoint-artifactory.sh
并创建自定义映像。
首先,我们在/etnrypoint-artifactory.sh
中添加了一个copyExtraConf()
的新函数
copyExtraConf () {
logger "Copying from artifactory_extra_conf"
chown ${ARTIFACTORY_USER_NAME}:${ARTIFACTORY_USER_NAME} /artifactory_extra_conf/*
cp -pv /artifactory_extra_conf/* ${ARTIFACTORY_HOME}/etc/
}
然后,我们在设置目录和用户后调用它,以防止装载卷的所有权错误:
printDockerFileLocation
checkULimits
checkMounts
setupDataDirs
setupArtUser
# CUSTOM:START - do this after setupDataDirs and setupArtUser so we can chown and copy our files.
copyExtraConf
# CUSTOM:END
setAccessCreds
setMasterKey
setupPermissions
setDBType
addExtraJavaArgs
Dockerfile:
# Dockerfile
#
# NOTE:
# entrypoint-artifactory.sh is based on the one from artifactory-oss:6.1.0
# When changing versions, be sure to compare entrypoint-artifactory-ta.sh to entrypoint-artifactory.sh
FROM docker.bintray.io/jfrog/artifactory-oss:6.1.0
COPY entrypoint-artifactory.sh /entrypoint-artifactory.sh
RUN chmod +x /entrypoint-artifactory.sh
ENTRYPOINT ["/entrypoint-artifactory.sh"]
COPY configs/artifactory.config.import.xml /artifactory_extra_conf/artifactory.config.import.xml
COPY configs/security.import.xml /artifactory_extra_conf/security.import.xml
我必须成为root才能交换/entrypoint-artifactory.sh
FROM docker.bintray.io/jfrog/artifactory-oss:6.16.0
USER root
COPY entrypoint-artifactory.sh /entrypoint-artifactory.sh
RUN chmod +x /entrypoint-artifactory.sh
COPY configs/artifactory.config.import.xml /artifactory_extra_conf/
COPY configs/security.import.xml /artifactory_extra_conf/
USER artifactory
ENTRYPOINT ["/entrypoint-artifactory.sh"]