繁体   English   中英

使用 docker 创建 CI 服务器代理

[英]Using docker to create CI server agents

我正在尝试使用 docker 为基本服务器和代理设置本地 GoCD CI 服务器。 我可以让一切正常运行,但是当我尝试确保代理容器中安装了我构建项目所需的所有东西时,问题就会出现。

我想以此作为序言,我知道我可能没有正确使用这些技术,但我不知道更好的 atm。 如果有更好的做事方法,我很乐意学习。

首先,我使用的是官方的 GoCD docker 镜像,效果很好。 创建一个空白代理也可以正常工作。 但是,我的一个项目需要构建节点、纱线和 webpack(好的 ol' react 站点)。 当然,标准代理容器除了安装在其上的代理之外什么都没有,所以我尝试使用 Dockerfile 来安装构建项目所需的所有技术。

FROM gocd/gocd-agent-ubuntu-18.04:v19.11.0

SHELL ["/bin/bash", "-c"] 
USER root

RUN apt-get update
RUN apt-get install -y git curl wget build-essential ca-certificates libssl-dev htop openjdk-8-jre python python-pip

RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update && apt-get install -y yarn

# This user is created in the base agent image
USER go

ENV NVM_DIR /home/go/.nvm
ENV NODE_VERSION 10.17.0

RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.1/install.sh | bash \
    && . $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default \
    && npm install -g webpack webpack-cli

ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/v$NODE_VERSION/bin:$PATH

这是该文件的当前版本,但我已经经历了很多次挫折,其中全局安装的 npm 包永远不会出现在路径上,因此不方便使用。

docker build 工作正常,只是在 Dockerfile 的这个迭代中,当代理尝试运行构建时没有找到 webpack。

我的问题是:

  1. Dockerfile 是安装纱线、节点、webpack 等的正确位置吗?

  2. 如果是这样,我如何确保通过 npm 安装的所有内容实际上都可用?

  3. 如果不是,那么当前的最佳做法是什么?

任何帮助、想法和轶事都受到欢迎和赞赏!

干杯~!

您应该将 gocd-server 和 gocd-agent 分开到各种容器中。

拉取镜像:

  • docker pull gocd/gocd-server:v18.10.0 docker pull
  • gocd/gocd-agent-alpine-3.8:v18.10.0

构建并运行它们,检查是否正常。 然后连接到代理容器中的 bash

docker exec -it gocd-agent bash

使用 alpine 包管理器安装二进制文件。

apk 添加 --no-cache nodejs yarn

然后注销并更新容器映像。 现在你有一个包含所需包的图像。 另请阅读这篇文章

gocd 代理有两种选择。

第一个是代理使用 docker,并创建其他容器,用于管道需要的任何目的。 因此,您可以有很多具有此选项的代理,并且规则或定义出现在管道中。 代理只执行。

第二个是安装了您需要的所有程序的代理。 我用这个。 对于这种情况,您将 Dockerfile 与 all 一起使用,并为所有代理生成映像。

例如,我有一个带有 gcloud、kubectl、声纳扫描仪和 jmeter 的代理,他们在部署前用声纳进行测试,然后在 gcp 中部署,最后一步,在部署后用 jmeter 进行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM