jenkins 如何动态更改停靠合成图像字段

gmxoilav  于 2023-03-01  发布在  Jenkins
关注(0)|答案(2)|浏览(142)

我有一个docker-compose.yml类似于波纹管的东西:

networks:
  smstake: 
    ipam:
      config:
        - subnet: 10.0.10.0/24
services:
    app:
        
        image: smstake:latest
        ports:
          - 8000:80
        networks:
          - smstake

        depends_on:
          - db
        deploy:
          mode: replicated
          replicas: 1
          placement:
            constraints:
              - node.role == manager

我正在使用它在群模式下运行的节点中部署服务。
每次建立一个图像时,图像名称可能会根据用户传递的分支名称或标记名(作为图像的标记)而有所不同。我从jenkins运行它。例如:感觉:
如何动态地将图像名称添加到服务的图像参数中。由于Docker堆栈不支持构建。我甚至无法使用它。我无法找出正确的方法来完成它。
我正在尝试使用docker stack deploy -c docker-compose.yml stackname进行部署

我的确切要求是

1.有一个建立在Jenkins为我们建立形象的工作。
1.如果标记或分支名称发生更改,则图像名称会有所不同或更改
1.我们有一个构建作业来使用新创建的映像再次部署作业。
为新TAG创建新映像的原因是,我可以回滚到以前构建的映像。

**部分编辑:**在configuration.env文件中添加了要添加的image-name,该文件将在部署命令运行之前使用部署作业中的echo命令传递。docker-compose将如下所示

version: '3.4'
networks:
  smstake: 

services:

    db:
        image: mysql:5.7
        networks:
          - smstake
        ports:
          - "3306"
        env_file:
          - configuration.env
        environment:
          MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
          MYSQL_DATABASE: ${DB_NAME}
          MYSQL_USER: ${DB_USER}
          MYSQL_PASSWORD: ${DB_PASSWORD}
        volumes:
          - mysql_data:/var/lib/mysql
        deploy:
          mode: replicated
          replicas: 1
          
    app:
        env_file:
          - configuration.env
        image: ${SMSTAKE_VERSION}
        ports:
          - 8000:80
        networks:
          - smstake
        depends_on:
          - db
        deploy:
          mode: replicated
          replicas: 1
          placement:
            constraints:
              - node.role == manager
volumes:
    mysql_data:

为什么它不从configuration.env文件中阅读,我已经确认在那里设置了该键的正确值。
错误信息:

Creating service smstake_app
failed to create service smstake_app: Error response from daemon: rpc error: code = InvalidArgument desc = ContainerSpec: image reference must be provided
Build step 'Execute shell' marked build as failure
Finished: FAILURE
ui7jx7zq

ui7jx7zq1#

在docker-compose文件中,你可以根据环境变量进行变量替换。这在变量替换中有说明。
您可以使用以下命令为映像指定不同的版本:

image: smstake:${SMSTAKE_VERSION}

在部署的Jenkins作业中,您只需设置这个环境变量并运行Docker Stack命令:

SMSTAKE_VERSION=v1.2.0 docker stack deploy -c docker-compose.yml stackname
v2g6jxz6

v2g6jxz62#

你需要分两个阶段

docker-compose config | docker stack deploy -c - stackname

您需要使用docker-compose而不是docker composeV 2,因为docker stack不支持version-less清单(至少在21.xx版本之前不支持,该版本在撰写本文时还没有发布)
您还可以获得额外的好处,使用.env文件来读取您的环境,这也使开发人员更容易。

相关问题