zoukankan      html  css  js  c++  java
  • 在Docker中运行gocd

    gocd是一个持续集成的工具,可视化效果非常好

    运行gocd-server

    1
    2
    3
    4
    5
    docker run -d --name server 
    -p8153:8153 -p8154:8154
    -v /path/to/godata:/godata
    -v /path/to/go:/home/go
    gocd/gocd-server:v18.1.0

    我们就可以通过http://go-server-ip:8153来访问gocd-server的web了

    运行gocd-agent

    1
    2
    3
    4
    5
    6
    7
    docker run -d --name gocd 
    -e AGENT_AUTO_REGISTER_KEY=53f57d90-c749-4758-b430-5af341117b0e
    -e AGENT_AUTO_REGISTER_RESOURCES=diagnosis,bj
    -e AGENT_AUTO_REGISTER_ENVIRONMENTS=bj
    -e AGENT_AUTO_REGISTER_HOSTNAME=diagnosis_bj
    -e GO_SERVER_URL=https://go-server-ip:8154/go
    gocd/gocd-agent-centos-7:v18.1.0

    其中AGENT_AUTO_REGISTER_KEY是在gocd-server的配置中。
    执行完之后,就可以在web中看到添加的agent。

    安装插件

    1
    2
    cd /path/to/godata/plugins/external
    wget https://github.com/gocd-contrib/script-executor-task/releases/download/0.3/script-executor-0.3.0.jar

    DOOD

    我们通常希望在agent中执行docker命令在宿主中建立镜像运行容器网上大家把这种技术称之为DOOD(docker outside of docker)。
    docker命令只能在root权限下执行,但是gocd的脚本是在go用户下运行的所以会报错,解决办法就是想办法让脚本切换到root下运行脚本,具体办法如下:

    创建su文件

    su的文件内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #%PAM-1.0
    auth sufficient pam_rootok.so
    # Uncomment the following line to implicitly trust users in the "wheel" group.
    auth sufficient pam_wheel.so trust use_uid
    # Uncomment the following line to require a user to be in the "wheel" group.
    auth required pam_wheel.so use_uid
    auth substack system-auth
    auth include postlogin
    account sufficient pam_succeed_if.so uid = 0 use_uid quiet
    account include system-auth
    password include syste 大专栏  在Docker中运行gocdm-auth
    session include system-auth
    session include postlogin
    session optional pam_xauth.so

    创建dockerfile制作dood-gocd镜像

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    FROM gocd/gocd-agent-centos-7:v18.1.0
    RUN yum install -y yum-utils
    device-mapper-persistent-data
    lvm2
    RUN yum-config-manager
    --add-repo
    https://download.docker.com/linux/centos/docker-ce.repo
    RUN yum install -y docker-ce
    RUN yum -y install sudo
    RUN echo 'go ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
    RUN gpasswd -a go wheel
    COPY su /etc/pam.d/su
    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    RUN echo 'Asia/Shanghai' >/etc/timezone

    这里的root方案就是在脚本中调用su root切换到root账户,并且取消输入密码。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    docker build -t gocd-agent-dood .

    docker run -d --name gocd
    -e AGENT_AUTO_REGISTER_KEY=53f57d90-c749-4758-b430-5af341117b0e
    -e AGENT_AUTO_REGISTER_RESOURCES=diagnosis,bj
    -e AGENT_AUTO_REGISTER_ENVIRONMENTS=bj
    -e AGENT_AUTO_REGISTER_HOSTNAME=diagnosis_bj
    -e GO_SERVER_URL=https://go-server-ip:8154/go
    -v /var/run/docker.sock:/var/run/docker.sock
    gocd-agent-dood

    上面命令里的挂载就是把宿主机的docker.sock挂载到容器中,这样我们就能在gocd-agent-dood的容器中运行dock命名在宿主机上创建镜像运行容器了。

    script如下:

    1
    2
    3
    4
    su - root <<EOF
    xxx
    xxx
    xxx
  • 相关阅读:
    python 函数嵌套
    python 函数对象
    python 函数参数
    python 连接MySQL报错及解决方案
    解决 No module named pip
    python 文件处理
    python
    python 元祖
    python 读取域名信息
    ubuntu 配置网卡,DNS, iptables
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12267957.html
Copyright © 2011-2022 走看看