使用 docker +gitea + jenkins 进行自动化持续集成
环境说明
本例使用 docker-compose 进行。 假设你已经安装 docker 以及 docker-compose 的最新版,并使用的是 linux 服务器。
下载 gitea 及 jenkins 镜像
docker pull gitea/gitea:1.16.4
docker pull jenkinsci/blueocean
编写 compose
采用分别为 gitea 和 jenkins 编写 docker-compose.yml 文件的形式。
gitea 的 docker-compose.yml 内容:
version: "3"
networks:
gitea:
external: false
volumes:
gitea:
driver: local
services:
server:
image: gitea/gitea:1.16.4
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- gitea
volumes:
- gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
jenkins 的 docker-compose.yml 内容:
version: "3"
networks:
jenkins:
external: false
volumes:
jenkins:
driver: local
services:
server:
#image: jenkins/jenkins:alpine-jdk11
image: jenkinsci/blueocean
container_name: jenkins
# privileged 是对docker服务进行特殊授权
privileged: true
# 使用root用户
user: root
restart: always
networks:
- jenkins
volumes:
# 将jenkins的系统文件映射到宿主机的卷
- ~/docker_homes/jenkins:/var/jenkins_home
# 允许与宿主机的docker进行通讯
- /var/run/docker.sock:/var/run/docker.sock
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "4000:8080"
启动容器
分别在 gitea 文件夹及 jenkins 文件夹执行
docker-compose up -d
启动 gitea 和 jenkins 服务
gitea 设置
完全按照 gitea 的页面提示设置即可。 以管理员登陆后,创建一个 demo 的仓库。 并在该仓库根创建 Jenkinsfile:
pipeline {
agent {
docker {
image 'maven:3.8.4-jdk-8'
args '-v /root/.m2:/root/.m2'
}
}
stages {
stage('build') {
steps {
sh 'mvn --version'
}
}
}
}
jenkins 设置并安装插件
按照界面提示初始化 jenkins 并选择默认插件自动安装。 进入 jenkins 主界面后,需要安装 Docker、DockerPipeline 这两个插件,否则 jenkins 将不会识别 Jenkinsfile 内的名为 docker 的 agent。 安装好插件后。 创建第一个 pipeline 构建。使用左侧菜单的最新的【Open Blue Ocean】的菜单能够更快速的创建流水线。 按照界面一步一步操作即可。
注意事项
运行第一个流水线的多数问题都是 docker 的权限问题。因此,docker-compose.yml 最好放在当前用户的的主目录,即 ~ 下。 同时特别留意,jenkins 的 docker-compose.yml 里面加了注释说明的行,这些必须要有。