使用Docker创建CI服务器代理

时间:2019-12-08 03:18:47

标签: docker npm continuous-integration dockerfile go-cd

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

我想以此作为开头,因为我知道我可能没有正确使用这些技术,但是我对atm并不了解。如果有更好的做事方法,我很乐于学习。

首先,我使用的是官方的GoCD docker镜像,并且工作正常。 创建空白代理也可以正常工作。 但是,我的一个项目需要构建节点,yarn和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是执行诸如安装yarn,node,webpack等之类的事情的正确地方吗??

  2. 如果可以,我如何确保通过npm安装的所有内容均可用?

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

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

干杯〜!

2 个答案:

答案 0 :(得分:0)

您应该将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纱线

然后注销并更新容器映像。现在,您有了带有所需包装的图像。另请阅读此article

答案 1 :(得分:0)

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

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

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

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