Closed mrbone closed 6 years ago
[TOC]
本次通过 docker 安装。
1. 首先安装 docker 2. docker pull jenkinsci/blueocean
docker run -p 8080:8080 -u root -v /var/run/docker.sock:/var/run/docker.sock -v jenkins-data:/var/jenkins_home -v "$HOME":/home jenkinsci/blueocean
这条命令需要注意的是
-p 8080:8080 #代表将 host 的 8080 端口影射到 container 的8080 端口 -v jenkins-data:/var/jenkins_home # -v /var/run/docker.sock:/var/run/docker.sock #绑定 host 机器的 /var/run/docker.sock 到 container 的 /var/run/docker.sock
用浏览器打开 loacalhost:8080 再将 terminal 中的 password 粘贴进 jenkins 初始界面,我们就能到创建用户和安装插件的基面了。 这里有个小 tips: 如果创建用户名的时候没有输入密码,则会无法登录 jenkins, 这个时候需要我们进入 docker container 禁用用户登录。步骤如下:
docker ps #记下 container id. docker exec -it container_id /bin/bash #进入 container 的 bash vi /var/jenkins_home/config.xml
这个时候 jenkins 默认就不需要用户登录了(生产环境请不要这么玩)
将官方提供的 repo clone 下来
git clone https://github.com/gilesgas/simple-node-js-react-npm-app-original.git
回到 clone 的 repo,在根目录下创建 Jenkinsfile
Jenkinsfile
pipeline { agent { docker { image 'node:6-alpine' args '-p 3000:3000' } } stages { stage('Build') { steps { sh 'npm install' } } } }
这个文件的含义是
Build
将提交 push,jenkins 会自动 trigger 一个 task。
等 build 跑完之后我们再修改 Jenkinsfile 为:
pipeline { agent { docker { image 'node:6-alpine' args '-p 3000:3000' } } + environment { + CI = 'true' + } stages { stage('Build') { steps { sh 'npm install' } } + stage('Test') { + steps { + sh './jenkins/scripts/test.sh' + } } } }
第一个新增的 section 代表将 CI 环境变量设置为 true,这个环境变量在整个 pipeline 中都可见。 后面的任务就很简单了,我们又新增了一个 Test 任务在 pipeline 中。
Test
这个时候安装 cross-env 的依赖再修改 package.json
cross-env
yarn add cross-env --dev
- "test": "react-scripts test --env=jsdom", + "test": "cross-env CI=true react-scripts test --env=jsdom",
把代码推到远程,这个时候再去 Jenkins 上点击 Build now 我们的 Test 任务就出现在 pipeline 中啦。(请忽略挂掉的那次)
Build now
终于来到最后部署步骤,仍然修改 Jenkinsfile 为:
pipeline { agent { docker { image 'node:6-alpine' args '-p 3000:3000' } } environment { CI = 'true' } stages { stage('Build') { steps { sh 'npm install' } } stage('Test') { steps { sh './jenkins/scripts/test.sh' } } + stage('Deliver') { + steps { + sh './jenkins/scripts/deliver.sh' + input message: 'Finished using the web site? (Click "Proceed" to continue)' + sh './jenkins/scripts/kill.sh' + } + } } }
重复上面的动作,这里需要注意的是 input 那行代码,此代码会在执行完之前的步骤后出现 Process 和 Abort 的选项,提示信息如 message 所示。 其实此示例最后也没有部署,只是用 npm start 演示下 build 之后的效果,如果点击 Process 则会执行之后的 kill 脚本,否则则直接终止 pipeline 并将当前任务状态设置为 abort。
Process
Abort
npm start
build
abort
官方文档
Jenkins 初探
[TOC]
安装
本次通过 docker 安装。
运行 Jenkins
这条命令需要注意的是
用浏览器打开 loacalhost:8080 再将 terminal 中的 password 粘贴进 jenkins 初始界面,我们就能到创建用户和安装插件的基面了。
这里有个小 tips: 如果创建用户名的时候没有输入密码,则会无法登录 jenkins, 这个时候需要我们进入 docker container 禁用用户登录。步骤如下:
这个时候 jenkins 默认就不需要用户登录了(生产环境请不要这么玩)
创建任务
将官方提供的 repo clone 下来
Build
回到 clone 的 repo,在根目录下创建
Jenkinsfile
这个文件的含义是
Build
的 state,该 state 会出现在 Jenkins UI 上。将提交 push,jenkins 会自动 trigger 一个 task。
Test
等 build 跑完之后我们再修改
Jenkinsfile
为:第一个新增的 section 代表将 CI 环境变量设置为 true,这个环境变量在整个 pipeline 中都可见。
后面的任务就很简单了,我们又新增了一个
Test
任务在 pipeline 中。这个时候安装
cross-env
的依赖再修改 package.json把代码推到远程,这个时候再去 Jenkins 上点击
Build now
我们的 Test 任务就出现在 pipeline 中啦。(请忽略挂掉的那次)
Delivery
终于来到最后部署步骤,仍然修改 Jenkinsfile 为:
重复上面的动作,这里需要注意的是 input 那行代码,此代码会在执行完之前的步骤后出现
Process
和Abort
的选项,提示信息如 message 所示。其实此示例最后也没有部署,只是用
npm start
演示下build
之后的效果,如果点击Process
则会执行之后的 kill 脚本,否则则直接终止 pipeline 并将当前任务状态设置为abort
。知识点
参考资料
官方文档