Docker 安装配置请参考我的另一篇文章: https://juejin.im/post/5e839f2851882573ab44f1b4#heading-11

安装Jenkins

1
2
3
4
5
6
7
8
9
10
$ docker run -d \
-u root \
-p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
-e PLUGINS_FORCE_UPGRADE=true \
-e TRY_UPGRADE_IF_NO_MARKER=true \
-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai \
--name jenkins \
--restart always \
jenkins/jenkins

需要更多定制参数你可以参考 https://github.com/jenkinsci/docker

Nginx 反向代理

我没有域名,所以我的配置是基于端口的,你可以查看官方文档 获取更多方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 8882;
server_name _;

location / {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# Fix the "It appears that your reverse proxy set up is broken" error.
proxy_pass http://127.0.0.1:8080;
proxy_read_timeout 90;

# Required for new HTTP-based CLI
proxy_http_version 1.1;
proxy_request_buffering off;
}
}

初始化jenkins

1、执行cat /var/lib/docker/volumes/jenkins_home/_data/secrets/initialAdminPassword,获取管理员密码

2、启动完jenkins后通过浏览器输入地址http://部署jenkins主机IP:端口

3、选择安装插件方式,这里我是默认第一个:

4、进入插件安装界面,连网等待插件安装:

5、安装完插件后,进入创建管理员界面:

基于角色的认证策略

  1. 请确保在 系统管理 -> 插件管理 中安装了Role-based Authorization Strategy 插件!!

  2. 系统管理 -> 安全 -> 全局安全设置 中的 授权策略 配置项中选择 Role-Based Strategy

    紫升

  3. 然后就可以在 Manage and Assign Roles 中管理角色

全局工具配置

JDK

自动安装请先到Oracle注册账号

紫升

Git

需要先执行 apt install git 安装git,然后通过 which git 查看 git 安装位置!

紫升

NodeJS

需要先需要安装 NodeJS Plugin 插件

紫升

Android 打包环境

安装 android-sdk、sdkmagager

1
2
3
$ apt update | apt install android-sdk
$ apt install snapd
$ snap install androidsdk

复制android-sdk到 jenkins volume

1
$ cp -R /usr/lib/android-sdk/ /var/lib/docker/volume/jenkins_home/_data/

android-sdk 的安装位置可以通过 adb --version 查看:

设置环境变量

将下面的的配置加入到 ~/.bash_profile~/.zshrc 中,并执行 srouce ~/.bash_profilesrouce ~/.zshrc

1
2
3
4
5
export ANDROID_HOME=/var/lib/docker/volumes/jenkins_home/_data/android-sdk
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/emulator

accepted licences

如果不授权会报错: Failed to install the following Android SDK packages as some licences have not been accepted.

1
$ yes | sdkmanager --sdk_root=${ANDROID_HOME} --licenses

如果不指定 --sdk_root=${ANDROID_HOME} 会报错:SDKmanager : Warning: Could not create setting. java.lang.IllegalArgumentException

设置 Jenkins ANDROID_HOME

进入 系统管理 -> 系统配置 -> 全局属性 新增环境变量 ANDROID_HOME

紫升

GitHub Plugin

这个插件的作用是集成 GitHub 到 Jenkins

获取 GitHub 的 Personal access token

GitHub 主页 -> Settings -> Developer settings -> Personal access tokens

紫升

添加Github服务器

系统管理 -> 系统设置 -> GitHub -> 添加Github服务器

这里的名称随便填,API URL 填写 https://api.github.com/

紫升

凭证类型选 Secret text

紫升

在凭据选上刚刚你添加的,勾上管理 Hook,点击“连接测试”,成功之后如下所示:

紫升

配置 GitHub 的 webhook 地址

webhook 是通知 Jenkins 时的请求地址,用来填写到 GitHub 上,这样 GitHub 就能通过该地址通知到 Jenkins

假设Jenkins所在服务器的地址是:192.168.0.1,端口为8080,那么webhook地址就是 http://192.168.0.1:8080/github-webhook/

image-20200509175614040

在 Payload URL 位置填入 webhook 地址,再点击底部的 Add webhook 按钮,这样就完成 webhook 配置了,今后当前工程有代码提交,GitHub 就会向此 webhook 地址发请求,通知 Jenkins 构建:

紫升

任务配置

  • 构造触发器选择:GitHub hook trigger for GITScm polling

    紫升

  • 构建环境和绑定

    如下图所示,勾选 Use secret text(s) or file(s),下面的”凭据”选择我们之前配置过的凭证

    紫升

常见问题

修改默认时区为上海时区

系统管理 -> 脚本命令行 里运行 System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')