Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jenkins getting start #39

Closed
mrbone opened this issue Dec 5, 2017 · 1 comment
Closed

jenkins getting start #39

mrbone opened this issue Dec 5, 2017 · 1 comment
Assignees

Comments

@mrbone
Copy link
Owner

mrbone commented Dec 5, 2017

No description provided.

@mrbone mrbone added this to the Dec,2017 sprint1 milestone Dec 5, 2017
@mrbone mrbone self-assigned this Dec 5, 2017
@mrbone
Copy link
Owner Author

mrbone commented Dec 7, 2017

Jenkins 初探

[TOC]

安装

本次通过 docker 安装。

1. 首先安装 docker
2. docker pull jenkinsci/blueocean

运行 Jenkins

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
  1. set userSecurity to false: false
  2. delete
    and
  3. 重启 docker

这个时候 jenkins 默认就不需要用户登录了(生产环境请不要这么玩)

创建任务

将官方提供的 repo clone 下来

git clone https://github.com/gilesgas/simple-node-js-react-npm-app-original.git
  • 回到 localhost:8080
  • 新建一个 pipeline
  • 在下一个页面选择 pipeline tab
  • defination 下拉选择 pipeline script from SCM(Souce Control Management)
  • 在 SCM field 选择 git
  • Repository URL 输入 clone 的 repo 的路径
    • 如果 jenkins 是放在 docker 中则需要将 host 的对应目录挂载到 docker 的 volume 上
  • 保存

Build

回到 clone 的 repo,在根目录下创建 Jenkinsfile

pipeline {
    agent {
        docker {
            image 'node:6-alpine' 
            args '-p 3000:3000' 
        }
    }
    stages {
        stage('Build') { 
            steps {
                sh 'npm install' 
            }
        }
    }
}

这个文件的含义是

  • docker pull node:6-alpline 的 image,如果有则直接启动。。
  • args 代表说 node container 可以通过 3000 端口访问到。
    • Jenkins 和 node 是单独的 container 运行在 docker 当中
    • 这个 node container 成为了 Jenkins builde 当前 project 的一个 agent。并且持续时间很短,只会持续到当前任务运行结束。
  • 定义了一个叫 Build 的 state,该 state 会出现在 Jenkins UI 上。

将提交 push,jenkins 会自动 trigger 一个 task。

Test

等 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 中。

这个时候安装 cross-env 的依赖再修改 package.json

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 中啦。(请忽略挂掉的那次)

Delivery

终于来到最后部署步骤,仍然修改 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 那行代码,此代码会在执行完之前的步骤后出现 ProcessAbort 的选项,提示信息如 message 所示。
其实此示例最后也没有部署,只是用 npm start 演示下 build 之后的效果,如果点击 Process 则会执行之后的 kill 脚本,否则则直接终止 pipeline 并将当前任务状态设置为 abort

知识点

参考资料

官方文档

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant