docker 部署 jenkins 并调用宿主机 docker 打包

docker 部署 jenkins 并调用宿主机 docker 打包

使用 docker 容器部署 Jenkins 并调用宿主机上 docker 打包镜像

部署

docker-compose

通过 docker-compose 部署 jenkins 服务

docker-compose.yml >folded
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
version: '3'

networks:
jenkins:
driver: bridge

volumes:
jenkins-data:
driver: local

services:
jenkins-server:
image: jenkins/jenkins:2.235.3-lts-centos7
container_name: jenkins
restart: always
user: root
environment:
TZ: Asia/Shanghai
# UTF-8 防中文乱码
JAVA_TOOL_OPTIONS: '-Dfile.encoding=UTF-8'
networks:
- jenkins
# 内网 DNS 服务器地址,方便解析内网 GitLab、Nexus3、Harbor 等服务地址域名
dns:
- 192.168.1.241
ports:
# Jenkins WEB UI
- 8080:8080
# JNLP 端口
# - 50000:50000
volumes:
- jenkins-data:/var/jenkins_home
# 在容器中可调用宿主机打包镜像
- /var/run/docker.sock:/var/run/docker.sock
# 容器内自身没有 docker 命令工具,需要映射
- /usr/bin/docker:/usr/bin/docker

保存为 docker-compose.yml 后,启动服务

启动 jenkins
1
# docker-compose up -d

初始化

修改Jenkins加速源

替换 Jenkins 源为国内镜像站,加速拉取插件包

配置参考:使用国内镜像加速 Jenkins 插件安装

首次登陆

  • 在宿主机执行命令

    获取 jenkins 初始 admin 密码
    1
    # docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

    获取 Jenkins 初始管理员密码,然后在浏览器中打开 Jenkins 页面,输入并下一步。

  • 选择需要的插件后等待安装完成

  • 安装完成后,根据页面提示创建管理员用户名及密码

  • 根据提示填写 Jenkins 服务器访问 URL 地址

  • 进入系统

安装 docker 插件

选择 Manage Jenkins => Manage Plugins => Available,然后搜索 docker

  • 使用 Pipeline 脚本的话安装 Docker Pipeline

  • 使用 Freestyle Project 的话安装 docker-build-step

插件安装需要重启 Jenkins 才能使用

docker 调用

Pipeline 为例,部分代码示例如下:

pipeline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
steps {
script {
// 远程调用 docker (docker 远程地址,jenkins 中 cert_id)
// docker.withServer('tcp://172.16.123.155:2375', "23277b8b-e6d4-4110-99f3-3162f8be8f7a") {
// def BuildImage = docker.build("${build_perfix}${image_name}:${image_tag}", "-f ${project_dockerfile} ./")
// }
// 根据 dockerfile 打包镜像并推送到远程仓库
docker.withRegistry("${harbor_url}", "${jenkins_id}") {
// build当前目录(workspace)下的Dockerfile
def BuildImage = docker.build("${build_perfix}${image_name}:${image_tag}", "-f ${project_dockerfile} ./")
// Push刚才Build出来的镜像
BuildImage.push()
BuildImage.push('latest')
}
}
}

参考文章:

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...