Size: 8004
Comment: cmake complete
|
Size: 8068
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 77: | Line 77: |
= Docker Images = 1. CentOS 6 1. Jenkins 1. CircleCI |
Contents
CMake
- Dependency binaries are pulled from Anaconda. CMake uses conda environment location to find packages.
Make targets can be listed with make help. Some convenience targets are:
$ make help The following are some of the valid targets for this Makefile: ... ..... ... ..... ... PythonFiles ... test-rt ... test-py-compile ... test-verbose-broken ... test-progs ... test-verbose ... ..... ... .....
libpython can be linked statically or dynamically when python is built. It is important for python extensions to be aware of the type of linking in order to avoid segfaults. This can be accomplished by querying Py_ENABLE_SHARED.
1 python -c "import sysconfig; print(sysconfig.get_config_var('Py_ENABLE_SHARED'))"
In EMAN, it is done in cmake/FindPython.cmake
- OpenGL detection when Anaconda's compilers are used is done using a cmake toolchain file.
- glext.h file needed for OpenGL related module compilation is already present on Linux and Mac. On Windows, it is manually copied once into C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\gl. On Appveyor it is downloaded as part of env setup every time a test is run.
- Compiler warnings are turned off by default and can be turned on by setting ENABLE_WARNINGS=ON
1 cmake <source-dir> -DENABLE_WARNINGS=ON
Setting compiler and linker options by include_directories, add_definitions that have global affects are avoided and target-focused design employing modern cmake concepts like interface libraries are used as much as possible.
Under Construction
Anaconda
Feedstocks, conda-smithy, https://anaconda.org/cryoem/
- ftgl
- fftw-mpi
- openmpi
- pydusa and pydusa-feedstock
- constructor and constructor-feedstock
- eman-deps-feedstock, eman-deps-cli
- eman-packaging-feedstock
File structure, dependencies ? ABI compat
- conda
- conda-build
- constructor
Continuous Integration
GitHub webhooks
- Test source build and conda recipe build (conda-build).
- Binary builds on local build machines.
- Manually triggered build on master and non-master.
- Cron builds.
- Release binaries manually copied from cont. builds.
JenkinsCI: Jenkinsfile, binary builds
Docker Images
- CentOS 6
- Jenkins
- CircleCI
Jenkins Setup
- Triggers
GitHub webhooks
- Cron
- Binary build trigger
- Jenkins master needs PATH prepended with $CONDA_PREFIX/bin
- Jenkins Docker image, docker-coompose or docker stack deploy
- docker-compose.yml at home dir in build machines
- plugins
- config, jcasc, config.xml, users.xml, jobs/*.xml?, gpg encrypt
- Agent nodes setup, agent nodes auto-start
- Server and agent per machine vs single server and os agents
- Master only
- Master and agent per machine
- Single master and OS agents
Linux
- systemctl
docker run -d -u root -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /home/eman2/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts &
docker run -d -u root --name jenkins-master -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /home/eman2/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -e PLUGINS_FORCE_UPGRADE=true -e TRY_UPGRADE_IF_NO_MARKER=true --restart unless-stopped cryoem/jenkins:dev
cron:
0 0 * * * bash /home/eman2/workspace/cronjobs/cleanup_harddisk.sh
$ cat Desktop/docker.txt docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts docker run -p 8080:8080 -p 50000:50000 --restart unless-stopped jenkins/jenkins:lts docker run -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /home/eman2/jenkins_home:/var/jenkins_home jenkins/jenkins:lts docker run -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /var/jenkins_home:/home/eman2/jenkins_home jenkins/jenkins:lts
# Working docker run -u root -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /home/eman2/jenkins_home:/var/jenkins_home jenkins/jenkins:lts docker run -u root -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /home/eman2/jenkins_home:/var/jenkins_home jenkins
docker run -d -u root -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /home/eman2/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts
sudo docker run -it -v /var/jenkins_home:/home/eman2/jenkins_home jenkins
startup: right-click ???
Mac
- plist
docker run -d --name jenkins-master -p 8080:8080 -p 50000:50000 -v /Users/eman/workspace/jenkins_home:/var/jenkins_home --restart unless-stopped jenkins/jenkins:lts
Auto startup: plist https://imega.club/2015/06/01/autostart-slave-jenkins-mac/ /Users/eman/Library/LaunchAgents
slave clock sync https://blog.shameerc.com/2017/03/quick-tip-fixing-time-drift-issue-on-docker-for-mac docker run --rm --privileged alpine hwclock -s
client 0 free swap space
$ cat Desktop/docker.txt docker run -p 8080:8080 -v /Users/eman/workspace/jenkins_home:/var/jenkins_home jenkins docker run -it -p 8080:8080 -v /Users/eman/workspace/jenkins_home:/var/jenkins_home --restart unless-stopped jenkins
# Working docker run -it -p 8080:8080 -v /Users/eman/workspace/jenkins_home:/var/jenkins_home --restart unless-stopped jenkins/jenkins:lts
# Blue Ocean docker run \
- -u root \ --rm \ -d \ -p 8080:8080 \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean
# Latest docker run -d --name jenkins-master -p 8080:8080 -p 50000:50000 -v /Users/eman/workspace/jenkins_home:/var/jenkins_home --restart unless-stopped jenkins/jenkins:lts
FROM jenkins/jenkins:lts COPY plugins.txt /usr/share/jenkins/ref/plugins.txt RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt
plugins.txt: ace-editor:latest bouncycastle-api:latest branch-api:latest chef-identity:latest
Settings: tokens slaves
Windows
Move jenkins_home http://tech.nitoyon.com/en/blog/2014/02/25/jenkins-home-win/
Run as service: Open Task Manager(Ctrl+Shift+Esc), New task, Browse to agent.jnlp and run as admin does this work? This is when starting via Web Launcher doesn't work.
currently, task scheduler works need to have miniconda pn path, set it during miniconda installation, but do not(?) register python.
While installing miniconda register python and add to PATH. Then, conda init in cmd (git init cmd.exe) and git windows (git init bash). And, maybe restart???
BUG: miniconda3 conda-build=3.17.8 adds vc14 even if python2 is requested in build reqs
OPENGL: https://github.com/conda/conda-recipes/blob/master/qt5/notes.md
Distribution
Binaries on cryoem.bcm.edu
EMAN2 on anaconda.org