Jenkins官網css
Build great things at any scale The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project.html
其是一款開源自動化部署服務器,由java編寫,目的是爲了持久集成。前端
先添加其Debian
軟件包,而後更新存儲庫,最後使用存儲庫apt-get
安裝jenkins
。vue
安裝jdkjava
sudo apt-get install openjdk-8-jdk
複製代碼
安裝完成以下node
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/appletviewer to provide /usr/bin/appletviewer (appletviewer) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jconsole to provide /usr/bin/jconsole (jconsole) in auto mode
Processing triggers for libc-bin (2.23-0ubuntu10) ...
Processing triggers for systemd (229-4ubuntu21.2) ...
Processing triggers for ureadahead (0.100.0-19) ...
Processing triggers for ca-certificates (20170717~16.04.1) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
done.
複製代碼
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
複製代碼
出現ok
,添加成功linux
sources.list
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
複製代碼
添加成功以下git
deb http://pkg.jenkins.io/debian-stable binary/
複製代碼
sudo apt-get update
複製代碼
更新成功以下github
Ign:17 http://pkg.jenkins.io/debian-stable binary/ InRelease
Get:18 http://pkg.jenkins.io/debian-stable binary/ Release [2042 B]
Get:19 http://pkg.jenkins.io/debian-stable binary/ Release.gpg [181 B]
Ign:20 https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 InRelease
Hit:21 https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 Release
Get:23 http://pkg.jenkins.io/debian-stable binary/ Packages [14.7 kB]
Fetched 6813 kB in 3s (2187 kB/s)
Reading package lists... Done
複製代碼
sudo apt-get install jenkins
複製代碼
安裝成功以下web
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
locale: Cannot set LC_ALL to default locale: No such file or directory
Selecting previously unselected package daemon.
(Reading database ... 136881 files and directories currently installed.)
Preparing to unpack .../daemon_0.6.4-1_amd64.deb ...
Unpacking daemon (0.6.4-1) ...
Selecting previously unselected package jenkins.
Preparing to unpack .../jenkins_2.164.2_all.deb ...
Unpacking jenkins (2.164.2) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for systemd (229-4ubuntu21.2) ...
Processing triggers for ureadahead (0.100.0-19) ...
Setting up daemon (0.6.4-1) ...
Setting up jenkins (2.164.2) ...
Processing triggers for systemd (229-4ubuntu21.2) ...
Processing triggers for ureadahead (0.100.0-19) ...
複製代碼
/etc/init.d/jenkins
腳本sudo vim /etc/init.d/jenkins
複製代碼
修改$HTTP_PORT
改爲所需的端口
# Verify that the jenkins port is not already in use, winstone does not exit
# even for BindException
check_tcp_port "http" "$HTTP_PORT" "1314" "$HTTP_HOST" "0.0.0.0" || return 2
# If the var MAXOPENFILES is enabled in /etc/default/jenkins then set the max open files to the
# proper value
複製代碼
/etc/default/jenkins
文件sudo vim /etc/default/jenkins
複製代碼
修改HTTP_PORT
改爲所需的端口
ration, build records,
# that sort of things.
#
# If commented out, the value from the OS is inherited, which is normally 022 (as of Ubuntu 12.04,
# by default umask comes from pam_umask(8) and /etc/login.defs
# UMASK=027
# port for HTTP connector (default 8080; disable with -1)
HTTP_PORT=1314
# servlet context, important if you want to use apache proxying
PREFIX=/$NAME
# arguments to pass to jenkins.
# --javahome=$JAVA_HOME
# --httpListenAddress=$HTTP_HOST (default 0.0.0.0)
# --httpPort=$HTTP_PORT (default 8080; disable with -1)
# --httpsPort=$HTTP_PORT
# --argumentsRealm.passwd.$ADMIN_USER=[password]
複製代碼
sudo systemctl restart jenkins
複製代碼
改完後重啓出現bug
Warning: jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.
複製代碼
解決方法:
systemctl daemon-reload
複製代碼
systemctl start jenkins
複製代碼
新端口是1314
sudo systemctl start jenkins
複製代碼
jenkins
sudo systemctl status jenkins
複製代碼
● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; bad; vendor preset: enabled)
Active: active (exited) since 四 2019-04-18 09:00:28 CST; 8h ago
Docs: man:systemd-sysv-generator(8)
Process: 1136 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCE
4月 18 09:00:24 devue-System-Product-Name systemd[1]: Starting LSB: Start Jenkin
4月 18 09:00:27 devue-System-Product-Name jenkins[1136]: Correct java version fo
4月 18 09:00:27 devue-System-Product-Name jenkins[1136]: * Starting Jenkins Aut
4月 18 09:00:27 devue-System-Product-Name su[1511]: Successful su for jenkins by
4月 18 09:00:27 devue-System-Product-Name su[1511]: + ??? root:jenkins
4月 18 09:00:27 devue-System-Product-Name su[1511]: pam_unix(su:session): sessio
4月 18 09:00:28 devue-System-Product-Name jenkins[1136]: ...done.
4月 18 09:00:28 devue-System-Product-Name systemd[1]: Started LSB: Start Jenkins
複製代碼
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
複製代碼
jenkins沒法登陸或者空白頁面
解決方案:
vim /var/lib/jenkins/config.xml
複製代碼
在其中版本信息後加入
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
<securityRealm class="hudson.security.SecurityRealm$None"/>
複製代碼
重啓服務器便可
sudo systemctl restart jenkins
複製代碼
下圖是已經安裝後的
Settings
選項卡
webhook
菜單項
webhook
Payload URL
中http://
+jenkins部署的ip和端口號+/github-webhook/
Content type
中選擇application/json
Which events would you like to trigger this webhook?
選擇just the push event
Active
Update webhook
構建一個自由風格的軟件項目
,最後肯定
綁定項目的下載連接
Git
Repositories
中的Repository URL
填入項目下載連接(http)Credentials
中添加身份信息
Username with password
肯定
Branches to build
選擇部署的分支(*/分支名)構建觸發器
GitHub hook trigger for GITScm polling
構建
cd /var/lib/jenkins/workspace/vue
npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
npm install
npm run dev
複製代碼
npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
複製代碼
保存
任務建立完成,jenkins
大功告成
Test Configuration
,出現success
,那麼鏈接成功
獲取公鑰和私鑰
su jenkins
ssh-keygen -t rsa
複製代碼
判斷是否生成公鑰和私鑰
ls -l /var/lib/jenkins/.ssh/
複製代碼
jenkins@devue-System-Product-Name:/home/devue$ ls -l /var/lib/jenkins/.ssh/
total 8
-rw------- 1 jenkins jenkins 1675 4月 19 16:26 id_rsa
-rw-r--r-- 1 jenkins jenkins 415 4月 19 16:26 id_rsa.pub
複製代碼
拷貝公鑰
cd /var/lib/jenkins/.ssh/
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
複製代碼
將公鑰放進遠程服務器 authorized_keys
vim ~/.ssh/authorized_keys
複製代碼
Repository URL
必需要http請求
Gitlab Hook
若是沒有安裝
Gitlab Hook
和gitlab上增長webhook
的話,會報錯
Settings-Integrations
增長webhook
Gitlab Hook
插件
jenkins想要執行下一個構建任務的時候,是必須等上一個任務完成的(沒有勾選併發執行任務)
因爲npm run dev
,因此在定時構建的時候,並無收到理想效果。 需求是:維護進程,定時執行 步驟以下:
加上pm2構建項目,pm2入口
構建觸發器,定時構建和輪詢SCM二選一
構建中的執行shell爲
cd /var/lib/jenkins/workspace/ceres-cms-vue
npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
npm install
npm run build
npm run pm2
pm2 list
複製代碼
GitHub hook trigger for GITScm polling
這樣你的jenkins就能夠隨着你的代碼自動構建了
構建語法說明:
選項 | 意思 |
---|---|
第一個*表示分鐘 | 取值0~59 |
第二個*表示小時 | 取值0~23 |
第三個*表示一個月的第幾天 | 取值1~31 |
第四個*表示第幾月 | 取值1~12 |
第五個*表示一週中的第幾天 | 取值0~7,其中0和7表明的都是週日 |
選項 | 意思 |
---|---|
每隔1分鐘構建一次 | H/1 * * * * |
每隔1小時構建一次 | H H/1 * * * |
每個月1號構建一次 | H H 1 * * |
本地push代碼到github
點擊當即構建
構建執行狀態
點擊#13
,進入工程詳情
控制檯輸出結果
執行中控制檯輸出
Started by user unknown or anonymous
Started by user unknown or anonymous
Started by user unknown or anonymous
Building in workspace /var/lib/jenkins/workspace/vue
using credential 12dc8386-52e8-4c57-b667-bd8d263626cd
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url https://github.com/qiufeihong2018/vuepress-app.git # timeout=10
Fetching upstream changes from https://github.com/qiufeihong2018/vuepress-app.git
> git --version # timeout=10
using GIT_ASKPASS to set credentials
> git fetch --tags --progress https://github.com/qiufeihong2018/vuepress-app.git +refs/heads/*:refs/remotes/origin/*
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision ab0c6b6de9b810dcd9fd107c6329d1e782054976 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f ab0c6b6de9b810dcd9fd107c6329d1e782054976
Commit message: "Merge branch 'master' of github.com:qiufeihong2018/vuepress-app"
> git rev-list --no-walk 9b7e2475ffaef9a60cc38cec1c660d0f9d8dc490 # timeout=10
[vue] $ /bin/sh -xe /tmp/jenkins5471132310334499324.sh
+ cd /var/lib/jenkins/workspace/vue
+ npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
> chromedriver@73.0.0 install /var/lib/jenkins/workspace/vue/node_modules/chromedriver
> node install.js
ChromeDriver binary exists. Validating...
ChromeDriver 73.0.3683.20 (8e2b610813e167eee3619ac4ce6e42e3ec622017)
ChromeDriver is already available at '/tmp/73.0.3683.20/chromedriver/chromedriver'.
Copying to target path /var/lib/jenkins/workspace/vue/node_modules/chromedriver/lib/chromedriver
Fixing file permissions
Done. ChromeDriver binary available at /var/lib/jenkins/workspace/vue/node_modules/chromedriver/lib/chromedriver/chromedriver
npm WARN vuepress-app@1.0.0 No repository field.
npm WARN vuepress-app@1.0.0 scripts['server'] should probably be scripts['start'].
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.7 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.7: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
+ chromedriver@73.0.0
updated 1 package and audited 14738 packages in 13.642s
found 15 vulnerabilities (1 low, 7 moderate, 7 high)
run `npm audit fix` to fix them, or `npm audit` for details
+ npm install
npm WARN vuepress-app@1.0.0 No repository field.
npm WARN vuepress-app@1.0.0 scripts['server'] should probably be scripts['start'].
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.7 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.7: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
audited 14738 packages in 8.37s
found 15 vulnerabilities (1 low, 7 moderate, 7 high)
run `npm audit fix` to fix them, or `npm audit` for details
+ npm run dev
> vuepress-app@1.0.0 dev /var/lib/jenkins/workspace/vue
> vuepress dev docs
WAIT Extracting site metadata...
<button @click.ctrl="onClick">A</button>
<button @click.ctrl.exact="onCtrlClick">A</button>
<button @click.exact="onClick">A</button>
TIP override.styl has been split into 2 APIs, we recommend you upgrade to continue.
See: https://v0.vuepress.vuejs.org/default-theme-config/#simple-css-override
[2:52:53 PM] Compiling Client
[2:52:56 PM] Compiled Client in 4s
c
DONE [14:52:56] Build 854bb5 finished in 3536 ms!
> VuePress dev server listening at http://localhost:7777/
c[2:52:57 PM] Compiling Client
[2:52:57 PM] Compiled Client in 204ms
c
DONE [14:52:57] Build 056d13 finished in 208 ms! (http://localhost:7777/)
複製代碼
當即構建
,就能夠將最新提交的代碼運行起來BUILD_ID
jenkins默認會在構建完成後殺掉構建過程當中shell命令觸發的衍生進程。jenkins根據BUILD_ID
識別某個進程是否爲構建過程的衍生進程,故修改BUILD_ID
後,jenkins就沒法識別是否爲衍生進程,則此進程能在後臺保留運行
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe
cd /var/lib/jenkins/workspace/ceres-cms-vue
npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
npm install
npm run build
npm run pm2
pm2 list
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID
複製代碼
netstat -lntp
kill -g {id}
複製代碼
Jenkins卸載方法(Windows/Linux/MacOS)
Integrate with GitHub: build after each commit (Get started with Jenkins, part 13)
教你用Vue、GitLab、Jenkins、Nginx實現自動打包發佈上線
jenkins配置publish over ssh遇到的問題
jenkins使用publishover ssh插件鏈接應用機器時,報Message Auth fail的問題
Jenkins+git+webhook自動觸發部署和測試任務
第四十一章 微服務CICD(3)- jenkins + gitlab + webhooks + publish-over-ssh(1)
最後,別忘了給這個項目點一個star哦,謝謝支持。
一個學習編程技術的公衆號。天天推送高質量的優秀博文、開源項目、實用工具、面試技巧、編程學習資源等等。目標是作到我的技術與公衆號一塊兒成長。歡迎你們關注,一塊兒進步,走向全棧大佬的修煉之路