jenkins 安装使用
windows 环境下安装
安装容器并运行
docker run -d --restart=always ^
--name jenkins_01 ^
-p 8080:8080 -p 50000:50000 ^
-v D:/dockervolumes/jenkins_home:/var/jenkins_home ^
-v /var/run/docker.sock:/var/run/docker.sock ^
-v /usr/bin/docker:/usr/bin/docker ^
-v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose ^
jenkins/jenkins
为了确保构建脚本是否能使用 docker 和 docker-compose 相关命令,进入 jenkins_01 容器查看是有docker 和 docker-compose
$ docker -v
Docker version 20.10.10, build b485636
$ docker-compose -v
/bin/sh: 2: docker-compose: Permission denied
发现 docker-compose 没有使用权限!!!
linux 环境下修改权限方式为 chmod 777 -R /usr/bin/docker-compose:/usr/bin/docker-compose
windows 环境下怎么修改权限,懵逼了!
后来发现 docker-compose: Permission denied 不是权限问题,进入挂载目录发现 docker-compose 根本就没有挂载成功!
还不懂怎么进不了 Docker 虚拟机文件目录,但是 /var/run/docker.sock 是能使用挂载给 jenkins 的,神奇!
网上查找资料发现 Docker Desktop on Windows 有设置共享目录,但是安装最新版的居然没有,
有教程说在设置里切换 switch windows\linux containter 也没有能设置共享目录呀!
docker 命令可以通过挂载获得,docker-compose 可以通过通过 Dockerfile 下载 docker-compose 创建自定义 jenkins 镜像获得。
Dockerfile 文件 Dockerfile-Myjenkins 如下
FROM jenkins/jenkins
USER root
RUN curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose
生成 myjenkins 镜像
docker build -t myjenkins -f Dockerfile-Myjenkins .
使用 myjenkins 镜像运行 jenkins_01 容器
docker run -d --restart=always ^
--name jenkins_01 ^
-p 8080:8080 -p 50000:50000 ^
-v D:/dockervolumes/jenkins_home:/var/jenkins_home ^
-v /var/run/docker.sock:/var/run/docker.sock ^
-v /usr/bin/docker:/usr/bin/docker ^
myjenkins
进入 jenkins_01 容器查看,终于有了是 docker 和 docker-compose
$ docker -v
Docker version 20.10.10, build b485636
$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c
访问 8080 端口获取密钥登录
docker logs jenkins_01
或
D:\dockervolumes\jenkins_home\secrets\initialAdminPassword
安装插件(推荐安装)
安装插件出现一个错误: No such plugin: cloudbees-folder
安装插件 cloudbees-folder 失败,是因为下载的 Jenkins.war 里没有 cloudbees-folde r插件
需要去 https://updates.jenkins-ci.org/download/plugins/cloudbees-folder/ 下载一个插件
放在 D:\dockervolumes\jenkins_home\war\META-INF
镜像源更换为国内下载会快点
D:\dockervolumes\jenkins_home\hudson.model.UpdateCenter.xml
https://updates.jenkins.io/update-center.json
改为
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
创建管理员
linux 环境下安装
创建一个 jenkins 的挂载工作目录
# 创建工作目录
mkdir /var/lib/docker/volumes/jenkins_home
# 赋予权限
chown -R 1000 /var/lib/docker/volumes/jenkins_home
安装容器并运行
docker run \
--name jenkins_01 \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v /var/lib/docker/volumes/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose \
jenkins/jenkins
因为会使用到容器提供环境,以及使用 Docker 打包 .NET Core 程序为 Docker 镜像,所以需要在 Jenkins 容器中映射 Docker 的 .sock 文件,以便在容器中,还能使用 Docker 命令。在宿主机中创建 /var/jenkins_home 目录,用于备份 Jenkins 中的数据。
如果不挂载 usr/bin/docker 可能报错:docker: command not found
修改权限
修改权限,否则会报错:jenkins Got permission denied while trying to connect to the Docker daemon socket at unix,在宿主机执行如下命令
chmod 777 /var/run/docker.sock:/var/run/docker.sock
chmod 777 -R /usr/bin/docker:/usr/bin/docker
chmod 777 -R /usr/bin/docker-compose:/usr/bin/docker-compose
如果不修改 docker.sock 权限,可将jenkins用户加入docker组,重启Jenkins服务(用docker安装好像没有 jenkins 用户组!!!)
gpasswd -a jenkins docker
访问 8080 端口获取密钥登录
输入管理员密码,密码使用 docker logs {容器ID} 查看日志获取 Jenkins 登录密码
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
19b66ff267464b76aaaaaaaaaaaaaaaa
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
安装插件(推荐安装)
如过组件安装失败可修改配置 jenkins_home/jenkins_home]# cat hudson.model.UpdateCenter.xml
https://updates.jenkins.io/update-center.json
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
创建管理员
使用 jenkins 官方安装方法
jenkins 官方使用了 docker:dind 实现一种 docker in docker 的方式,实现了 sock binding。
dind 常见玩法不光有 sock binding,还有特权模式运行,以及走tcp和daemon通信两种模式。一般来说不建议简单的把宿主的sock映射到容器内部,有安全风险,不过这三种方案现阶段都有瑕疵,权衡下使用就好。适用场景:追求高度隔离,宿主环境也是容器的场景,包括并不仅限于CI/CD。
尝试使用了 docker:dind 安装 jenkins ,发现容器嵌套太深了,了解的还不够,发现网络连接和挂载上很复杂。。
参考:https://www.jenkins.io/doc/book/installing/docker/
任务配置
-
创建任务名 XXX 选任务类型,以Freestyle project 举例
-
源码管理配置
仓库地址 Repository URL
? https://github.com/weichangk/MiniShop.git
?
添加凭据 Credentials
? Kind:选择SSH Username with private key
? Username:随便填写
? Private Key:选择Enter directly
? Key:系统生成的git id_rsa中的Key
?
凭据保存后返回源码管理 Credentials:选择刚才填写的 UserName -
指定分支
? */master(看具体而定)
-
添加构建步骤
? 本案例选择shell,输入 shell 脚本
-
点击保存,重新构建Job。