使用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以及用户
- 浏览器中输入http://hostname:8000,进入页面
- 设置root密码
- 创建group以及jenkins用户
1.3 生成并设置SSH key
1.3.1 SSH-key的创建(步骤以及操作图):
- 输入 ssh-keygen -t rsa -C “jenkins@gmail.com” ,按回车键
- 输入文件生成的路径,如果不输入则默认为当前目录(~/.ssh)
- 输入密码/确认密码(可以为空,我采用的也是空)
- 生成完成
1.3.2 设置SSH keys
- 用jenkins用户登录gitlab
- 点击头像->Profile Settings->SSH Keys
- 将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,登录之后,可以看到页面首页如下:
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的配置
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的默认配置
JDK配置
Maven的配置
3.1 新建任务
点击页面上的“新建任务”按钮,在新建任务页面中输入项目名称,并选择“构建一个maven项目”,点击“确认”按钮
在配置页面中输入相关信息:
在General中输入描述信息
在源码管理模块,选择git,配置Repository URL
点击上图中的add按钮进入Credentials配置页面,进行如下操作
- 在弹出页面中类型选择“SSH Username with private key”
- 在Username中输入自定义的名字,例如“jenkins”
- 选中“Enter directly”
- 将之前生成的rsa的private key(/Users/xuefei/.ssh/id_rsa)填入其中
- Passphrase字段因为生成rsa时没有输入密码,所以这里不用填写
- ID、描述可以不填写
- 点击“添加”按钮完成操纵
在bulid模块填入maven的操作