在GitLab ci Docker构建中执行外部bash脚本

在GitLab ci Docker构建中执行外部bash脚本,docker,gitlab,gitlab-ci-runner,dind,Docker,Gitlab,Gitlab Ci Runner,Dind,我想从gitlab-ci.yml执行一个外部(在本地机器上)bash脚本,它使用docker:stable映像。我想执行位于gitlab docker映像外部的startup.sh。这是可能的还是有更好的选择 gitlab-ci.yaml image: docker:stable #Build script variables: CI_DEBUG_TRACE: "true" DOCKER_DRIVER: overlay before_script: - docker --ver

我想从gitlab-ci.yml执行一个外部(在本地机器上)bash脚本,它使用docker:stable映像。我想执行位于gitlab docker映像外部的startup.sh。这是可能的还是有更好的选择

gitlab-ci.yaml

image: docker:stable

#Build script

variables:
  CI_DEBUG_TRACE: "true"
  DOCKER_DRIVER: overlay

before_script:
  - docker --version

build:
  services:
  - docker:dind
  script:
    - docker build --no-cache -t <tag> .
    - docker login -u root -p <pass> <registry>
    - docker tag ...
    - docker push ...
    - echo "build completed"
  stage: build
  tags:
    - <tag>

deploy_staging:
  stage: deploy
  script:
    - ./sh startup.sh

image:docker:stable
#构建脚本
变量:
CI_调试_跟踪:“真”
DOCKER_驱动程序:覆盖
在脚本之前:
-docker--版本
建造:
服务:
-码头工人:丁
脚本:
-docker构建——没有缓存-t。
-docker登录-u根-p
-码头工人标签。。。
-码头工人推。。。
-回显“构建完成”
阶段:建造
标签:
- 
部署(u)登台:
阶段:部署
脚本:
-./sh startup.sh
bash脚本

#!/bin/bash

docker login -u root -p <pass>
docker pull <image>
docker-compose up -d
#/bin/bash
docker登录-u根-p
码头工人拉力
docker compose up-d

我不确定这是否是您用例的最佳实践,但是 与映像共享文件的简单方法是添加卷,并通过编辑config.toml文件将此代码共享到映像中

将此行添加到[runners.docker]下的config.toml

卷=[“/cache”,启动路径。sh:/root/scripts”]

然后在你的.gilatb.yml

    deploy_staging:
      stage: deploy
      script:
        - chmod +x /root/scripts/startup.sh     
        - ./sh /root/scripts/startup.sh

你能详细说明一下你想通过这个设置实现什么目标吗?问题很复杂。你想在容器内还是容器外执行外部脚本?所以我目前的设置是:我的服务器上有一个docker gitlab实例,当我将代码提交到我的存储库时,它会自动生成一个带有更新代码的docker映像并将其作为“最新”映像推送到gitlab注册表。现在,构建完成后,bash脚本应该自动从gitlab注册表中提取新映像,docker将其组合起来,以便重新创建服务于网站的容器。构建脚本(gitlab ci.yaml)完全在docker容器中发生,因此我不知道它如何在主机上访问bash脚本。我希望能清除它?这将在gitlab-ci.yml文件中创建的docker映像中执行sh,而不是在文件所在的服务器上,对吗?