使用 docker 创建 CI 服务器代理



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

我想在前面说我知道我可能没有正确使用这些技术,但我不知道更好的 atm。如果有更好的做事方法,我很想学习。

首先,我使用的是官方的GoCD docker镜像,效果很好。 创建空白代理也可以正常工作。 但是,我的一个项目需要构建节点,纱线和webpack(良好的反应站点(。 当然,标准代理容器上只安装了代理,所以我有机会使用 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 构建工作正常,只是在 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 添加 --无缓存节点 JS 纱线

然后注销并更新容器映像。现在,您有一个包含所需包装的图像。另请阅读本文。

对于 gocd 代理,您有两种选择。

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

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

例如,我有一个带有gcloud,kubectl,sonar scanner和jmeter的代理,他们在部署之前使用声纳进行测试,然后在gcp中部署,最后一步,它在部署后使用jmeter进行测试。

最新更新