基于Docker搭建和配置Jenkins
容器启动命令
1 | docker run -p 8080:8080 -p 50000:50000 -h jenkins --name=jenkins --restart=on-failure -v /etc/localtime:/etc/localtime -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-jdk11 |
我通常会把/root和/mnt也映射进容器,并且通过root用户启动容器,用起来方便但安全性差,需视情况选择。
1 | docker run -u root --privileged -p 8080:8080 -p 50000:50000 -h jenkins --name=jenkins --restart=on-failure\ |
修改Jenkins时区
系统管理(Manage Jenkins)-脚本命令行(Script Console)
执行
1 | System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone','Asia/Shanghai') |
以root进入容器
1 | docker exec -uroot -it jenkins bash |
修改jenkins启动脚本
1 | vim /usr/local/bin/jenkins.sh |
找到java启动war的语句,增加启动参数
1 | -Xms256M -Xmx256M -Xmn96M -Xss1M -Djava.awt.headless=true -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai |
重启容器,在宿主机执行
1 | docker restart jenkins |
允许匿名通过Token构建项目
默认不允许匿名触发构建,也不建议匿名触发,在外部触发可以通过
1 | curl -o /dev/null -s -w %{http_code} http://<用户名>:<密码或API_TOKEN>@<JENKINS_URL>/job/<PROJECT>/build?token=<PROJ_TOKEN> |
或者
1 | curl -w %{http_code} -u <用户名>:<API_TOKEN> http://<JENKINS_URL>/job/<PROJECT>/build?token=<PROJ_TOKEN> |
其中API_TOKEN是属于用户的,在用户管理界面可以配置。PROJ_TOKEN是属于项目的,在项目配置界面构建选项可以配置。
如需匿名触发构建
系统管理-全局安全配置-授权策略-登录用户可以做任何事
勾选“匿名用户具有可读权限”
这样设置之后就可以通过
1 | curl -o /dev/null -s -w %{http_code} <JENKINS_URL>/job/<PROJECT>/build?token=<TOKEN> |
从外部来触发构建,token在项目里设置。
项目权限配置策略
依赖插件 Matrix Authorization Strategy
需求:
- 系统管理员可以看到和控制所有的项目
- 普通用户可以创建项目和完全控制自己创建的项目,以及被人别人授权控制的项目
配置方法
系统管理-全局安全配置
系统管理员会自动勾上Administer去权限,多个系统管理就手动Add user然后勾上Administer
对Authenticated Users 只勾上 全部Read 和任务Create
配置项目时勾上启动项目安全,如果是对所有人开放管理和使用的项目,就把Authenticated Users后面的勾都勾上
如果是仅自己使用,就把自己用户名后面的所有勾都勾上
BTW: 不方便的一点就是目前添加用户需要手动输入用户名,而不能选择,希望后面的版本会改进。