We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
我们希望能根据 不同的环境拿到不同的secret,该secret会被打包混淆到最终的代码里。从安全角度依然不够安全,这个是另外一个话题,但是如何使用CI的方式在前端自动化地根据不同环境参数打不同的包,生成不同的zip文件呢?这是我们后面要介绍的。
使用Jenkins搭建pipeline有几种方式,可以参考文档,这里不做过多赘述,我主要是 用Jenkinsfile来创建。
在已有的repo里面创建一个Jenkinsfile,因为需要node环境,我们之前已经有了相应的agent,直接用即可。
Jenkinsfile
pipeline { agent none triggers { pollSCM 'H/5 * * * *' } options { buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '5') timeout(time: 1, unit: 'DAYS') } stages { stage('Package') { environment { CREDENTIALS_PSW = credentials("AES_PASSWORD_${ENV}") CREDENTIALS_SALT = credentials("AES_SALT_${ENV}") } agent { label 'docker-slave' } steps { sh 'chmod a+x ./ci' sh './ci build' script{ zip zipFile: "roulette_${ENV}.zip", dir: 'dist/', archive: true } } } } }
为了代码的简洁性和可读性,将真正build的脚本放在了ci这个脚本里面,所以我们还需要创建一个文件ci,跟 Jenkinsfile在同一级目录 。
ci
#!/bin/sh set -e BASEDIR=$(dirname "$0") cd $BASEDIR build() { yarn install --prefer-offline --registry=https://registry.npm.taobao.org AES_PASSWORD=$CREDENTIALS_PSW_PSW AES_SALT=$CREDENTIALS_SALT_PSW yarn build } case $1 in build ) $1;; * ) echo "not support!!! example: go <build>" exit 1;; esac
credentials:因为我们secret是比较敏感的信息,所以我们将不同环境的值存放在了crendential里面:
注意到Jenkinsfile脚本里面获取环境变量的方式:credentials("AES_PASSWORD_${ENV}"):
credentials("AES_PASSWORD_${ENV}")
ENV:上一个步骤获取ENV参数,那么这个是在pipeline里面设置的,而该pipeline又需要用到Build With Parameters这个插件,所以在创建pipeline之前需要保证jenkins已经安装了该插件:
ENV
打包的服务上面没有安装zip依赖,也不想改变server的环境,所以找到了另外一个插件Pipeline Utility Steps,用于生成最后的zip文件。
但是注意在写jenkins脚本的时候,需要写在script里面,否则语法是不生效的。当然我们也可以选择在post action的时候生成,不需要用到该插件,但是可能就需要在build 脚本里面运行node相关的命令去生成zip文件,可行,但是插件更加方便。
脚本写好了,插件也准备好了,当远程代码更新之后 ,我们就可以去创建真正的pipeline了。由于Build With Parameters这个插件并不是在所有类型的pipeline里面都有选项,所以我们最终选择了Pipeline这个选项:
对新建的pipeline进行配置: params的设置:
Build Triggers:
Gitlab的设置:
目前项目上是在分枝上打包,所以 注意这里的分支换成自己的分支,默认是所有
至此,整个搭建pipeline的过程就完成了,也是有些注意事项,比如在写ci脚本的时候不要写空函数,类似于:
packge () { // zip dist/ }
当时只是想要注释执行的那部分代码,但是到jenkins上跑的时候会有语法错误,所以空函数是不行的,需要整个函数注释或者打开注释。
build之后最终的结果:
zip包就可以很方便地下载啦,点击红色框里面的zip链接即可。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Prerequisite
背景/需求
我们希望能根据 不同的环境拿到不同的secret,该secret会被打包混淆到最终的代码里。从安全角度依然不够安全,这个是另外一个话题,但是如何使用CI的方式在前端自动化地根据不同环境参数打不同的包,生成不同的zip文件呢?这是我们后面要介绍的。
搭建步骤
使用Jenkins搭建pipeline有几种方式,可以参考文档,这里不做过多赘述,我主要是 用Jenkinsfile来创建。
在已有的repo里面创建一个
Jenkinsfile
,因为需要node环境,我们之前已经有了相应的agent,直接用即可。为了代码的简洁性和可读性,将真正build的脚本放在了
ci
这个脚本里面,所以我们还需要创建一个文件ci
,跟Jenkinsfile
在同一级目录 。credentials:因为我们secret是比较敏感的信息,所以我们将不同环境的值存放在了crendential里面:
注意到
Jenkinsfile
脚本里面获取环境变量的方式:credentials("AES_PASSWORD_${ENV}")
:ENV
:上一个步骤获取ENV
参数,那么这个是在pipeline里面设置的,而该pipeline又需要用到Build With Parameters这个插件,所以在创建pipeline之前需要保证jenkins已经安装了该插件:打包的服务上面没有安装zip依赖,也不想改变server的环境,所以找到了另外一个插件Pipeline Utility Steps,用于生成最后的zip文件。
但是注意在写jenkins脚本的时候,需要写在script里面,否则语法是不生效的。当然我们也可以选择在post action的时候生成,不需要用到该插件,但是可能就需要在build 脚本里面运行node相关的命令去生成zip文件,可行,但是插件更加方便。
脚本写好了,插件也准备好了,当远程代码更新之后 ,我们就可以去创建真正的pipeline了。由于Build With Parameters这个插件并不是在所有类型的pipeline里面都有选项,所以我们最终选择了Pipeline这个选项:
对新建的pipeline进行配置:
params的设置:
Build Triggers:
Gitlab的设置:
目前项目上是在分枝上打包,所以 注意这里的分支换成自己的分支,默认是所有
至此,整个搭建pipeline的过程就完成了,也是有些注意事项,比如在写ci脚本的时候不要写空函数,类似于:
当时只是想要注释执行的那部分代码,但是到jenkins上跑的时候会有语法错误,所以空函数是不行的,需要整个函数注释或者打开注释。
build之后最终的结果:
zip包就可以很方便地下载啦,点击红色框里面的zip链接即可。
The text was updated successfully, but these errors were encountered: