存檔

‘linux’ 分類的存檔

jenkins做持續集成二

2019年7月25日 沒有評論

上一篇文章完成了jenkins的裝和基本配置

新建一個maven的持續集成項目。

注意:maven命令我們在上文最后部分自動安裝,配置保存之后并不會立刻安裝maven,maven命令工具會在第一次構建maven項目是自動下載安裝。

新建項目


配置基本信息

配置源碼獲取方式為git

遇到的一個錯誤

 No valid crumb was included in the request

在jenkins 的Configure Global Security下 , 取消“防止跨站點請求偽造(Prevent Cross Site Request Forgery exploits)”的勾選或者使用代理的情況下勾選代理。(如下圖)

繼續,設置構建觸發條件,定時掃描構建

構建前后都可以執行特定的動作如shell腳本,這里演示就省略了。只填入構建命令clean package

報保存配置之后,點立即構建

jenkins就會在后臺開始自動構架,這里會顯示構建進度,構建完成后紅色表示失敗,藍色表示成功,點擊可以進去查看日志。

點擊console查看日志

如果執行錯誤可以通過日志查看原因,修改錯誤后,重新構建

可以看到前面三步有構建失敗,查看日志可以發現原因:一個是找不到pom.xml,另一是maven下載不了文件。pom文件需要從工程根目錄開始算,加上子文件夾路徑即可。

通過查看構建日志, maven報錯如下:

Failed to transfer Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:1.4.1.RELEASE from/to central (https://repo.maven.apache.org/maven2): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.52.215] failed: Connection timed out (Connection timed out)
ERROR: Failed to parse POMs
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM for com.jege.spring.boot:spring-boot-hello-world:1.0.0.RELEASE: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:1.4.1.RELEASE from/to central (https://repo.maven.apache.org/maven2): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.52.215] failed: Connection timed out (Connection timed out) and 'parent.relativePath' points at no local POM @ line 24, column 10

構建失敗,是因為jenkins配置了代理,但是自動安裝的maven沒有設置代理,給maven配置代理之后構建成功。

maven代理配置方法:

檢查完畢之后,編輯~/.m2/settings.xml文件,代碼如下:添加代理配置如下:

<settings>
? ?...
<proxies>
? ? ? <proxy>
? ? ? ? ?<id>my-proxy</id>
? ? ? ? ?<active>true</active>
? ? ? ? ?<protocol>http</protocol>
? ? ? ? ?<host>192.168.10.117</host>
? ? ? ? ?<port>3267</port>
? ? ? ? ?<!--
? ? ? ? ?<username>shihuan</username>
? ? ? ? ?<password>123456</password>
? ? ? ? ?<nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts>
? ? ? ? ?-->
? ? ? </proxy>
? ? </proxies>
? ?...
</settings>? ?

proxies下可以配proxy元素,如果你聲明了多個proxy元素,則默認情況下第一個被激活的proxy會生效。這里聲明 了一個id為my-proxy的代理,active的值為true表示激活該代理,protocol表示使用的代理協議,這里是http。當然,最重要的 是指定正確的代理服務器的ip和端口。

分類: linux 標簽: ,

使用docker安裝jenkins做持續集成

2019年7月24日 1 條評論

一、jenkins的安裝

參考上文docker環境的安裝配置完成docker的安裝。

無論安裝什么軟件也就是一條命令的事,jenkins也不例外。

docker pull jenkins/jenkins

docker run -d -p 80:8080 -p 50000:50000 -v jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins jenkins

  • -d 后臺運行鏡像 -p 80:8080 將鏡像的8080端口映射到服務器的80端口
  • -p 50000:50000 將鏡像的50000端口映射到服務器的50000端口
  • -v jenkins:/var/jenkins_home 冒號前面的jenkins表示的是docker卷名,冒號后面的 /var/jenkins_home目錄為容器中jenkins工作目錄。
  • -v /etc/localtime:/etc/localtime 讓容器使用和服務器同樣的時間設置。
  • --name jenkins 給容器起一個別名

一定不能修改卷名jenkins,這個卷名是容器自帶的存放jenkins文件的地方,如果修改為別的路徑就會找不到文件,啟動jenkins就會退出。

types-of-mounts

docker 為我們提供了三種不同的方式將數據掛載到容器中:volume、bind mount、tmpfs

volume 方式是 docker 中數據持久化的最佳方式。

  • docker 默認在主機上會有一個特定的區域(/var/lib/docker/volumes/ Linux),該區域用來存放 volume。
  • 非 docker 進程不應該去修改該區域。
  • volume 可以通過 docker volume 進行管理,如創建、刪除等操作。
  • volume 在生成的時候如果不指定名稱,便會隨機生成。

  • volume 在容器停止或刪除的時候會繼續存在,如需刪除需要顯示聲明。

volume 方式應該是持久化數據的首選方式,我們啟動jenkins容器命令中的第二個-v參數是Bind mount,它會覆蓋容器中的文件,而volume mount則不會,即如果容器中已有文件,則會將文件同步到主機的目錄上 。

二、jenkins的配置

打開瀏覽器輸入http://ip進入Jenkins登錄頁面。頁面會提示你到服務器的指定位置獲取初始化密碼。

由于我們是在容器里運行的jenkins,需要進入容器去查看 /var/jenkins_home/secrets/initialAdminPassword

docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

在文本框中輸入這串密碼,點繼續

如果是內網,jenkins會報網絡連接超時,提示配置代理。

輸入代理信息后繼續

進入插件安裝界面,點擊左邊的推薦插件 Install suggested plugins 后繼續

開始自動安裝

創建用后保存并繼續,進入首頁,可以創建job等任務

默認沒有安裝maven插件

點擊上圖中復選框自動重啟

安裝maven,選擇addmaven,然后輸入名字,選自動安裝,保存

重啟jenkins http://ip/restart/

分類: linux 標簽:

docker快速入門

2019年7月23日 沒有評論

一、什么是docker

dcoker包括一個命令行程序、一個后臺守護進程,以及一組遠程服務器。他簡化了安裝、運行、發布和刪除軟件。

二、鏡像、容器、倉庫

鏡像,是特殊的文件系統,他包含程序、配置、資源等。

容器,鏡像的實例。就像是類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。

倉庫,用于保存鏡像的服務。

三、centos安裝docker和docker-compose

注意需要使用 root 賬戶或者可以使用 sudo 的賬戶

Docker從1.13版本之后采用時間線的方式作為版本號,分為社區版CE和企業版EE。

社區版是免費提供給個人開發者和小型團體使用的,企業版會提供額外的收費服務,比如經過官方測試認證過的基礎設施、容器、插件等。

社區版按照stable和edge兩種方式發布,每個季度更新stable版本,如18.06,18.09;每個月份更新edge版本,如18.09,18.10。

安裝docker

1、Docker 要求 CentOS 系統的內核版本高于 3.10 ,查看本頁面的前提條件來驗證你的CentOS 版本是否支持 Docker 。

通過 uname -r 命令查看你當前的內核版本

 $ uname -r

2、使用 root 權限登錄 Centos。確保 yum 包更新到最新。

$ sudo yum update

3、卸載舊版本(如果安裝過舊版本的話)

$ sudo yum remove docker  docker-common docker-selinux docker-engine

4、安裝依賴

sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

5、添加docker下載倉庫

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

6、docker安裝和驗證

# 安裝docker-ce
sudo yum install docker-ce

# 啟動docker-ce
sudo systemctl start docker

# 驗證
sudo docker --version

安裝 docker-compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

五、安裝過程中可能遇到的錯誤

Error response from daemon: Get https://index.docker.io/v1/search?q=nginx&n=25: dial tcp: lookup index.docker.io on [::1]:53: read udp [::1]:57785->[::1]:53: read: connection refused

需要配置dns,查看服務器DNS網絡配置

vi /etc/resolv.conf

添加
nameserver 8.8.8.8

docker pull nginx
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: req uest canceled while waiting for connection (Client.Timeout exceeded while await ing headers)

這個問題多是網絡連接不好或者沒有網絡,網絡不好可以采用國內鏡像,內網用戶沒有網絡可以配置代理。

六、docker代理設置

內網服務器不能直接聯網,雖然命令行配置了http_proxy環境變量,但是docker命令行工具讀不到,會出現上面的類似錯誤。需要單獨配置docker的代理:

覆蓋docker.service file來實現

1. 創建 docker.service.d 目錄

$ mkdir -p /etc/systemd/system/docker.service.d

2. 創建HTTP 或者HTTPS 代理文件

HTTP:

vim /etc/systemd/system/docker.service.d/http-proxy.conf

HTTPS:

vim /etc/systemd/system/docker.service.d/https-proxy.conf

由于我這里用的是 “HTTPS”,所以只給大家演示HTTPS代理的配置,對于HTTP代理的修改,非常相似,大家可以參考我最后貼出來的連接。

3. 修改 https-proxy.conf 文件

[Service]
Environment="HTTPS_PROXY=xxx.xxx.xxx.xxx:443" "NO_PROXY=localhost,127.0.0.1,xxx.xxxxxx:5000"

解析:

主要是兩點內容:

①  HTTPS_PROXY 將它的值對應到您所希望設置的代理服務地址和端口(例如: HTTPS_PROXY=https://proxy.example.com:443),我這里為了保護隱私,就用xxx代替.

②  NO_PROXY 意味著某些情況下我們不需要使用HTTPS代理來訪問,一般這就配置私有倉庫的路徑(例如:NO_PROXY=localhost,127.0.0.1,mydocker-registry.com:5000

4. 完成修改后保存/刷新

###Flush changes:
#systemctl daemon-reload

###Restart Docker:
#systemctl restart docker

5. 查看修改結果

#systemctl show --property=Environment docker

Environment=HTTPS_PROXY=xxx.xxx.xxx.xxx:443 NO_PROXY=localhost,127.0.0.1,mydocker-registry.com:5000

測試:

七、如何使用Docker加速器

針對Docker客戶端版本大于1.10的用戶

修改daemon配置文件/etc/docker/daemon.json來使用加速器:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://w5z91a3d.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

八、docker常用命令

docker拉取鏡像

docker pull [選項] name[:tag]

docker查看鏡像

docker images

創建并啟動容器

docker run [options] image [command] [arg...]

docker run -d -p 80:80 --name cn1 nginx

-d 放在后臺執行

-p 主機端口:容器端口 將容器的端口映射到主機上,目的是可以直接對外提供訪問

--name 指定容器名

查看容器狀態

docker ps

驗證docker運行正常

進入容器

docker exec -it cn1 bash

對容器的操作,就像普通linux那樣。我們定位到/usr/share/nginx/html/目錄,列出所有文件:

目錄下有50x.htmlindex.html兩個文件,我們新建一個test.html

echo "<html><header><title>測試頁面</title></header>test</html>" >> test.html

測試之前,先從docker退出來,不能可能會找不到命令

停止容器

docker stop [options] container

停止cn1容器
(也可以指定container id停止容器,docker stop 0e9e817ddb5e) ,不能使用鏡像名

查看停止狀態容器

容器停止并沒有銷毀,我們可以使用docker ps -a查看停止狀態的容器

重啟停止狀態的容器

docker start cn1

刪除容器

刪除容器前,必須先停止容器。刪除命令:
docker rm 容器名

再次查看終止狀態容器,docker ps -a

容器cn1已經被徹底銷毀,銷毀的容器不能使用start啟動,需要使用run重啟運行。

刪除鏡像

刪除命令:
docker rmi -f {repository}:{tag}docker rmi -f {image id}?

九、docker 網絡

linux使用namespace來進行資源的隔離 ,docker的隔離性;

1、docker的網路類型分為:

Bridge模式:橋接(默認的模式)

host模式:容器將不會獲得獨立的network namespace,將和主機公用一個;即在docker中使用網絡和主機上一樣的;

None:不與外界任何東西進行通訊

2、采用Bridge的時候需要和主機通訊,就需要使用端口映射

3、端口映射

主機的8080端口映射到容器中的80端口
$ docker run -d --name cn1 -p 8080:80 nginx  

十、docker常用命令速查

docker ps # 查看正在運行的容器
docker ps -a # 查看所有容器
docker ps -l # 查看最近一次運行的容器

docker create 容器名或者容器ID # 創建容器
docker start [-i] 容器名 # 啟動容器
docker run 容器名或者容器ID # 運行容器,相當于docker create + docker start
docker attach 容器名或者容器ID bash # 進入容器的命令行(退出容器后容器會停止)
docker exec -it 容器名或者容器ID bash # 進入容器的命令行
docker stop 容器名 # 停止容器
docker rm 容器名 # 刪除容器

docker top 容器名 # 查看WEB應用程序容器的進程
docker inspect 容器名 # 查看Docker的底層信息

分類: linux 標簽:

linux通過openssh無密碼訪問window

2019年7月18日 沒有評論

對于習慣了使用ssh連接linux執行命令的用戶來說,win10已經提供了新的可能,內置了openssh,windows也可以很容易的提供sshd服務,然后執行powershell。對于win7需要手動安裝,本文主要介紹win7安裝openssh和linux無密碼訪問linux執行程序。

win7安裝openssh

安裝包下載地址:
https://github.com/PowerShell/Win32-OpenSSH/releases

64位系統下載
OpenSSH-Win64.zip

將下載的zip包解壓縮到C:\Program Files\OpenSSH

安裝sshd服務

PS C:\Windows\system32> cd 'C:\Program Files\OpenSSH '
PS C:\Program Files\OpenSSH> powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
[SC] SetServiceObjectSecurity 成功
[SC] ChangeServiceConfig2 成功
[SC] ChangeServiceConfig2 成功
sshd and ssh-agent services successfully installed

添加入站防火墻端口22,允許22端口可訪問

PS C:\Program Files\OpenSSH> New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Directio
n Inbound -Protocol TCP -Action Allow -LocalPort 22

win7沒這個命令,自己去手動在防火墻配置添加:

控制面板\所有控制面板項\Windows 防火墻\高級設置

打開防火請22端口

啟動ssh服務:net start sshd

現在已經可在linx使用密碼訪問服務了。

linux無密碼訪問windows

配置文件位置C:\ProgramData\ssh\sshd_config,所在的目錄是隱藏目錄。打開sshd的配置文件之后,修改如下參數,去掉前面的注釋

PubkeyAuthentication yes

注釋掉結尾兩行

重啟sshd

net stop sshd ;net start sshd

Linux生成密鑰對:

ssh-keygen -t rsa -f id_rsa

把生成的公鑰id_rsa.pub內容添加到windows的
%systemdrive%\Users\<user>\.ssh\authorized_keys (如果文件不存在需要先創建)

linux下面執行 ssh -i .\id_rsa [email protected] 就可以無密碼訪問linux了。 或者把id_rsa訪問~/.ssh目錄下,這樣可以直接
ssh [email protected]

遇到如下錯誤:

2538868 2019-07-18 10:26:11.645 debug1: userauth_pubkey: test pkalg rsa-sha2-512 pkblob RSA SHA256:6LcR7NR13TTY9qR7G6HumknjLfjyrW/GIX3NfQa13Jg [preauth]
2538868 2019-07-18 10:26:11.645 debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys
2538868 2019-07-18 10:26:11.648 Authentication refused.
2538868 2019-07-18 10:26:11.648 Failed publickey for user from 10.1.1.4 port 48402 ssh2: RSA SHA256:6LcR7NR13TTY9qR7G6HumknjLfjyrW/GIX3NfQa13Jg

基本都是 authorized_keys 文件權限設置的不正確

只能 System, Administrators和user 三個用戶對
authorized_keys 有所有權限,并且文件的所有者需要是user。

檢查文件權限:
icacls %systemdrive%\Users\<user>\.ssh\authorized_keys

ssh客戶端配置錯誤日志輸出:

ssh客戶端查看日志方式 ,使用參數-vv
ssh -vv

ssh服務器端輸出日志方式:

修改配置文件 sshd_config,然后重啟sshd

  • SyslogFacility LOCAL0
  • LogLevel?to?DEBUG?(or?DEBUG2/DEBUG3 for higher levels of logging

linux環境下權限配置

no 'w' for go anywhere (group or others)
700 for?.ssh
600 for?.ssh/authorized_keys

chmod go-w /home/your-user
chmod 700  /home/your-user/.ssh
chmod 600  /home/your-user/.ssh/authorized_keys*

這其中很多波折沒有一一寫出來,linux的日志比較詳細,windows要么提示權限不對,要么提示失敗,沒有具體的錯誤點提示。微軟在github上有很多解釋說的很不錯,在最后要放棄的時候發現只要把你的authorized_keys文件跟.ssh目錄下的其它文件配置一致是不是就能解決問題,一試還真行。

linux查看服務sshd日志在tail -f /var/log/secure

https://github.com/PowerShell/Win32-OpenSSH/wiki/ssh.exe-examples
https://github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps
https://github.com/PowerShell/Win32-OpenSSH/issues/870
https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH
分類: linux 標簽:

centos安裝powershell

2019年7月17日 沒有評論

微軟powershell功能很強大,也支持了很多linux命令,對于只停留在cmd的同學可以試試,除了命令行,還可以用來開發圖形程序。

powershell并且不綁定在windows,微軟開源了代碼,在linux也可以安裝。利用這個特性,linux就可以通過powershell遠程執行windows中的程序。

powershell的安裝也非常容易,微軟在github上提供了編譯好的不同系統的安裝包,可以更具自己喜歡的系統來選擇。

https://github.com/PowerShell/PowerShell/releases/download/v6.2.2/powershell-6.2.2-1.rhel.7.x86_64.rpm

centos通過rpm方式安裝:

wget https://github.com/PowerShell/PowerShell/releases/download/v6.2.2/powershell-6.2.2-1.rhel.7.x86_64.rpm
rpm -ivh  powershell-6.2.2-1.rhel.7.x86_64.rpm 

安裝完成之后的測試需要特別注意,網上很多方法都說跟windows類似使用powershell進入,實際上目前已經變成了pwsh

分類: linux 標簽:

docker安裝

2019年1月10日 沒有評論

17年以后docker有docker-ce和dcoker-ee兩個版本,ee企業版是給企業用戶使用的閉源版本需要收費,ce社區版為原來的docker開源版本。

自動安裝最新的docker-ce

安裝完成之后默認沒有啟動docker,使用如下命令啟動docker

檢查進程已正常啟動

或者手動安裝源文件后使用yum來安裝

設置開機啟動docker

分類: linux 標簽:

linux安裝groovy

2018年5月29日 1 條評論

linux系統安裝groovy環境

分類: linux 標簽:

訪問https報Unknown SSL protocol error in connection to錯誤

2018年3月20日 沒有評論

網站升級httsp后,用curl訪問,長時間不返回結果,報ssl handshake 協議錯誤,具體如下。
原因是curl版本太舊,可以使用curl的--sslv3參數,或者升級curl本本。

$ curl -v https://www.264.cn/shengqi/ --user-agent "Mozilla/5.0" --silent

* timeout on name lookup is not supported
* Trying 47.52.250.55...
* TCP_NODELAY set
* Connected to www.264.cn (47.52.250.55) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* Unknown SSL protocol error in connection to www.264.cn:443
* Curl_http_done: called premature == 1
* stopped the pause stream!
* Closing connection 0

分類: linux 標簽: ,

tcpdump抓取http的請求頭和響應信息

2017年8月21日 沒有評論

tcpdump過濾HTTP的GET請求:

sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

tcpdump過濾HTTP的POST請求:

sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

tcpdump過濾HTTP的請求和響應頭信息,以及請求和響應消息體信息:

tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
tcpdump -X -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

分類: linux 標簽:

git master origin HEAD的區別

2017年3月29日 沒有評論

HEAD :當前活躍分支的游標,可以用 checkout 命令改變 HEAD 指向的位置。形象的記憶就是:你現在在哪兒,HEAD 就指向哪兒,所以 Git 才知道你在那兒!

master: 首次創建倉庫時默認分支的名字,在大多數情況下,master是指主干分支。

origin: 默認的遠程倉庫的名字。

HEAD是git內置的定義好的特定含義功能,不可以修改。master,origin都是常用的公共命名方式,可以有自己的定義。

ps:
FETCH_HEAD: 是一個版本鏈接,記錄在本地的一個文件中,指向著目前已經從遠程倉庫取下來的分支的末端版本

參考
http://marklodato.github.io/visual-git-guide/index-zh-cn.html

分類: linux 標簽:
网球冠军