环境准备:一台nginx,一台gitlab,一个能使用的github账号
样例:github项目地址 git@github.com:13331033844/test.git
nginx:10.1.1.28
1.下载java环境
官网指路:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
版本:
Linux x64 | 185.16 MB | jdk-8u231-linux-x64.tar.gz |
具体下载地址:https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.tar.gz?AuthParam=1573475025_69f85eeb325c1a8e2037d76d4964650c
注:这个下载地址不保证直接能用,常规节奏是进入Oracle官网进行点击下载(还要求注册Oracle会员),然后用ftp上传服务器。
如果好使,可以直接在shell里wget它。本文是进行了Oracle会员注册后,再shell中就可以下载了。不知道这个注册是不是影响了下载能力。
2.安装Java环境
以本文为例,我们按照管理将文件jdk-8u231-linux-x64.tar.gz下载到/software文件夹中。
# 本文以jdk-8u192版本为例
# cd /software
# tar xvf jdk-8u192-linux-x64.tar.gz
# mkdir /usr/local/java
# mv /software/jdk1.8.0_192 /usr/local/java/
# 建立一个/usr/local/的java专用文件夹,因为java环境版本繁杂,为以后可能进行的版本拓展,将所有java文件放在专用文件夹下,并以版本区分
# 将java加入环境变量。
# echo "export PATH=\$PATH:/usr/local/java/jdk1.8.0_192/bin" >> /etc/profile
# source /etc/profile
3.下载与安装
官方网站:https://pkg.jenkins.io/redhat-stable/
具体网址:https://prodjenkinsreleases.blob.core.windows.net/redhat-stable/jenkins-2.190.3-1.1.noarch.rpm
# cd /software
# wget https://prodjenkinsreleases.blob.core.windows.net/redhat-stable/jenkins-2.190.3-1.1.noarch.rpm
# yum -y install jenkins-2.190.3-1.1.noarch.rpm
注:jenkins默认的java安装路径是/usr/bin/java。
注:jenkins负责启动的配置文件路径是/etc/init.d/jenkins
# vim /etc/init.d/jenkins
/usr/bin/java
修改成
/usr/local/java/jdk版本号/bin/java
/usr/local/java/jdk1.8.0_192/bin/java
# systemctl start jenkins
# chkconfig jenkins on
# ss -nltp
java占用8080端口,视为开启成功
4.jenkins初探
开启一个浏览器,访问jenkins服务器。
URL:IP:8080
提示我:Please wait while Jenkins is getting ready to work ...
等一会后。如果一直不变则需要你进入jenkins的工作目录,打开
# 默认jenkins安装在/var/lib下
# vi /var/lib/jenkins/hudson.model.UpdateCenter.xml
http://updates.jenkins-ci.org/update-center.json
改成
http://mirror.xmission.com/jenkins/updates/update-center.json
或
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/stable/update-center.json
# systemctl restart jenkins
等一小会,页面会变成
解锁 Jenkins
# cat /var/lib/jenkins/secrets/initialAdminPassword
8977544a04844a0e991f658038734cbf
这个就是管理员密码
如果服务员老头眼里冒火,提示报错的内容如下
hudson.security.AccessDeniedException2: anonymous is missing the Overall/Administer permission
则
修改/var/lib/jenkins/config.xml文件
删除authorizationStrategy、securityRealm节点
进入网页配置环节
自定义Jenkins
1.网络情况好,尤其访问外网方便的人。
安装推荐插件
2.网络状况差,选择右一
然后直接X掉右上角。点击开始使用jenkins。
http://IP:8080/user/admin/configure
可以根据需求修改默认admin用户的密码。
也可创建新管理员账号,但admin则失效。
若遗忘密码
# cp /var/lib/jenkins/config.xml /备份目录/config.xml.bak
先备份一下
# vim /var/lib/jenkins/config.xml
打开此文件,然后把下面的一段注释(使用<!-- -->来注释)或删除
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
<denyAnonymousReadAccess>true</denyAnonymousReadAccess>
</authorizationStrategy>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>true</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>
# systemctl stop jenkins
# systemctl start jenkins
重启服务后,web访问就不需要密码验证了
5.jenkins+github+nginx
第一步:github免密。
先操作jenkins这台机器,让它和github账号进行免密ssh关联。
本文以root默认为例,自定义则自主修改。
# ssh-keygen
然后回车三连
# cat /root/.ssh/id_rsa.pub
把公钥加入github。(这段略)
测试下。
# mkdir /test
# cd /test
设置资料
# git config --global user.name "aaa"
# git config --global user.email "aaa@q.com"
# git config --global push.default simple
下载测试,这段可以自行测试
# git clone git@github.com:13331033844/test.git
# cd test
# echo 12345 > index.html
# git add index.html
# git commit -m '12345'
# git push
正常是需要输入账号密码,而这次则不需要,成功免密。
第二步:jenkins安装插件
cd /var/lib/jenkins/plugins/
jenkins安装插件极其坑爹,网络上相关的各种换源并不是对所有人都好使,作者当前网络状况良好,下片一秒好几M,然而,换了清华源之后仍然failure。
根据排查,得出结论。
项目部署需要的插件如下
1.GitHub Authentication
2.Publish Over SSH
算上所有的依赖之后,用wget下载
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/jackson2-api/latest/jackson2-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/script-security/latest/script-security.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/command-launcher/latest/command-launcher.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/github-api/latest/github-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/structs/latest/structs.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/pipeline-stage-step/latest/pipeline-stage-step.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/credentials/latest/credentials.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/apache-httpcomponents-client-4-api/latest/apache-httpcomponents-client-4-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/ssh-credentials/latest/ssh-credentials.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/jsch/latest/jsch.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/git-client/latest/git-client.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/scm-api/latest/scm-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/display-url-api/latest/display-url-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/mailer/latest/mailer.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/git/latest/git.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/token-macro/latest/token-macro.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/plain-credentials/latest/plain-credentials.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/github/latest/github.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/github-branch-source/latest/github-branch-source.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/pipeline-github/latest/pipeline-github.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/junit/latest/junit.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/bouncycastle-api/latest/bouncycastle-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/matrix-project/latest/matrix-project.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/github-organization-folder/latest/github-organization-folder.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/ace-editor/latest/ace-editor.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/jquery-ui/latest/jquery-ui.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/branch-api/latest/branch-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/pipeline-multibranch-defaults/latest/pipeline-multibranch-defaults.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/trilead-api/latest/trilead-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/publish-over-ssh/latest/publish-over-ssh.hpi
# systemctl restart jenkins
重新访问
http://IP:8080/pluginManager/available
搜索下载他俩。
1.GitHub Authentication
2.Publish Over SSH
会自动匹配这些插件,直接安装。
出现报错failure不用理会,安完重启,再安一次,好像就没了。
安装成功后再重启一次
# systemctl restart jenkins
第三步:jenkins私钥配置
在 http://Jenkins_server_IP:8080/configure 里,向下拉。
如果Publish over SSH插件安装成功,则你能看到一个Publish over SSH表单。
将前面与github互连公钥的那份私钥复制进key输入框。
点击add按钮。又弹出4条输入框。这里填写nginx(或web服务)相关信息
Name 自定义一个服务器名字
Hostname web服务器IP
Username web服务器使用用户,默认root
Remote Directory 默认填'/'
第四步:上面填完之后要将jenkins服务器与nginx服务器做免密登陆
# ssh-copy-id -i nginx服务器IP
# ssh-copy-id -i 10.1.1.28
然后点击Test Configuration。
提示Success,视为成功
点击save
然后进入,点击凭证,jenkins,全局凭证,Add Credentials
http://Jenkins_server_IP:8080/credentials/store/system/domain/_/newCredentials
kind 选 SSH Username with private key
Username 填 root
Private Key 选中 Enter directly
弹出key,点击add
复制私钥进入。
其余不填
点击 确定/OK
第五步:创建一个新任务。
回到主页
http://Jenkins_server_IP:8080/
点击 create new jobs
Enter an item name 输入一个名字
选择 Freestyle project
点击 确认/OK
Description 填写点描述
Source Code Management 选择git
Repository URL 填写git的URL
Credentials 选择root
Branch Specifier (blank for 'any') 填写分支名,默认master不动
Build 选择Send files or execute commands over SSH
Source files 一般填写 **/** 表示github中所有文件
Remote directory 填写nginx项目目录,例如/usr/local/nginx/html
其余不填,点击save
6.执行测试
回到主页,点击右侧项目名,再点击左侧的Build Now
左下角会出现一个进度条,小球球变成红色是失败,蓝色是成功
点进去可以看到日志信息,分析错误。
总结:
整套流程是 jenkins 将本机root私钥发送给jenkins服务,两次
jenkins将本机公钥发送给github,nginx分别一次
当我们向github传送代码后,jenkins进行手动构建,可以将github的代码推送到nginx中,当绑定项目时填写多个nginx服务,则共同推送,实现代码的同时发布。
7.jenkins+gitlab+nginx
gitlab:10.1.1.11
第一步:照例先Jenkins下载组件
cd /var/lib/jenkins/plugins/
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/trilead-api/latest/trilead-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/structs/latest/structs.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/pipeline-stage-step/latest/pipeline-stage-step.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/script-security/latest/script-security.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/command-launcher/latest/command-launcher.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/credentials/latest/credentials.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/apache-httpcomponents-client-4-api/latest/apache-httpcomponents-client-4-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/ssh-credentials/latest/ssh-credentials.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/jsch/latest/jsch.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/git-client/latest/git-client.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/scm-api/latest/scm-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/display-url-api/latest/display-url-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/mailer/latest/mailer.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/git/latest/git.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/gitlab-plugin/latest/gitlab-plugin.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/gitlab-oauth/latest/gitlab-oauth.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/gitlab-api/latest/gitlab-api.hpi
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/publish-over-ssh/latest/publish-over-ssh.hpi
下完重启
systemctl restart jenkins
然后进入浏览器
http://Jenkins_server_IP:8080/pluginManager/available
搜索
Gitlab Authentication 安装它就把上面插件一块安了。
第二步:
基本思路还是两次使用公钥,两次使用私钥。
1.jenkins机器向gitlab传递公钥。(未完成)
2.jenkins向nginx传送公钥。(上面已完成)
3.jenkins向jenkins网页端传送两次私钥。(上面已完成)
首先进行gitlab免密,过程略。
第三步:jenkins私钥配置
在 http://Jenkins_server_IP:8080/configure 里,向下拉。
如果Publish over SSH插件安装成功,则你能看到一个Publish over SSH表单。
将前面与github互连公钥的那份私钥复制进key输入框。
点击add按钮。又弹出4条输入框。这里填写nginx(或web服务)相关信息
Name 自定义一个服务器名字
Hostname web服务器IP
Username web服务器使用用户,默认root
Remote Directory 默认填'/'
第四步:将jenkins服务器与nginx服务器做免密登陆
# ssh-copy-id -i nginx服务器IP
# ssh-copy-id -i 10.1.1.28
然后点击Test Configuration。
提示Success,视为成功
点击save
然后进入,点击凭证,jenkins,全局凭证,Add Credentials
http://Jenkins_server_IP:8080/credentials/store/system/domain/_/newCredentials
kind 选 SSH Username with private key
Username 填 root
Private Key 选中 Enter directly
弹出key,点击add
复制私钥进入。
其余不填
点击 确定/OK
第五步:创建一个新任务。
回到主页
http://Jenkins_server_IP:8080/
点击 create new jobs
Enter an item name 输入一个名字
选择 Freestyle project
点击 确认/OK
Description 填写点描述
Source Code Management 选择gitlab
Repository URL 填写gitlab的URL
Credentials 选择root
Branch Specifier (blank for 'any') 填写分支名,默认master不动
Build 选择Send files or execute commands over SSH
Source files 一般填写 **/** 表示gitlab中所有文件
Remote directory 填写nginx项目目录,例如/usr/local/nginx/html
其余不填,点击save
第六步:build一下,没有报错就能成功了。