使用docker搭建持续集成环境

本文主要介绍如何在docker中搭建持续集成(CI)环境,按照文中的步骤,可以完成使用jenkins打包项目并上传到nexus上。

环境要求

  • mac(我使用的环境)/linux/ubuntu
  • 已经安装了docker以及创建了swarm集群

1.GITLAB安装

如果本地没有对应的gitlab镜像可以到docker hub 上去拉取。拉取完成之后tag成自己想要的名称以及版本(要跟stack文件里面的镜像一致)。

启动命令:docker stack deploy -c 0-gitlab.yml git

stack启动文件内容如下:

version: "3"
services: 
 gitlab: 
   image: registry:5000/falcon/gitlab-ce:R1.1.0
   environment: 
     # external_url 设置通过HTTP访问的路径
     # gitlab_rails['gitlab_shell_ssh_port']设置通过SSH访问项目的端口
     GITLAB_OMNIBUS_CONFIG: |
       external_url 'http://gitlab:8000'
       gitlab_rails['gitlab_shell_ssh_port'] = 8022
   hostname: gitlab 
   ports:
     - "8000:8000"
     - "8022:22"
   networks: 
     - mcsas-network
   # 将gitlab的目录挂载到本机以避免重启容器数据丢失
   volumes:
     - /Users/xuefei/docker/volumes/git/etc:/etc/gitlab
     - /Users/xuefei/docker/volumes/git/opt:/var/opt/gitlab
     - /Users/xuefei/docker/volumes/git/log:/var/log/gitlab
   deploy:
     replicas: 1
     update_config:
       delay: 10s
     restart_policy:
       condition: on-failure
  networks:
     mcsas-network: 
       external: true

1.2 设置root密码以及创建group以及用户

  1. 浏览器中输入http://hostname:8000,进入页面
  2. 设置root密码
  3. 创建group以及jenkins用户

1.3 生成并设置SSH key

1.3.1 SSH-key的创建(步骤以及操作图):

  1. 输入 ssh-keygen -t rsa -C “jenkins@gmail.com” ,按回车键
  2. 输入文件生成的路径,如果不输入则默认为当前目录(~/.ssh)
  3. 输入密码/确认密码(可以为空,我采用的也是空)
  4. 生成完成

1.3.2 设置SSH keys

  1. 用jenkins用户登录gitlab
  2. 点击头像->Profile Settings->SSH Keys
  3. 将id_rsa.pub文件中的内容复制到key下方的文本框中点击保存

2.Nexus安装

启动命令:docker stack deploy -c 1-nexus.yml nexus

stack启动文件内容如下:

version: "3"
services: 
  nexus: 
    image: registry:5000/sonatype/nexus3
    hostname: nexus
    ports:
      - "8081:8081"
    networks: 
      - mcsas-network
    volumes:
      - /Users/xuefei/docker/volumes/nexus/data/:/nexus-data
    deploy:
      replicas: 1
      update_config:
        delay: 10s
      restart_policy:
        condition: on-failure
networks:
  mcsas-network: 
    external: true

在nexus启动之后,浏览器中输入http://hostname:8081,登录之后,可以看到页面首页如下:

持续集成中docker的作用 docker 持续集成部署_CI

2.1创建阿里云代理仓库以及自己项目的仓库

这里创建阿里云代理仓库是为了解决包的下载速度问题,具体的需要哪些代理仓库还是要根据实际的开发环境决定。

3.jenkins安装

启动命令:docker stack deploy -c 2-jenkins.yml jenkins

version: "3"
services: 
  jenkins: 
    image: jenkinsci/blueocean
    hostname: jenkins 
    ports:
      - "50000:50000"
      - "8080:8080"
    networks: 
      - mcsas-network
    volumes:
      - /Users/xuefei/docker/volumes/jenkins:/var/jenkins_home
      # 将宿主机上的docker挂载到jenkins镜像里
      - /var/run/docker.sock:/var/run/docker.sock
      - /Users/xuefei/apache-maven-3.5.4:/var/local/apache-maven-3.5.4
    deploy:
      replicas: 1
      update_config:
        delay: 10s
      restart_policy:
        condition: on-failure
networks:
  mcsas-network: 
    external: true

在浏览器中输入http://hostname:8080,按照界面操作完成jenkins的配置以及插件的安装

3.1 全局变量配置

进入系统管理界面,点击系统设置,找到全局属性,勾选环境变量复选框,配置git以及maven的配置

持续集成中docker的作用 docker 持续集成部署_docker_02

settings.xml文件需要放在 /Users/xuefei/docker/volumes/jenkins/(挂载目录)/maven_settings下,文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
   <!--  本地仓库的地址    --> 
  <servers>
     <server>
	    <id>jpractice-snapshots</id>
	    <username>admin</username>
	    <password>admin123</password>
     </server>
  </servers>
   
  <mirrors>
    	<mirror>
	        <id>public</id>  
	        <name>internal nexus repository</name>  
	        <url>http://nexus:8081/repository/maven-public/</url>
	        <mirrorOf>central</mirrorOf>  
    	</mirror>
  </mirrors>

  <profiles>
    <profile>
       <id>jdk-1.8</id>
       <activation>
          <activeByDefault>true</activeByDefault>
              <jdk>1.8</jdk>
          </activation>
          <properties> 
              <maven.compiler.source>1.8</maven.compiler.source> 
              <maven.compiler.target>1.8</maven.compiler.target> 
              <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> 
          </properties>
    </profile>
    <profile>
       <id>snapshots</id>
       <activation>
          <activeByDefault>true</activeByDefault>
       </activation>
	  <repositories>
            <repository>
              <id>public</id>
            	 <url>http://nexus:8081/repository/maven-public/</url>
               	   <releases>
               	      <enabled>true</enabled>
            	    </releases>
               	    <snapshots>
                      <enabled>true</enabled>
                    </snapshots>
       		 </repository>
 	      </repositories>
	</profile>
  </profiles>
</settings>

3.2 全局工具配置

点击“jenkins”(左上角),系统管理,全局工具配置,进入全局工具配置页面。主要配置的有

Maven的默认配置

持续集成中docker的作用 docker 持续集成部署_docker_03

JDK配置

持续集成中docker的作用 docker 持续集成部署_maven_04

Maven的配置

持续集成中docker的作用 docker 持续集成部署_maven_05

3.1 新建任务

点击页面上的“新建任务”按钮,在新建任务页面中输入项目名称,并选择“构建一个maven项目”,点击“确认”按钮

持续集成中docker的作用 docker 持续集成部署_maven_06

在配置页面中输入相关信息:

在General中输入描述信息

在源码管理模块,选择git,配置Repository URL

持续集成中docker的作用 docker 持续集成部署_git_07

点击上图中的add按钮进入Credentials配置页面,进行如下操作

  1. 在弹出页面中类型选择“SSH Username with private key”
  2. 在Username中输入自定义的名字,例如“jenkins”
  3. 选中“Enter directly”
  4. 将之前生成的rsa的private key(/Users/xuefei/.ssh/id_rsa)填入其中
  5. Passphrase字段因为生成rsa时没有输入密码,所以这里不用填写
  6. ID、描述可以不填写
  7. 点击“添加”按钮完成操纵

持续集成中docker的作用 docker 持续集成部署_CI_08

在bulid模块填入maven的操作

持续集成中docker的作用 docker 持续集成部署_CI_09