标签:公钥 验证 linux 安装jenkins 格式 locale 返回 国外 工具包
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序
安装可以参考下官方文档:
https://jenkins.io/zh/doc/book/installing/
Jenkins 需要 Java 环境。所以处理Jenkins本身,还需要安装Java。
安装jdk
首先需要安装Java 8。无论是Java运行时环境(JRE)还是Java开发工具包(JDK)都可以。
查看JDK软件包列表:
$ yum search java | grep -i jdk
过滤条件有点粗,列出的软件包中,有如下几个jdk:
java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment 8
java-11-openjdk.x86_64 : OpenJDK Runtime Environment 11
至少需要Java 8,所以1.6.0和1.7.0就太旧了。这里安装1.8.0。
yum 安装 openjdk:
# yum install java-1.8.0-openjdk
验证一下:
$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
$
安装Jenkins官方yum源
官方yum源从这里找: https://pkg.jenkins.io/
页面里有详细的说明,具体是执行如下命令完成安装:
$ wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
$ rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
$ yum install jenkins
不过访问国外的资源可能会有问题,可以使用国内的镜像源。
清华大学开源软件镜像站,这里有jenkins的镜像资源,选择直接从镜像站点安装。这里选择安装一个稳定版:
$ yum install https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm
启动服务
安装完成后启动服务:
$ systemctl start jenkins
这里用不了enable,不过执行后会有提示:
$ systemctl enable jenkins
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on
$
默认应该也已经是开机启动的了,所以只需要启动服务就好了。
Jenkins是通过Web来管理的,默认的端口是8080。
检查端口监听
可以使用ss命令查看本地监听的端口:
$ ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 50 :::8080 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
$
开启防火墙策略
如果要被别的主机访问,就需要开启防火墙:
$ firewall-cmd --permanent --add-port=8080/tcp
$ firewall-cmd --reload
然后可以使用浏览器访问页面了。
安装完成后,就应该是进行“安装后设置向导”,也就是下一章的内容。不过在那之前,最好再修改2个配置文件,把里面引用的国外资源修改掉。
修改配置文件/var/lib/jenkins/hudson.model.UpdateCenter.xml
,默认的设置如下:
$ cat /var/lib/jenkins/hudson.model.UpdateCenter.xml
<?xml version=‘1.1‘ encoding=‘UTF-8‘?>
<sites>
<site>
<id>default</id>
<url>https://updates.jenkins.io/update-center.json</url>
</site>
</sites>
把https改成http有时候就能解决,不过这依然是一个国外资源。可以替换为一个国内的镜像资源,比如清华大学开源软件镜像站的资源:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
修改后,可以重启一下jenkins服务,这样会立刻去新的地址下载文件。
执行这条命令就能完成文件的替换:
$ sed -i ‘s@<url>https://updates.jenkins.io/update-center.json</url>@<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>@‘ /var/lib/jenkins/hudson.model.UpdateCenter.xml && systemctl restart jenkins
下载完成后,jenkins目录下会多出一个updates目录:
$ ll /var/lib/jenkins/updates/
总用量 1752
-rw-r--r--. 1 jenkins jenkins 1782472 10月 1 10:46 default.json
-rw-r--r--. 1 jenkins jenkins 5212 10月 1 10:46 hudson.tasks.Maven.MavenInstaller
$
这里新下载的default.json文件是下一个需要修改的文件。
通过Web进行修改
另外,还可以直接在Web上进行修改。Web页面的操作要先完成解锁(下一章的内容),然后访问如下这个URL,修改页面下面的“Update Site”里的URL地址:
http://localhost:8080/pluginManager/advanced
配置文件default.json是一个json格式的文件,内容非常多,而且文件的内容没有分行,都在一行里。
解析JSON
使用如下的方法可以解析:
$ cat /var/lib/jenkins/updates/default.json | python -m json.tool | wc -l
72402
$
Linux下还有一个jq工具,不过需要安装。解析后统计了一下行数,非常多的内容,以后应该是可以在Web上修改的。
显示前10行的内容:
$ cat /var/lib/jenkins/updates/default.json | python -m json.tool 2>/dev/null | head
{
"connectionCheckUrl": "http://www.google.com/",
"core": {
"buildDate": "Sep 29, 2019",
"name": "core",
"sha1": "KU7g2KwfsFq1iFyhbI527vtnN1k=",
"sha256": "EBv1Xbf1yJNmGmi2ymEawZzaJlh8rQ1y6BV/HvqMpvM=",
"url": "http://updates.jenkins-ci.org/download/war/2.198/jenkins.war",
"version": "2.198"
},
$
修改配置文件
即使是从镜像站点下载的配置文件,文件的内容也是和官方一样的。下载插件的url指向的依然是官方的站点,而不是镜像站点。所以需要去配置文件中把所有的url都改掉,量比较大,可以使用sed来修改。
下面是修改配置文件并验证修改后结果的过程:
$ sed ‘s@"url":"http://updates.jenkins-ci.org/download/plugins@"url":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins@g‘ /var/lib/jenkins/updates/default.json | python -m json.tool 2>/dev/null | grep url -a1 | head -n 15
"sha256": "EBv1Xbf1yJNmGmi2ymEawZzaJlh8rQ1y6BV/HvqMpvM=",
"url": "http://updates.jenkins-ci.org/download/war/2.198/jenkins.war",
"version": "2.198"
--
"title": "AnchorChain",
"url": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/AnchorChain/1.0/AnchorChain.hpi",
"version": "1.0",
--
"title": "Apica Loadtest",
"url": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/ApicaLoadtest/1.10/ApicaLoadtest.hpi",
"version": "1.10",
--
"title": "Blame Subversion",
"url": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/BlameSubversion/1.200/BlameSubversion.hpi",
"version": "1.200",
$ sed -i ‘s@"url":"http://updates.jenkins-ci.org/download/plugins@"url":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins@g‘ /var/lib/jenkins/updates/default.json
$ cat /var/lib/jenkins/updates/default.json | python -m json.tool 2>/dev/null | grep url -a1 | head -n 15
"sha256": "EBv1Xbf1yJNmGmi2ymEawZzaJlh8rQ1y6BV/HvqMpvM=",
"url": "http://updates.jenkins-ci.org/download/war/2.198/jenkins.war",
"version": "2.198"
--
"title": "AnchorChain",
"url": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/AnchorChain/1.0/AnchorChain.hpi",
"version": "1.0",
--
"title": "Apica Loadtest",
"url": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/ApicaLoadtest/1.10/ApicaLoadtest.hpi",
"version": "1.10",
--
"title": "Blame Subversion",
"url": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/BlameSubversion/1.200/BlameSubversion.hpi",
"version": "1.200",
$
这么做还会有问题,因为上一小节设置的“升级站点”的URL,Jenkins依然会去那里更新文件。更新后,这里做的修改又会被覆盖掉。
显示配置文件前10行的内容:
$ cat /var/lib/jenkins/updates/default.json | python -m json.tool 2>/dev/null | head
{
"connectionCheckUrl": "http://www.google.com/",
"core": {
"buildDate": "Sep 29, 2019",
"name": "core",
"sha1": "KU7g2KwfsFq1iFyhbI527vtnN1k=",
"sha256": "EBv1Xbf1yJNmGmi2ymEawZzaJlh8rQ1y6BV/HvqMpvM=",
"url": "http://updates.jenkins-ci.org/download/war/2.198/jenkins.war",
"version": "2.198"
},
$
这里要修改的就是connectionCheckUrl的值。这个值是用来检查网络连接的,换成一个可以正常访问的地址。在设置之前先用curl命令测试一下要设置的url地址:
$ curl https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME
1569891721
$ curl https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME -I
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Tue, 01 Oct 2019 03:51:42 GMT
Content-Type: application/octet-stream
Content-Length: 11
Last-Modified: Tue, 01 Oct 2019 01:02:01 GMT
Connection: keep-alive
ETag: "5d92a589-b"
Strict-Transport-Security: max-age=31536000
X-TUNA-MIRROR-ID: nanomirrors
Accept-Ranges: bytes
$
虽然不清楚具体检查的逻辑,不过确保返回状态码200比较好。
下面是修改配置文件并验证修改后结果的过程:
[root@Jenkins ~]# sed ‘s@"connectionCheckUrl":"http://www.google.com/"@"connectionCheckUrl":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME"@‘ /var/lib/jenkins/updates/default.json | cut -f1-2 -d","
{"connectionCheckUrl":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME","core":{"buildDate":"Sep 29
[root@Jenkins ~]# sed -i ‘s@"connectionCheckUrl":"http://www.google.com/"@"connectionCheckUrl":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME"@‘ /var/lib/jenkins/updates/default.json
[root@Jenkins ~]# cat /var/lib/jenkins/updates/default.json | python -m json.tool 2>/dev/null | head
{
"connectionCheckUrl": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME",
"core": {
"buildDate": "Sep 29, 2019",
"name": "core",
"sha1": "KU7g2KwfsFq1iFyhbI527vtnN1k=",
"sha256": "EBv1Xbf1yJNmGmi2ymEawZzaJlh8rQ1y6BV/HvqMpvM=",
"url": "http://updates.jenkins-ci.org/download/war/2.198/jenkins.war",
"version": "2.198"
},
[root@Jenkins ~]#
上面的3个步骤,整理后就是下面这1条命令:
sed -i ‘s@<url>https://updates.jenkins.io/update-center.json</url>@<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>@‘ /var/lib/jenkins/hudson.model.UpdateCenter.xml && systemctl restart jenkins && until [ -f /var/lib/jenkins/updates/default.json ]; do echo "等待文件下载 ..." && sleep 1; done && echo "文件已下载,更新文件内容 ..." && sed -i ‘s@"url":"http://updates.jenkins-ci.org/download/plugins@"url":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins@g‘ /var/lib/jenkins/updates/default.json && sed -i ‘s@"connectionCheckUrl":"http://www.google.com/"@"connectionCheckUrl":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME"@‘ /var/lib/jenkins/updates/default.json && systemctl restart jenkins
下载安装并运行Jenkins后,即将开始进入安装向导。
此安装向导会引导您完成几个快速“一次性”步骤来解锁Jenkins,使用插件对其进行自定义,并创建第一个可以继续访问Jenkins的管理员用户。
服务启动后,就可以使用网页来进行设置了。jenkins默认使用的端口是8080。
第一次访问新的Jenkins时,系统会要求使用自动生成的密码对其进行解锁。
密码保存在服务器上的一个文件中,页面上会有提示:
$ cat /var/lib/jenkins/secrets/initialAdminPassword
从服务器的文件中获取密码后,填入Web页面即可。
这个页面相当于是一个登录页面。如果jenkins没有解锁,访问任何页面,应该都会跳转到这个页面要求解锁。
解锁之后,如果已经解决了上面的镜像站点的问题,就可以进到“自定义Jenkins”页面。这里可以安装任何数量的插件作为初始步骤的一部分。这里有2个选择:
不确定的话,就先按推荐的来。如果已经设置好了镜像站点,安装起来是很快的。
这个页面就是一个简单的注册操作。
完成后,可能跳转到了一个空白的页面,并且再访问主页仍然是空白。这时需要重启一下Jenkins。访问如下的URL通过Web来重启:
http://localhost:8080/restart
重启之后,就是使用用户名和密码的登录界面了。
再介绍几个常用插件的安装和配置。
安装插件的页面是这个URL:
http://172.17.76.88:8080/pluginManager/available
在页面上搜一下插件的名称,勾选之后直接安装(Install without restart)即可。
另外立即获取(Check now)不要随便点,这会触发更新配置文件,那么之前对配置文件的修改就被覆盖了。
这个插件可以强制浏览器上显示中文。
Jenkins默认就支持中文了。使用google浏览器,并且把语言设置成中文就能看到效果。有的浏览器可能无法自动识别,就需要先安装Locale插件并进行设置。
安装完成后,可以在配置界面中找到Local的配置项了。配置界面如下:
http://172.17.76.88:8080/configure
一共就2个配置:
最后点击最下面的 Apply 按钮是配置生效。再刷新下页面就都是中文了。
Jenkins需要远程控制主机,就需要通过SSH连接。这个插件就是完成SSH认证的。
设置私钥
设置密钥对,一般使用 ssh-keygen
命令,不展开了。
配置界面提供3中方式指定认证的方式:
“Passphrase”是在生成密钥对的时候设置的,一般偷懒就直接回车,表示空。所以一般也都不用填。
"Key"就是直接贴上私钥文件的内容。私钥文件应该是不公开的,这里明码贴出来,安全性上有点问题。这就需要配合passphrase生成加密的私钥文件,这样就可以把私钥的内容明码贴出来了,而Passphrase就和密码一样是不可见的。
加密后的私钥文件和未加密的内容是有区别的,要使用加密的私钥文件,就必须提供密语。
加密过的私钥文件:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,DFC1AE0AD622F86CAF7D4487A63342D4
Ike/EilireXZs7cuhvyIEVipDvpI+nqa4iHrfAdEnQF3q7bI4KTh5pXHYigli/IA
rgmxxlm4SbxSk60zECiAvuTX/4UQ3oJTBYWYW6zB5jg8ey28vHyWbDQXKvysvSvS
... 省略中间的内容
sbvDSzj53kSWSoPWvN1woh1QSe8jOYQCoIEUDNaZZXM/kG6vFw2ykeiwL/+olKBl
knIDLRthD2QH0lYFOBlhMBkPnA8/QXVFqaMSEzvDaL5mce6QbnDAbwvQW+HIkN5F
-----END RSA PRIVATE KEY-----
不加密的私钥文件:
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA5wXZvKOMZgqWTG3QrIicRVF15ka5otSkU4XPnKFoFLKItGQZ
7A3PTLsQ49RvP5GMe0aFAD7oH9tv03roPRGcAJUTdFeNFc66drdwLOS3zoXY1rDZ
... 省略中间的内容
ymqEwX97zjQeXV/U2kzS9aSBZWjqeI73QhN+PUKYI31MV67yAjtQXyj02g7La4ef
jFa06rFrs2HJj/HdHWoeeEPNHKL3Kht3y2JIBGOdMFtXR6ijN/ZI
-----END RSA PRIVATE KEY-----
粘贴私钥的时候把整个文件的内容都贴上就对了,包括第一行和最后一行。
远程主机设置
点新增就增加一台服务器,填写4个参数:
“Remote Directory”参数,省事就写根目录(/),填写用户的家目录应该更好的样子。基本不影响使用,影响的可能就是连接后使用相对路径的效果。
验证测试
设置完成,并且把公钥复制到远程主机上之后,就可以按“Test Configuration”来验证了。
复制公钥一般使用 ssh-copy-id
命令,也可以直接用scp等命令放到远程主机正确的文件夹下。
单机验证
如果要验证插件功能,也不必再开别的主机,可以尝试ssh连接自己就好了。
另外,把“Path to key”和“Key”都留空,而在“Passphrase”里填写ssh登录的密码似乎也可以的样子。至少本机的验证是通过了。
标签:公钥 验证 linux 安装jenkins 格式 locale 返回 国外 工具包
原文地址:https://blog.51cto.com/steed/2458385