在哪里开始写一个步骤的适当位置?
如果我在Dockerfile中执行此操作,它会写入Docker镜像,但从不将更改传播到EFS,以便模板可用作Jenkins服务器上的项目。
我已经尝试将写入命令放在jenkins.sh
中,但我无法弄清楚它是如何运行的,无论如何它不会将模板放在我需要的地方。
答案 0 :(得分:0)
您需要使用卷启动任务,然后将该卷装入容器。这样,您可以在多个Jenkins启动/停止周期中拥有持久存储。
您的任务定义如下所示(我已删除了不相关的部分)。重要的组件是mountPoints
和volumes
。并不是说不与volumesFrom
相同,因为您不是从另一个容器装载卷,而是在一个任务中运行它们。
这也假设您在默认的JENKINS_HOME
目录中运行Jenkins,并将您的EFS驱动器安装到EC2实例上的/mnt/efs/jenkins-home
。
{
"requiresAttributes": ...
"taskDefinitionArn": ... your ARN ...,
"containerDefinitions": [
{
"portMappings": ...
.... more config here .....
"mountPoints": [
{
"containerPath": "/var/jenkins_home",
"sourceVolume": "jenkins-home",
}
]
}
],
"volumes": [
{
"host": {
"sourcePath": "/mnt/efs/jenkins-home"
},
"name": "jenkins-home"
}
],
"family": "jenkins"
}
ECS中的任务定义:
答案 1 :(得分:0)
原始问题包括:
将模板写入EFS上的目录每次 ECS 启动任务
除了@luke-peterson's answer之外,您还可以使用shell脚本作为docker文件中的入口点,以便在已挂载的EFS文件夹和容器之间复制文件。
在dockerfile中使用以下指令代替ENTRYPOINT:
CMD ["sh", "/app/startup.sh"]
在startup.sh中,您可以自由复制文件并运行该应用程序(在我的示例中为 .net核心应用程序):
cp -R /app/wwwroot/. /var/jenkins-home
dotnet /app/app.dll
当然,您也可以通过编程方式来植入应用程序本身。