• DEVOPS技术实践_15:使用Docker作为Jenkins的slave


    前面实验了使用docker搭建一个jenkins,下面实验使用docker作为jenkins的slave节点

    1. 环境准备

    • 一个运行Docker的主机或者群集
    • Jenkins应该能访问互联网,方便安装插件。
    • Jenkins服务器能够和GitHub通信。
    • Jenkinss对Java所需要的Git,和Maven配置应该配置好。
    • 一个Jenkins master.

    2. 在Docker主机上开启远端的访问API

    此处针对Docker 18.03

    /etc/docker/daemon.json会被docker.service的配置文件覆盖,直接添加daemon.json不起作用。可以有如下几种设置:

    直接编辑配置文件:Centos中docker daemon配置文件在/lib/systemd/system/docker.service,找到以下字段,在后面添加如下,注意,此处不能用”fd://”,否则报错

    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    BindsTo=containerd.service
    After=network-online.target firewalld.service containerd.service
    Wants=network-online.target
    Requires=docker.socket
    
    [Service]
    Type=notify
    # the default is not to use systemd for cgroups because the delegate issues still
    # exists and systemd currently does not support the cgroup feature set required
    # for containers run by docker
    #ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375    #添加
    ExecReload=/bin/kill -s HUP $MAINPID
    TimeoutSec=0
    RestartSec=2
    Restart=always
    
    # Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
    # Both the old, and new location are accepted by systemd 229 and up, so using the old location
    # to make them work for either version of systemd.
    StartLimitBurst=3
    
    # Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
    # Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
    # this option work for either version of systemd.
    StartLimitInterval=60s
    
    # Having non-zero Limit*s causes performance problems due to accounting overhead
    # in the kernel. We recommend using cgroups to do container-local accounting.
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    
    # Comment TasksMax if your systemd version does not support it.
    # Only systemd 226 and above support this option.
    TasksMax=infinity
    
    # set delegate yes so that systemd does not reset the cgroups of docker containers
    Delegate=yes

    执行

    [root@node6 ~]# systemctl daemon-reload

    [root@node6 ~]# systemctl restart docker.service

    安装Docker插件

    点击【管理Jenkins】–【管理插件】–【可选插件】然后安装此插件

    3. 配置Docker插件

    点击系统管理----->系统设置

    添加配置

    然后点击保存

    4. 创建Docker镜像

    需要创建一个Docker的镜像在Docker主机上,方便我们在创建Jenkins slaves时使用。

    查看Docker的镜像

    [root@node6 ~]# docker images

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    jenkins/jenkins     lts                 fac78e370c0b        6 days ago          568MB

    拉取ubuntu的镜像

    由于拉取的Ubuntu安装git有点问题,重新拉去一个ubuntu16.04的镜像

    [root@node6 ~]# docker pull dftbcros.mirror.aliyuncs.com/library/ubuntu:16.04

    16.04: Pulling from library/ubuntu
    e80174c8b43b: Pull complete 
    d1072db285cc: Pull complete 
    858453671e67: Pull complete 
    3d07b1124f98: Pull complete 
    Digest: sha256:bb5b48c7750a6a8775c74bcb601f7e5399135d0a06de004d000e05fd25c1a71c
    Status: Downloaded newer image for dftbcros.mirror.aliyuncs.com/library/ubuntu:16.04
    dftbcros.mirror.aliyuncs.com/library/ubuntu:16.04 

    [root@node6 ~]# docker images

    REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
    dftbcros.mirror.aliyuncs.com/library/ubuntu   16.04               5f2bf26e3524        3 days ago          123MB
    jenkins/jenkins                               lts                 fac78e370c0b        6 days ago          568MB
    centos                                        latest              0f3e07c0138f        4 weeks ago         220MB

    [root@node6 ~]# docker pull centos

    Using default tag: latest
    latest: Pulling from library/centos
    729ec3a6ada3: Pull complete 
    Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
    Status: Downloaded newer image for centos:latest
    docker.io/library/centos:latest

    执行下面的命令运行Docker容器并在容器中执行命令。

    root@37e4f2be0a41:/# apt-get update

    Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]                                        
    Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
    Get:3 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [985 kB]                                   
    Get:4 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]                                               
    Get:5 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]                                             
    Get:6 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]                                            
    Get:7 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.7 kB]                            
    Get:8 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [589 kB]                               
    Get:9 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [6281 B]                             
    Get:10 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]                                     
    Get:11 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]                                       
    Get:12 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]                                      
    Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [1362 kB]                                   
    Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.1 kB]                             
    Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [993 kB]                                
    Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [19.3 kB]                             
    Get:17 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [7942 B]                                  
    Get:18 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [8807 B]                              
    Fetched 16.1 MB in 6min 48s (39.5 kB/s)                                                                                
    Reading package lists... Done

     安装git

    root@37e4f2be0a41:/# apt-get install -y git

    添加用户

    root@:37e4f2be0a41/# adduser  jenkins
    Adding user `jenkins' ...
    Adding new group `jenkins' (1000) ...
    Adding new user `jenkins' (1000) with group `jenkins' ...
    Creating home directory `/home/jenkins' ...
    Copying files from `/etc/skel' ...
    Enter new UNIX password: 
    Retype new UNIX password: 
    passwd: password updated successfully
    Changing the user information for jenkins
    Enter the new value, or press ENTER for the default
        Full Name []: 123
        Room Number []: 12
        Work Phone []: 312
        Home Phone []: 21
        Other []: 21
    Is the information correct? [Y/n] Y

    安装SSH server

    root@37e4f2be0a41:/# apt-get install openssh-serverd

    root@37e4f2be0a41:/# mkdir /var/run/sshd

    5. 安装所需的应用

    root@37e4f2be0a41:/# apt-get install openjdk-8-jdk -y

    root@37e4f2be0a41:/# apt-get install maven

    root@37e4f2be0a41:/# exit

    [root@node6 ~]# docker ps -a

    37e4f2be0a41        5f2bf26e3524          "/bin/bash"              About an hour ago   Exited (0) 20 seconds ago                           sweet_hypatia

    6. 保存镜像

    [root@node6 ~]#  docker commit b119e7f28b50  maven-build-slave-0.2

    sha256:3a444723b0557cf81661b3f95947c3deae8c93008476ac3a86cbb8b7979815ce

    [root@node6 ~]# docker images

    maven-build-slave-0.2                         latest              3a444723b055        About a minute ago   568MB

    7. jenkins配置docker凭据

    系统管理----->系统设置

    创建凭据

     配置模板

     保存

    8. jenkins测试

    使用这个项目

    pipeline语法

    node('docker') {
        // some block
        stage('Preparation') {
        // some block
        //step
        git 'https://github.com/jglick/simple-maven-project-with-tests.git'
    }
        stage('Build') {
        // some block
        //step
        withMaven(maven: 'M3') {
        // some block
        sh label: '', script: 'mvn -Dmaven.test.failuer.ignore clean install package'
    }
    }
    }

    构建即可

  • 相关阅读:
    不喜欢数据库编程
    配置 yum 源的两种方法
    编译内核后iptables无法启动问题
    国外免费空间
    iptables--静态防火墙实例教程
    25 Most Frequently Used Linux IPTables Rules Examples
    如何开启或关闭SELinux
    google提供免费企业邮局
    RAID 0, RAID 1, RAID 5, RAID 10 Explained with Diagrams
    CentOS软件管理之fastestmirror和RPMforge
  • 原文地址:https://www.cnblogs.com/zyxnhr/p/11802173.html
Copyright © 2020-2023  润新知