当前位置: 首页 > 知识库问答 >
问题:

使在docker上运行的gitlab-ci运行器在主机上使用shell执行器

淳于新
2023-03-14

我们有一个gitlab-ci运行器,它托管在服务器a下运行的docker容器上。现在,我们希望将gitlab-ci运行器配置为一个容器,以便在主机上执行命令。

我们尝试使用下面的命令将运行器注册为“shell”执行器,但它仍然试图只访问gitlab-ci运行器容器中的shell,而不是主机服务器shell。

sudo gitlab-runner注册
--非交互式
--URL“https://gitlab.com/”
--Registration-Token“xxxxxxxxxxxxxxxxxxxxxx”
--Executor“shell”
--Description“gitlab-runner”
--Run-Untagged
--Locked“false”

提前道谢!

共有1个答案

徐绪
2023-03-14

一个简单的解决方案是将容器SSH从运行程序内放入主机,并在运行程序访问主机后运行该命令,即

before_script:        
  - set -e
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null  
  - mkdir -p ~/.ssh
  - touch ~/.ssh/config
  - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >> ~/.ssh/config
     
example-stage:
  stage: example  
  script: 
    - ssh $SERVER "your shell command here"

其中$SSH_Private_Key$server应是您的SSH密钥和user@ipaddress的环境变量

注意,这假设遵循使用SSH键代替if密码的最佳实践,并且还假设一个基于Debian的主机,如果它不是Debian的,您的before_script将有所不同,即对于基于Alpine的发行版,将apt-get替换为apk add

 类似资料:
  • 问题内容: 如何从Docker容器控制主机? 例如,如何执行复制到主机的bash脚本? 问题答案: 那真的取决于您需要该bash脚本执行的操作! 例如,如果bash脚本仅回显某些输出,则可以执行 另一种可能性是您希望bash脚本安装某些软件-例如要安装docker-compose的脚本。你可以做类似的事情 但是,此时,您真的必须深入了解脚本在做什么,以允许容器从容器内部对其主机授予特定权限。

  • 如何从docker容器控制主机? 例如,如何执行复制到主机的bash脚本?

  • 问题内容: 我可以在主机上运行docker命令吗?我安装在Docker容器中,现在可以以某种方式在主机上使用命令(在后台使用Docker容器的aws)吗? 我的情况是这样的:我在生产主机上有数据库备份。现在我有Jenkins cron作业,它将从db容器中获取sql文件,并将其放入服务器文件夹中。现在我还希望jenkins将此备份文件上传到AWS存储上,但是在主机上我没有安装aws,也不想在主机上

  • 机器A和B之间的通信工作良好。我可以运行像或这样的命令,它会给出预期的结果: 我听说过,但还没有尝试过,但据我所知,这并不能解决我的问题。 有什么方法可以直接使用来实现这一点。解决办法可能是使用连接到远程主机,并直接从远程主机使用客户机,但我希望尽可能避免这种解决方案。 在上运行,而不是在本地计算机上运行。

  • 问题内容: 是否可以(直接使用命令或API)从远程主机启动容器? 假设我有两台具有不同体系结构的机器:-A是一台机器-B是一台机器 我想使用我的A机器在B机器上运行一个容器。起初,我认为可以使用以下命令: 但这个命令实际上拉图像,并试图在其中一些最终的机器运行它的原因很明显,你不能运行的图像所特有的一种机器。 机器A和B之间的通信正常。我可以运行诸如或的命令,它可以给我预期的结果: 我听说过并且还

  • 问题内容: 我在CI和CD上创建了Jenkinsfile,Dockerfile,Dockerfile.test到CI和CD,在GitHub上构建了我的服务器API,我在Jenkins上构建了该构建,并且构建成功,并且我的docker在Jenkinsfile阶段也在容器上运行,我创建了用于测试和部署在服务器API上,并使用docker作为容器 我也使用docker-compose在docker上运行