Jenkins 是什么?
Jenkins 是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
一、安装包安装
1、安装Java环境
要安装此版本,请先更新软件包索引
代码语言:javascript复制sudo apt update
接下来,检查 Java 是否已经安装java -version
。如果Java当前未安装,你将看到以下输出:
Command 'java' not found, but can be installed with:
apt install default-jre
apt install openjdk-11-jre-headless
apt install openjdk-8-jre-headless
apt install openjdk-9-jre-headless
执行以下命令来安装OpenJDK:
代码语言:javascript复制sudo apt install default-jre
该命令将安装Java运行时环境(JRE)。这将允许你运行几乎所有的Java软件。验证安装:java -version
,你将看到以下输出:
openjdk version "10.0.1" 2018-04-17
OpenJDK Runtime Environment (build 10.0.1 10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1 10-Ubuntu-3ubuntu1, mixed mode)
除了JRE之外,你可能还需要Java开发工具包(JDK)才能编译和运行一些特定的基于Java的软件。要安装JDK,请执行以下命令,该命令也将安装JRE:
代码语言:javascript复制sudo apt install default-jdk
通过检查javac Java编译器的版本来验证是否安装了JDK :javac -version
javac 10.0.1
接下来,我们来看看指定我们要安装的OpenJDK版本。安装OpenJDK的特定版本: OpenJDK 8
。Java 8是目前的长期支持版本,虽然公共维护在2019年1月结束,但仍然得到广泛支持。要安装OpenJDK 8,请执行以下命令:
sudo apt install openjdk-8-jdk
验证安装:java -version
java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-8u212-b03-0ubuntu1.16.04.1-b03)
OpenJDK 64-Bit Server VM (build 25.212-b03, mixed mode)
也可以只安装JRE,你可以通过执行sudo apt install openjdk-8-jre
来安装它。
2、安装Jenkins
在基于Debian的发行版(如Ubuntu)上,您可通过apt
安装Jenkins
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
安装这个软件包将会:
- 将Jenkins设置为启动时启动的守护进程。查看
/etc/init.d/jenkins
获取更多细节 - 创建一个'jenkins'用户来运行此服务
- 直接将控制台日志输出到文件
/var/log/jenkins/jenkins.log
。如果您正在解决Jenkins问题,请检查此文件 /etc/default/jenkins
为启动填充配置参数,例如JENKINS_HOME- 将Jenkins设置为在端口8080上进行监听。使用浏览器访问此端口以开始配置
- 如果你的
/etc/init.d/jenkins
文件无法启动Jenkins,编辑/etc/default/jenkins
, 修改 ----HTTP_PORT=8080----为----HTTP_PORT=8081----
在这里,“8081”也可被换为其他可用端口。
很庆幸18.04 默认安装后直接是使用systemctl
管理
sudo systemctl status jenkins.service // 查看
sudo systemctl restart jenkins.service
3、配置Java环境
- OpenJDK 8位于
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
- 复制首选安装的路径。然后打开
/etc/environment
使用vim
编辑器sudo vim /etc/environment
在该文件的末尾,添加以下行,确保使用自己的复制路径替换突出显示的路径JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/bin/java"
- 修改此文件将为JAVA_HOME系统上的所有用户设置路径,保存文件并退出编辑器。
- 现在重新加载此文件以将更改应用于当前会话:
source /etc/environment
- 验证是否设置了环境变量
echo $JAVA_HOME
,你会看到你刚刚设置的路径:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/bin/java
- 其他用户需要执行该命令
source /etc/environment
或注销并重新登录才能应用此设置。
4、配置Jenkins环境
- 配置文件:
/etc/default/jenkins
JENKINS_HOME=/home/www/jenkins
这里直接是使用的Docker安装的目录(Jenkins迁移目录)HTTP_PORT=8081
- 默认安装目录:
/var/lib/jenkins/
替换为/home/www/jenkins
- docker 的Jenkins目录赋予权限:
sudo chmod -R 777 jenkins/
,使jenkins
用户有访问的权限 这里直接使用的是以前Docker 安装的Jenkins_home
目录 ,如果是新安装则直接跳过。 - 【可以代替以上】将
jenkins
添加到www
用户组里面:sudo gpasswd -a jenkins www
5、Nginx 代理主机配置(Docker Nginx)
代码语言:javascript复制server {
listen 443 ssl http2;
server_name jenkins.tinywan.com;
ssl_certificate /etc/letsencrypt/jenkins.tinywan.com/full_chain.pem;
ssl_certificate_key /etc/letsencrypt/jenkins.tinywan.com/private.key;
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;
proxy_redirect http:// https://;
proxy_pass http://172.17.0.1:8081;
proxy_read_timeout 90;
proxy_http_version 1.1;
proxy_request_buffering off;
proxy_buffering off;
add_header 'X-SSH-Endpoint' 'p2p.herbeauty.top:50000' always;
}
}
二、Docker 安装
普通构建
代码语言:javascript复制docker run -d -p 8084:8080 --name tinywan-jenkins --user root -v host_mntdJenkins2:/var/jenkins_home jenkins
稳定版本
代码语言:javascript复制docker run -d --name lnmp-jenkins --user root -p 8080:8080 -p 50000:50000 jenkins/jenkins:2.165
jenkins/jenkins:lts
版本为最新的(由于不支持中文),不推荐使用。而是推荐使用每周发布的稳定版本,如:jenkins/jenkins:2.165
。
使用 blueocean 构建(推荐)
代码语言:javascript复制docker run -d --name lnmp-jenkins --network dnmp_backend --network-alias jenkins --user root -p 8081:8080 -v $HOME/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v "$HOME":/home jenkinsci/blueocean
- 使用该版本构建的好处就是可以使用Nginx Docker 容器,通过容器与容器网络连接进行 jenkins 的代理
--network dnmp_backend
必须和nginx docker在同一个个网络内
进入容器
代码语言:javascript复制$ docker exec -it tinywan-jenkins bash
root@7eaff7d087c3:/# ls
遇到的错误
1、时区时间问题
代码语言:javascript复制直接使用宿主机的时间和时区
docker cp /etc/localtime lnmp-jenkins:/etc/
docker cp /etc/timezone lnmp-jenkins:/etc/
/etc/timezone
的内容是时区,比如Asia/ShangHai
。/etc/localtime
的内容是时间- Alpine Linux 时区设置 。https://wiki.alpinelinux.org/wiki/Setting_the_timezone
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo Asia/Shanghai >/etc/timezone
2、权限问题
Window 环境下如果容器运行的时候挂在目录的会有插件安装不成功,就是由于权限的问题: 例如:
- 1. Workspace Cleanup 清理失败
- 2. admin密码更改忘记情况
3、docker权限报错解决
代码语言:javascript复制docker inspect -f . python:3.5.1
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http:///var/run/docker.sock/v1.39/containers/python:3.5.1/json: dial unix /var/run/docker.sock: connect: permission denied
将jenkins用户加入docker组,重启Jenkins服务
代码语言:javascript复制sudo gpasswd -a jenkins docker
sudo systemctl restart jenkins.service
三、自动部署脚本
测试环境
代码语言:javascript复制# 进入目录
cd /home/www/dnmp/www/jl-pay-develop
# 将本地更改的代码存放git栈中
git stash
#拉取代码
git reset --hard origin/test
git pull origin test
#从栈中将你的代码
git stash pop
正式环境
代码语言:javascript复制cd /home/www/lnmp/www/juhepay
git reset --hard origin/master
git pull origin master
代码语言:javascript复制自动登录问题:
ssh-copy-id -i ~/.ssh/id_rsa.pub www@47.112.97.230
# ssh-copy-id -i ~/.ssh/id_rsa.pub www@47.112.97.230
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
ERROR: Someone could be eavesdropping on you right now (man-in-the-middle attack)!
ERROR: It is also possible that a host key has just been changed.
ERROR: The fingerprint for the ECDSA key sent by the remote host is
ERROR: SHA256:OOk4eZh636rBw/uw5Amt7IjAeMs8yFvMaDYAoxxOGws.
ERROR: Please contact your system administrator.
ERROR: Add correct host key in /root/.ssh/known_hosts to get rid of this message.
ERROR: Offending ECDSA key in /root/.ssh/known_hosts:6
ERROR: remove with:
ERROR: ssh-keygen -f "/root/.ssh/known_hosts" -R 47.112.97.230
ERROR: ECDSA host key for 47.112.97.230 has changed and you have requested strict checking.
ERROR: Host key verification failed.
解决办法
代码语言:javascript复制# ssh-keygen -f "/root/.ssh/known_hosts" -R 47.112.97.230
admin密码更改忘记情况
1.删除Jenkins目录下config.xml文件中下面代码,并保存文件
代码语言:javascript复制 <useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
<denyAnonymousReadAccess>true</denyAnonymousReadAccess>
</authorizationStrategy>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>true</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>
2.重启Jenkins服务;
3.进入首页>“系统管理”>“Configure Global Security”;
4.勾选“启用安全”;
5.点选“Jenkins专有用户数据库”,并点击“保存”;
6.重新点击首页>“系统管理”,发现此时出现“管理用户”;
7.点击进入展示“用户列表”;
8.点击右侧进入修改密码页面,修改后即可重新登录。
参考
- 在Ubuntu 18.04上使用apt安装Java
- https://jenkins.io/zh/doc/book/installing/
- PHP优雅上线——Jenkins可持续集成部署
- PHP Jenkins 持续集成
- SpringBoot Docker Git Jenkins实现简易的持续集成和持续部署
- 使用Docker Jenkins自动构建部署
- 修改使用Alpine Linux的Docker容器的时区